Цитата M_N:
Как сделать так, чтобы значение надписи было из переменной, а не прописано в XML-файле?Тут надо понимать, что из себя представляет FXML и какова его роль.
FXML - лишь описание того, какие компоненты интерфейса будут в нашем окне, какие они имеют параметры и как они будут взаимодействовать.
Вот ты пишешь
При загрузке
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Main.fxml"),
ResourceBundle.getBundle("resources.i18n.Language", Locale.getDefault()));
парсится fxml файл, создаются компоненты (в данном случае Button), заполняются данными (text = "Нажми!") и добавляются в контейнер, сцену.
После этого, понятия fxml больше нет. Теперь мы работаем с компонентами в памяти.
У каждого компонента есть свойства. Например text, ширина, цвет фона и т.д. Чтобы "значение надписи было из переменной", нужно изменить свойство. button.setText("Привет, Коля!").
Вопрос в том, что нам нужно получить переменную button, чтобы управлять ею.
Вариант #1. С контроллером
Вариант #1. С контроллером
В случае с fxml есть отличный вариант с контроллером.
Указываем в fxml класс контроллера, и сам контроллер.
Тогда у нас будет
@FXML
private Button button;
и вот теперь мы можем через button изменять всякие свойства, будь то текст, будь то цвет.Вариант #2. С поиском (lookup)
Вариант #2. С поиском (lookup)
Есть ещё один способ, без контроллеров, похожий на способ работы с компонентами интерфейса в Android.
<Button fx:id="button" text="Нажми!">
Node node = FXMLLoader.load(getClass().getResource("/fxml/Main.fxml"));
Button button = (Button ) node.lookup("#button");
button.setText("прошиваем, что-нибудь");
Есть ещё биндинги, которые автоматически изменяют свойства компонентов при изменении "переменных", но ты пока это перевари, позже к ним вернёмся.
__________________