Установить кнопку на действие в методе Java
Как я могу установить действие кнопки в том же методе, который я создаю для кнопок?
Мой желаемый метод будет что-то вроде этого:
private void buttonsCreation() {
//----------------creation of interactive buttons with text-----------------
Button buttonForLoad = new Button("Load footage file");
Button buttonForSave = new Button("Save footage file");
Button buttonForSaveAs = new Button("Save as footage file");
ButtonbuttonForRun = new Button("Run footage animation");
Button buttonForTerminate = new Button("Stop footage animation");
Button buttonForEditMenu = new Button("Edit current footage");
//---------------setting the interaction of the buttons---------------------
buttonForLoad.setOnAction(loadFootage());
buttonForSave.setOnAction(saveFootage());
buttonForSaveAs.setOnAction(saveAs());
buttonForRun.setOnAction(runAnimation());
buttonForTerminate.setOnAction(terminateAnimatino());
buttonForEditMenu.setOnAction(editMenu());
}
Я хотел бы, чтобы атрибуты setOnAction вызывали эти методы, но я получаю эту ошибку. setOnAction в ButonBase не может применяться к void.
Я знаю, что могу создать дескриптор void с параметром ActionEvent и заставить его работать, но моя желаемая функция будет в одной функции, и, если это возможно, с наименьшим количеством строк кода, насколько это возможно.
Спасибо большое
2 ответа
Чтобы вызвать функцию void в обработчике действия, лямбда-выражение полезно. Как это:
buttonForLoad.setOnAction(e -> loadFootage());
buttonForSave.setOnAction(e -> saveFootage());
...
Может быть, вы имели в виду слушателя действия, например:
private void buttonsCreation() {
//------------creation of interactive buttons with text---------------
Button buttonForLoad = new Button("Load footage file");
buttonForLoad.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// to do something
}
});
...
}