2016-11-23 3 views
3
button.setOnAction(new EventHandler<ActionEvent>() { 
    @Override public void handle(ActionEvent e) { 
     label.setText("Accepted"); 
    } 
}); 

В приведенном выше коде мы определяем, что произойдет, когда мы нажмем кнопку. Это все хорошо, но я хочу создать новый ActionListener, а затем добавить его в свою кнопку. Обычно в JButton я могу просто добавить ActionListener так:Javafx добавление ActionListener к кнопке

button.addActionListener(someControllerClass.createButtonListener()); 

В коде выше createButtonListener() возвращает ActionListener.

Мой вопрос: Каков эквивалент JButton addActionListener?

ответ

1

Я думаю, что так я должен делать. Создание обработчика:

public EventHandler<Event> createSolButtonHandler() 
{ 
    btnSolHandler = new EventHandler<Event>() { 

     @Override 
     public void handle(Event event) { 
      System.out.println("Pressed!"); 
      biddingHelperFrame.getBtnSag().setVisible(false); 
     } 
    }; 
    return btnSolHandler; 
} 

Добавление Handler к кнопке:

btnSol.addEventHandler(MouseEvent.MOUSE_CLICKED, biddingHelperFrameController.createSolButtonHandler()); 
+0

Почему вы хотите предоставить метод (для вашего явно указанного примера кода), возвращающий новый EventHandler вопреки подходу в моем ответе? – SSchuette

+0

@SSchuette В вашем ответе вы можете иметь только один обработчик событий за раз. OP может потребоваться больше действий для запуска, поэтому ему нужно несколько обработчиков действий. – GOXR3PLUS

+0

Yep, full ack @ GoXR3Plus, но вот почему спросил - описанный сценарий, казалось, был «хорошо» с единственным обработчиком. – SSchuette

3

Если вы хотите, например, повторно использовать EventHandler, определить его, как описан в JavaFX Documentation как:

EventHandler<ActionEvent> buttonHandler = new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     label.setText("Accepted"); 
     event.consume(); 
    } 
}; 

Теперь вы можете добавить свой определенный buttonHandler к onAction вашей кнопки с помощью:

button.setOnAction(buttonHandler); 

И ссылаясь из документации предоставления возможности удалить для полноты:

Чтобы удалить обработчик событий, зарегистрированный методом удобства, перейдите в null Метод сть, например, node1.setOnMouseDragged(null).

Результирующая для вас в:

button.setOnAction(null) 

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

+0

Ty свой ответ SSchuette. Если я правильно вас понимаю, вы говорите, что я должен использовать eventHandlers вместо actionListeners. Я прав? – MertG

+0

Как вы, кажется, пришли из Swing (ваше заявление JButton), вы должны сохранить терминологию в соответствии с вашим интерфейсом пользовательского интерфейса. EDIT: взгляните на http://stackoverflow.com/a/29785487/2061026 – SSchuette

+1

Да, я просто ищу eventHandlers и немного по-другому, но я решил свою проблему благодаря вашей помощи. – MertG

Смежные вопросы