有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java想要更改javafx中另一个fxml控制器类的标签文本

我有两个控制器类Fxml1。java和Fxml2。JAVA在Fxml1中。java I有标签l1,在Fxml2中有标签l1。java我有文本字段t1。我在文本字段t1中有一些文本,我想将这些文本设置为标签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) 个答案

  1. # 1 楼答案

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

    你应该通过使用事件来处理这个问题。基本教程可以在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);
    }