簡體   English   中英

要更改javafx中另一個fxml控制器類的標簽文本

[英]want to change label text from another fxml controller class in javafx

我有兩個控制器類Fxml1.java和Fxml2.java。 在Fxml1.java中,我具有標簽l1,在Fxml2.java中,我具有文本字段t1。 我在文本字段t1中有一些文本,我想將此文本設置為Label l1。 我想做下面的事情。 下面是一個簡單的偽代碼,用於理解認為兩個類都有單獨的fxml文件。 在這里,我收到NullPointerException。

 //class Fxml1
    public class Fxml1{

    public label l1;

    l1.setText("hello");

    }

    //class Fxml2
    public class Fxml2{
    public TextField t1;
    public Button b1;
    public Fxml1 ob;


    public void onButtonSubmit(ActionEvent event){
    ob  = new Fxml1();
    ob.l1.setText(t1.getText());
    }
     public void initialize(URL url, ResourceBundle rb){
    t1.setText("This is textfield text");
    }
    }

在您的Fxml2控制器中,您正在創建一個新的,完全獨立的Fxml1實例,該實例未鏈接到您的fxml圖形文件,因此它無法更新所需的標簽,因為它無權訪問它或知道它的存在。

您應該通過使用事件來處理。 Vogella的網站上可以找到基本的教程。

將事件代理注入到兩個控制器中:

@Inject IEventBroker broker;

在文本更新后,應在Fxml2控制器中將此字符串發布到事件代理:

public void onButtonSubmit(ActionEvent event) {
    broker.post("SomeSharedConstant", t1.getText());
}

在Fxml1控制器中,您應該偵聽此事件並在觸發它時更新標簽。

@Inject @Optional
public void  getEvent(@UIEventTopic("SomeSharedConstant") String text) {
    // text1 is a SWT Text field
    l1.setText(text);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM