powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX - FXML. Как вывести данные в Label
10 сообщений из 10, страница 1 из 1
JavaFX - FXML. Как вывести данные в Label
    #39280719
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача такая: Нужно сделать окно. В нем статус бар. В статусбаре - поле, в которое надо поместить логин.
Хочу сделать это все с использованием FXML.

Описываю статус бар:


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>

<HBox alignment="CENTER_RIGHT" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="41.0" prefWidth="872.0" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.maxifly.GUI.StatusBar">
   <padding>
      <Insets bottom="5.0" left="10.0" right="10.0" top="5.0" />
   </padding>
   <children>
      <Label fx:id="userlogin" prefHeight="21.0" prefWidth="263.0" text="login:" />
   </children>
</HBox>



Описываю контрол:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
package com.maxifly.GUI;

import javafx.fxml.FXML;
import javafx.scene.control.Label;


public class StatusBar {
    @FXML private Label userlogin;

    public void setLogin(String login){
        if (login == null) {
            this.userlogin.setText("login:");
        } else {
            this.userlogin.setText("login: " + login);
        }
    }
}



Создаю главную страницу и вывожу статус бар:

Код: java
1.
2.
3.
4.
        BorderPane root = new BorderPane();
HBox hBox_statusbar = FXMLLoader.load(Factory_GUI.class.getResource("StatusBar.fxml"));
root.setBottom(hBox_statusbar);
Scene scene = new Scene(root, 400, 250);



Встает вопрос, как теперь увязать между собой StatusBar и hBox_statusbar?

Если я вызываю:
Код: java
1.
2.
StatusBar statusBar = new StatusBar();
statusBar.setLogin("kuku");



то я получаю NullPointerException, потому что private Label userlogin == null.
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39280766
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxifly,

JavaFX создает экземпляр контроллера и инжектит туда элементы GUI по аннотациям. Вы же создаёте свой собственный экземпляр контроллера, который не имеет никакого отношения к тому что использует JavaFX.

Посмотрите пример здесь
http://stackoverflow.com/a/23461254
Там показано как использовать FXMLLoader чтобы получить из него контроллер.

Ещё остаётся открытым вопрос почему вы вызываете метод setLogin откуда-то снаружи контроллера, а не изнутри? Пользователь вводит пароль вне UI? Или это SSO?
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39280895
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Спасибо,
я думал, что контроллер надо самому создать и потом как-то связывать самому. (Из туториала ораклового, как-то не очень это было ясно, ну или я невнимательно прочел).

Что касается того, что Login снаружи - ну это просто для примера пока так у меня. Ну пусть это будет не логин, а что-то абстрактное.
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39280914
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxiflyЧто касается того, что Login снаружи - ну это просто для примера пока так у меня. Ну пусть это будет не логин, а что-то абстрактное.
Ну, вот поэтому в туториале и не обговаривается. Обращаться к контроллеру снаружи в простых ситуациях надобности нет.
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39281307
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Хм.

Ну а если есть окно приложения. В нем форма и строка состояния. В форме что-то заполняется, жмется кнопка. Нужно поменять строку состояния.

И как это сделать?
Тут же будет как я понимаю, два контрола, один под окно приложения а второй под окно формы. Или я что-то путаю?
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39281315
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxifly,

Что-то путаете. Один FXML файл - один контроллер.
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39281373
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Да вроде нет
Окно приложения - FXML-файл1 - контроллер1
Форма - FXML-файл2-контроллер2

Так ведь?

Теперь я делаю видимой в окне приложения форму. Работа с ней меняет строку состояния. Значит контроллер2 должен как-то доступиться к контроллеру 1.

Или я что-то не так понимаю?
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39281403
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxiflyДа вроде нет
Окно приложения - FXML-файл1 - контроллер1
Форма - FXML-файл2-контроллер2
Так ведь?

Не обязательно. Можно в одном сделать. Разве что если у вас действительно большое приложение.

MaxiflyТеперь я делаю видимой в окне приложения форму. Работа с ней меняет строку состояния. Значит контроллер2 должен как-то доступиться к контроллеру 1.
Или я что-то не так понимаю?
Архитектуру, таки да, немного не понимаете. Контроллерам не нужно знать друг о друге. Им нужно знать об общей Domain Model - структуры и поведение. Контролы (элементы UI) биндятся на эту модель. При вводе текста, UI формы через биндинг обновляет некое свойство Domain Model. Domain Model обрабатывает изменение и меняет другое свойство (статус)? Это свойство тоже "привязано" но уже к другому элементу UI. Его изменение через внутренние события отображается в строке статуса.

Главная проблема тут это как в обоих контроллерах сослаться на один и тот же Domain Model.
Вот пример
http://stackoverflow.com/a/20101776
Можно через Spring IoC поискать решения.
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39281574
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Прикольно. Я и не подозревал, что так можно.
С одной стороны все запутанно. А с другой - очень просто.

Спасибо большое.
...
Рейтинг: 0 / 0
JavaFX - FXML. Как вывести данные в Label
    #39281634
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxiflyПрикольно. Я и не подозревал, что так можно.
С одной стороны все запутанно. А с другой - очень просто.
Спасибо большое.

Обязательно разберитесь в binding в JavaFX. Он весь на этом построен. Экономит кучу кода, хотя и далек от идеала.
Почитайте про Model-View-ViewModel паттерн как одну из форм MVC.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX - FXML. Как вывести данные в Label
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]