2014-09-07 3 views
2

Когда у меня есть объект o, и я хочу добавить к нему событие, скажем, я хочу, чтобы он менял свой цвет при нажатии (скажем, это объект Rectangle). В чем разница между: o.setNonMouseClicked(){ ... } иJavaFX: разница между методами setOnMouseClicked() и addEventHandler()?

o.addEventHandler(Action.EventAction, new EventHandler<ActionEvent>(){ ... }) 

Как я могу сделать правильный ВЫБИРАЕМ?

ответ

3

Ну, это зависит от ситуации.

«setOnMouseClicked» добавит к вашему объекту новый EventHandler. Но он также заменит любой eventHandler, ранее добавленный с помощью этого метода! Поэтому, если вы планируете изменить во время выполнения способ реагировать на щелчок мыши, это правильный метод.

Теперь, если вы просто хотите добавить еще один eventHandler (или несколько), вы должны использовать метод addEventHander. Поэтому вы добавите своих обработчиков с одной стороны. И вы добавите eventHandler через «setOnMouseClicked», если он был добавлен ранее.

Также будьте осторожны с добавлением eventHandler или слушателя, потому что они могут привести к серьезным утечкам памяти, поэтому обязательно удалите их, когда это необходимо.

+0

Возможно ли, что некоторые объекты (например, 'BorderPane') не поддерживают метод .addEventHandler();'? – bogALT

+0

«addEventHandler» и другие реализованы в классе «Узел». Поэтому, если ваш объект расширяет Node (это относится к BorderPane и множеству объектов), у вас будет доступ к этому методу. В любом случае, если у вас есть «setOnXXX», у вас будет «addEventHandler». Для получения дополнительной информации посетите http://docs.oracle.com/javafx/2/events/jfxpub-events.htm. – Maxoudela

+0

Я проверю. Спасибо! – bogALT

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