我有两个控制器类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");
}
}
答案 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);
}