2013-12-10 2 views
2

Я пытаюсь изменить текст ярлыка GUI программного обеспечения JavaFX каждый раз, когда пользователь переходит на эту страницу. Для этого я должен иметь возможность изменять значения этой метки, например, анализировать ее на переменную и делать это.Нельзя манипулировать ярлыком из JavaFX

Проблема в том, что все эти метки написаны на FXML, я не знаю, как правильно использовать его на Java. Я пробовал:

@FXML public Label WordID;

, чтобы сделать ярлык (который имеет «WordID» как идентификатор), но я потерпел неудачу. Когда я это сделаю, программа просто не пойдет в этот фрейм. Что я делаю?

Код:

public class Screen3Controller implements Initializable, ControlledScreen { 

ScreensController myController; 

    @Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
} 

public void setScreenParent(ScreensController screenParent){ 
    myController = screenParent; 
} 

@FXML 
private void goToScreen1(ActionEvent event){ 
    myController.setScreen(ScreensFramework.screen1ID); 
} 

@FXML 
private void goToScreen2(ActionEvent event){ 
    myController.setScreen(ScreensFramework.screen2ID); 
} 

} 

FXML:

<Label fx:id="WordID" layoutX="393.0" layoutY="148.0" prefWidth="177.0" text=""> 
    <font> 
    <Font name="Avenir Roman" size="40.0" /> 
    </font> 
</Label> 

Кнопка Слушатель из screen2: сообщение

@FXML 
private void goToScreen3(ActionEvent event){ 
    myController.setScreen(ScreensFramework.screen3ID); 
    WordID.setText("LOl"); 
} 

Ошибка:

Стекло обнаружило выдающееся исключение Java в - [GlassViewDelegate sendJavaMouseEvent:]: src/com/sun/mat/ui/GlassViewDelegate.m: 543 Исключение в потоке «Тема приложения JavaFX» java.lang.RuntimeException: ... com .sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent (CompositeEventHandler.java:64) на com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:217) в com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent (EventHandlerManager.java:170) в com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent (CompositeEventDispatcher.java:38) com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run (GlassViewEventHandler.java:250) at com.sun.javafx.tk.quantum.GlassViewEventHandler $ Мышь EventNotification.run (GlassViewEventHandler.java:173) на java.security.AccessController.doPrivileged (Native Method) в javafx.fxml.FXMLLoader $ ControllerMethodEventHandler.handle (FXMLLoader.java:1444) ... 40 более Вызванный : java.lang.NullPointerException в screensframework.Screen3Controller.mostrarPalavra (Screen3Controller.java:89) ... 50 более

+0

'WordID' или' palavraID'? – Math

+0

wordID.Я изменил его, чтобы сделать его более читаемым в StackOverflow, но забыл об изменении на FXML. В любом случае, это все равно не сработает после того, как я его поменю – user3088010

+0

Что вы хотите записать в ярлыке? Какое событие вызовет это? – Math

ответ

1

для работы с программным Label все, что вам нужно сделать, это объявить переменную в Controller файл с тем же идентификатором, который указан в вашем файле .fxml:

YourFXML.fxml

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.sample.Screen3Controller "> 
    ... 
    <Label fx:id="WordID" layoutX="393.0" layoutY="148.0" prefWidth="177.0" text=""> 
     <font> 
     <Font name="Avenir Roman" size="40.0" /> 
     </font> 
    </Label> 
    ... 
</AnchorPane> 

com.sample.Screen3Controller должен ссылаться на существующий файл .java в com.sample пакете.

Screen3Controller .Java

import javafx.scene.control.Label; //make sure you're importing the JavaFX Label 

public class Screen3Controller implements Initializable, ControlledScreen { 

    ScreensController myController; 
    @FXML private Label WordID; 

    ... 

    WordID.setText("some text..."); 

    ... 
} 
+0

Это все еще не сработает. Когда я это делаю, следующий кадр просто не открывается, когда я нажимаю кнопку действия. Что может произойти с моей программой? – user3088010

+0

Что именно вы называете 'frame'? Вам не нужна новая сцена, просто переопределите значения в текущем. Можете ли вы добавить слушателя Button к своему вопросу? – Math

+0

Я вызываю рамку _scene_. Я добавлю слушателя Button к вопросу. Кстати, если у вас есть учебник, который поможет мне с этими проблемами JavaFX, я буду бесконечно благодарен. – user3088010

Смежные вопросы