Ссылка на атрибут класса контроллера в FXML

#java #javafx #fxml

#java #javafx #fxml

Вопрос:

У меня есть приложение JavaFX с файлом FXML и назначенным классом Java, который будет выступать в качестве контроллера для этого FXML. Как мне привязать атрибут класса к значению в FXML? Например:

Мой класс контроллера:

     public class MyController{
    ...
    @FXML
    static String myString = "this is text";
    ...
}
  

И следующий FXML:

 <Pane fx:controller="MyController">
    ...
    <String fx:value="MyController.myString">
    ...
</Pane>
  

Если бы я сделал выше, fx:value он был бы привязан к литералу "MyController.myString" . Как мне привязать его к статической переменной, которую я установил в контроллере?

Ответ №1:

Вы можете использовать

 <MyController fx:constant="myString"/>
  

(при условии, что у вас есть соответствующий импорт для вашего класса контроллера в файле FXML). Я не тестировал, но вам, вероятно, нужно сделать myString final.


Если вы хотите привязать к чему-то переменному, то есть не к константе, вы можете определить свойство в самом FXML:

 <fx:define>
    <SimpleStringProperty fx:id="myString" />
</fx:define>
  

и привязать его к чему-то

 <Label text="${myString}" />
  

и, конечно, вы можете ввести его в контроллер так же, как и любое другое значение:

 public class MyController {

    @FXML
    private StringProperty myString ;

    public StringProperty myStringProperty() {
        return myString ;
    }

    public final String getMyString() {
        return myStringProperty().get();
    }

    public final void setMyString(String myString) {
        myStringProperty().set(myString);
    }

    // ...
}