В JavaFX, как вы можете моделировать:Как сигнализировать/уведомлять суперконтроллер об изменении в субконтроллере?
Я показываю список клиентов в сцене. На левой стороне находится таблица с правой стороны (contentPane) отображаются текущие данные выбранного клиента.
(Соответствующая часть) Main-контроллер:
@jfxf.FXML
protected def newButtonPressed(): Unit =
{
contentPane.getChildren.clear
contentPane.getChildren.add(FXMLLoader.load(GUILoader.load("customers/form.fxml")))
}
Существует кнопка для добавления нового клиента. При нажатии этой кнопки вместо открытия всплывающего окна я заменяю «детали» - часть сцены и добавляю туда форму.
Теперь для этой формы (как и остальная часть GUI - в SceneBuilder и сохранена как .fxml) Я использую другой контроллер.
class Form extends Main with jfxf.Initializable
{
@jfxf.FXML
private var foreNameTextField: jfxsc.TextField = _
@jfxf.FXML
private var lastNameTextField: jfxsc.TextField = _
@jfxf.FXML
private var ageTextField: jfxsc.TextField = _
override def initialize(url: URL, resourceBundle: ResourceBundle): Unit =
{
}
@jfxf.FXML
protected def ok(): Unit =
{
// TODO validation
val newPerson = new Person(-1, foreNameTextField.getText, lastNameTextField.getText, ageTextField.getText.toInt)
// Save to DB
// Close whole form
}
}
Когда я закончу с заполнением деталей нового клиента, я нажать на другую кнопку (что вызывает ОК()) и сохраните его в базу данных.
Теперь я хочу закрыть форму и заменить ее на детализированную форму.
Что-то вроде вызова защищенного метода в основном-контроллера, как:
protected def clearDetails(): Unit =
{
contentPane.getChildren.clear
contentPane.getChildren.add(savedOldDetails)
}
не будет работать, конечно. (Кинет во время выполнения-исключение, потому что нет ContentPane в суб/форм-контроллера (даже если я делаю это защищенный)
В Qt (C++) Я хотел бы использовать сигналы/слоты и подключить их соответствующим образом.
Похоже, в JavaFX нет ничего подобного. Как я должен делиться такой информацией?
Мне нужно, чтобы создать «супер-контроллер» для ContentPane ли?