想要在javafx

时间:2018-02-12 10:02:37

标签: java 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");
    }
    }

1 个答案:

答案 0 :(得分:0)

在您的Fxml2控制器中,您正在创建一个新的,完全独立的Fxml1实例,该实例未链接到您的fxml图形文件,因此它无法更新您所需的标签,因为它无法访问它或任何知识存在。< / p>

您应该通过使用事件来解决这个问题。可以在Vogella's site上找到基本教程。

将事件代理注入两个控制器:

@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);
}