2013-12-10 61 views
2

我試圖每次用戶轉到該頁面時更改JavaFX軟件GUI標籤的文本。爲此,我必須能夠更改該標籤的值,例如將其解析爲變量並執行這些操作。無法操作來自JavaFX的標籤

問題是,由於標籤全都是用FXML編寫的,我不知道如何在Java上正確使用它。我試過了:

@FXML public Label WordID;

爲了使標籤(其具有「WordID」作爲ID)的一個對象,但我失敗了。當我這樣做時,程序就不會再去那個框架了。我該怎麼辦?

代碼:

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:從畫面2

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

按鈕偵聽:

@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 Application Thread」中的異常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) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run(GlassViewEventHandler.java:250) 在com.sun.javafx.tk.quantum.GlassViewEventHandler $ Mouse EventNotification.run(GlassViewEventHandler.java:173) 在java.security.AccessController.doPrivileged(本機方法) 在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文件中聲明的相同的ID:

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必須在com.sample包參考現有.java文件。

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

我正在調用frame _scene_。我會將Button的偵聽器添加到問題中。順便說一句,如果你有一個教程能幫我解決這些JavaFX問題,我會永遠感激。 – user3088010