Как зарегистрировать обработчик кнопок (вложенный класс) - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь зарегистрировать свою кнопку, но я не знаю, как это сделать, я создал вложенный класс ButtonHandler, реализующий EventHandler, чтобы определить его действие.

Я пробовал код musicRecord. setOnAction (new ButtonHandler ());и, похоже, это не работает, я хочу зарегистрировать ButtonHandler в musicRecord.

    musicRecord = new Button("Create a Music Record");
private class ButtonHandler implements EventHandler<ActionEvent> {
    @Override
    public void handle(ActionEvent event) {
        Music m1 = new Music();
        m1.setTitle(titleField.getText());
        m1.setYear(Integer.parseInt(yearField.getText()));
        m1.setDescription(descField.getText());
        musicDisplay.appendText(m1.toString());
        musicList.add(m1);
}

Я ожидаю, что кнопка будет выполнять действия по событию при нажатии.

1 Ответ

0 голосов
/ 14 октября 2019

Не уверен, в чем ваша ошибка, когда вы говорите "не работает". Ниже приведен простой быстрый рабочий демо. Вы выясняете, в чем дело.

Примечание. Если единственная цель внутреннего класса - определить метод handle (), то вы можете сделать это с помощью лямбды.

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class CustomHandlerDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        StackPane root = new StackPane();
        Button button = new Button("Check");
        button.setOnAction(new ButtonHandler());

        // You can do it like this as well
        /*
        button.setOnAction(e->{
            System.out.println("Clicked 2");
        });
        */

        root.getChildren().add(button);
        Scene sc = new Scene(root, 300, 300);
        primaryStage.setScene(sc);
        primaryStage.show();
    }

    private class ButtonHandler implements EventHandler<ActionEvent>{
        @Override
        public void handle(ActionEvent event) {
            System.out.println("Clicked 1");
        }
    }

}
...