В программе есть панель с кнопками, которая изначально выглядит так:
При запуске программы я использую метод
attachMonitoringEvents()
, который по задумке должен регистрировать все обработчики событий в программе:
public ControllerMonitoringEnvironment(MonitoringEnvironment monitoringEnvironmentModel,MonitoringEnvironmentView monitoringEnvironmentView) {
this.monitoringEnvironmentModel = monitoringEnvironmentModel;
this.monitoringEnvironmentView = monitoringEnvironmentView;
attachMonitoringEvents();
}
Button addImageForActivityButton;
TextField nameOfActivityTextField;
public void attachMonitoringEvents() {
monitoringEnvironmentView.getAddActivityButton()
.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("Создать активность");
addImageForActivityButton = new Button();
//...//
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Выбор изображения для активности");
addImageForActivityButton.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
configureFileChooser(fileChooser);
File file = fileChooser.showOpenDialog(stage);
if (file != null) {
openFile(file);
attachActivityPanelsEvents();
createAddActivityPanel(file);
}
}
}
);
}
});
}
В этом методе регистрируется обработчик события нажатия на кнопку с плюсом.
Нажали на кнопку с плюсом. Результат:
Появилась кнопка для добавления изображения.
Обработчик кнопки для добавления изображения объявляется в обработчике кнопки с плюсом.
Выбрали изображение:
Появилась кнопка "ОК". Подключили обработчик кнопки "ОК":
private void createAddActivityPanel(File file) {
Button okChooseImageButton = new Button("OK");
// okChooseImageButton.addEventHandler(MouseEvent.MOUSE_CLICKED,addActivityHandler);
}
private void attachActivityPanelsEvents() {
EventHandler<MouseEvent> addActivityHandler =
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("Add activity");
}
};
nameOfActivityTextField.setOnKeyPressed(
new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.ENTER) {
System.out.println("Add activity");
}
}
}
);
}
Хочу
addActivityHandler
подключить в методе
createAddActivityPanel()
.
Можно и разумно ли создавать/подключать обработчик события в другом обработчике событий?
Как правильно подключать и отключать обработчики событий в JavaFX если элементы добавляются динамически?