установить кнопку на действие в методе 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 в качестве параметра и заставить его работать, но нужная мне функция будет в одной функции, и, если это возможно, с помощью как можно меньшего количества строк кода .

Большое спасибо


person Community    schedule 01.05.2017    source источник


Ответы (2)


Для вызова функции void в обработчике действия полезно лямбда-выражение. Как это:

buttonForLoad.setOnAction(e -> loadFootage());
buttonForSave.setOnAction(e -> saveFootage());
...
person monolith52    schedule 02.05.2017

Возможно, вы имели в виду прослушиватель действий, например:

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
            }
        });

...
}
person Vasyl Lyashkevych    schedule 01.05.2017
comment
Вопрос помечен как JavaFX, поэтому, предположительно, это кнопка JavaFX, а не кнопка AWT. - person James_D; 03.05.2017