如何从JavaFX中的现有窗格访问控制器?

时间:2017-11-07 11:24:22

标签: javafx controller

我需要在第二个Pane中更改操作上的文字。为此,我尝试使用:

try{
    HouseDA.setDefault(house);

    FXMLLoader loader = new FXMLLoader(); //Loads an object hierarchy from an XML document.
    loader.setLocation(MainApp.class.getResource("view/MainSideMenu.fxml")); // which document
    loader.load();

    MainSideMenuController controller = loader.<MainSideMenuController>getController();
    controller.refreshHouseInfo();

    }catch(Exception e){}

代码完美无缺,但文字没有变化。调试后,它看起来像是创建了我Pane的另一个实例并更改了那里的文本。如何访问现有窗格的控制器以便我可以更改文本?

2 个答案:

答案 0 :(得分:0)

我不确定我是不是不喜欢你的问题,但你可以试试这个。

  1. 创建一个包含2个窗格的FXML文件。
  2. 在第一个窗格中创建一些元素。 (例如TextArea)
  3. 在第二个窗格中创建一些按钮。
  4. 将其提供给TextArea,将Button提供给ID。 FXML文件中的(fx:id =“yourID”)。
  5. 在主控制器类中创建实例。 (TextArea yourTextAreaID; Button yourButtonID)
  6. 然后,您可以从其他窗格更改myTextArea中的所有内容。

    yourButtonID.setOnAction(event -> {
        yourTextAreaID.setText("something");
    });
    

    如果用户单击该按钮,则在textArea的第二个窗格中,文本将设置为“something”。 (如果只想显示一个窗格,可以使用setVisible(boolValue)方法管理它)

    mySecondPane.setVisible(false);
    

答案 1 :(得分:0)

我也在搜索相同的内容,但找不到。但是在将Parent节点转换为Scene之后,我们可以从Scene获取FxmlLoader。这样就可以得到控制器。

input {
    rabbitmq {
        host => "rabbitmq:5672"
        user => "user"
        password => "password"
        queue => "queue "
        durable => true
        prefetch_count => 1
        threads => 3
        ack => true
        metadata_enabled => true
    }
}

filter {
  if [@metadata][rabbitmq_properties][timestamp] {
    date {
      match => ["[@metadata][rabbitmq_properties][timestamp]", "UNIX"]
    }
  }
}

output {
    elasticsearch {
        hosts => ['http://elasticsearch:9200']
        index => "%{[@metadata][rabbitmq_properties][IndexName]}_%{+YYYY.MM.dd}"
    }

    stdout {codec => rubydebug}
}

希望有帮助