Вопрос:

Как обработать несколько событий для одного и того же узла в JavaFX, используя только один класс обработки событий?

java javafx

252 просмотра

1 ответ

2 Репутация автора

каждый. Я искал этот вопрос, но я не нашел его здесь, поэтому я думаю, это действительно просто.

Я создаю очень простое приложение в JavaFX с помощью одной кнопки. Теперь я хочу обработать его события (например, когда он нажат или когда выпущен), но когда я вижу примеры через Интернет, все они используют анонимные классы (и разные классы для каждого события), что делает код грязным, на мой взгляд , Вот почему я хочу поместить обработчики событий в отдельный класс и добавить их в кнопку.

Проблема в том, что я не знаю, нужно ли мне создавать разные классы для каждого события, что, на мой взгляд, не круто. Итак, я пришел с идеей. В handle()методе класса я проверяю, какой тип события происходит, и обрабатываю его. Это код

Основной класс

public class Main extends Application{

    Button button;
    PruebaEventHandler evhandler;

    public Main() {
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("h0i");

        button = new Button("Púlsame!");
        evhandler = new PruebaEventHandler();
        button.addEventHandler(MouseEvent.ANY, evhandler);
        StackPane layout = new StackPane();
        layout.getChildren().add(button);

        Scene scene = new Scene(layout, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

Класс EventHandler

public class PruebaEventHandler implements EventHandler<MouseEvent>{
    @Override
    public void handle(MouseEvent event){
        if(event.getEventType().equals(MouseEvent.MOUSE_PRESSED)){
            System.out.printf("Te cogí\n");
        }
        if(event.getEventType().equals(MouseEvent.MOUSE_RELEASED)){
            System.out.printf("\nMe ha soltado!!!");
        }
    }
}

Я не знаю, является ли это очень неэффективным или плохим стилем программирования, но это единственное решение, которое я придумала до сих пор. Поэтому я хочу спросить вас, является ли это хорошим решением или, если есть, лучше, пролить свой свет на меня! Заранее спасибо

Автор: Hugo Romacho Источник Размещён: 22.04.2017 12:35

Ответы (1)


-1 плюса

7 Репутация автора

Для этого уже существует решение, которое заключается в создании JavaFX-проекта с FXML-файлом, Controller, а также классом Main. Среды IDE, такие как IntelliJ и NetBeans, поддерживают возможность создания JavaFX-проекта, который автоматически создает эти файлы для вас, но я не уверен, нужно ли вам добавлять плагин, чтобы он работал, что я не помню.

FXML-файл заботится о графическом интерфейсе, например, о размещении кнопки в сцене, и его проще всего использовать с SceneBuilder, который есть у Oracle, и который также может быть интегрирован в вашу IDE.

Если вы используете FXML, вы можете направлять кнопки к методам внутри вашего FXML-документа, поэтому вам не нужно иметь анонимные классы для обработчиков событий. Вместо этого вы заставляете кнопку вызывать специальный метод в вашем классе контроллера.

Вот несколько руководств YouTube, которые демонстрируют основы использования JavaFX с FXML: https://www.youtube.com/watch?v=K7BOH-Ll8_g https://www.youtube.com/watch?v=LMdjhuYSrqg

Автор: codecat Размещён: 22.04.2017 07:26
Вопросы из категории :
32x32