Установить кнопку на действие в методе 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
            }
        });

...
}
Другие вопросы по тегам