2014-09-09 9 views
11

Ich habe seit einiger Zeit gegoogelt und ich fand das grundlegend, einige Webseiten sagen, dass es keine großen Unterschiede gibt. Mit Ausnahme einiger Punkte:JavaFX: Was ist der Unterschied zwischen EventHandler und EventFilter?

  1. EventFilter wird ausgeführt, bevor EventHandler
  2. EventFilter nicht sinnvoll ist, zu event.Consume(); Lassen Sie mich sehen, ob ich es verstanden habe: Können sagen, ich habe:

    Button b= new Button("Test"); b.addEventHandler(.....){...}; b.addEventFilter(......){...};

Sagen wir, sie sind beide mit einem"verbunden"; Dann wird der Code EventFilter als erster ausgeführt !?

sagen lassen, jetzt, ich habe:

Button b= new Button("Test"); 
b.addEventHandler(.....); 
b.addEventFilter(......){ 
    //some code 
    event.consume(); 
}; // First filter 
b.addEventFilter(......){ 
    //some other code 
    event.consume(); 
}; // Second filter 

In diesem Fall boath EventFilter s ausgeführt wird, aber die EventHandler nicht. Recht?

Gibt es noch andere Dinge zu wissen? Gibt es Situationen, in denen ich den einen oder anderen bevorzugen sollte? Soll ich sie manchmal zusammen benutzen, um einige Probleme zu lösen?

Vielen Dank!

Antwort

0

Wenn Sie ein Ereignis registrieren, wie (button.setOnAction (neu Clicker())) hier starten/erste Quelle der Veranstaltung Bühne und Ziel wird Taste sein werden. Die Bühne wird dieses Ereignis an die Szene delegieren, und die Szene delegiert an den Hauptknoten und so weiter. Die Schaltfläche "finally" wird das Ereignis erhalten. Clicker ist hier ein Handler, der dieses Ereignis konsumiert. Wenn wir dieses Ereignis vor der Behandlung verfolgen wollen, kommt "Event Filter" ins Spiel. Hier können wir dieses Ereignis verfolgen. Nach der Verfolgung, sobald wir dieses Ereignis konsumiert haben, wird dies nicht weiter delegiert. Wenn wir nicht konsumieren, wird dies an den direkten/unmittelbaren Kindknoten delegieren. Nach dem Tracking Wenn Sie ein anderes Ereignis auslösen möchten, können wir die Methode fireEvent (...) aufrufen. für mehr Besuch Orakel Dokumentation a link!

1

Wie ich kenne JavaFX EventFilter kann eine oder viele für einen einzelnen Knoten und kann für viele Knoten single sein. EventFilter ermöglicht es Ihnen, ein Ereignis während des Ereignisses zu behandeln Erfassungsphase aber der Ereignishandler behandelt Ereignisse während des Ereignisses sprudelnde Phase.

Also EventFilter wird vor dem EventHandler ausgeführt.

javafx event handler (http://javafxtuts.com/javafx-event-handler/)

JavaFX EventFilter (http://javafxtuts.com/javafx-event-filter/)

java docs

0

Es sollte ein "logischer" Unterschied.
Der Filter sollte verwendet werden, wenn wir aus irgendeinem Grund die Verwaltung des im Code des Handlers geplanten Ereignisses verhindern und seine Weitergabe stoppen möchten.
Wie Sie zu Recht angemerkt haben, bedeutet die Markierung des Ereignisses "verbraucht", dass der Ereignishandler nicht gestartet werden darf. Es die Oracle-Dokumentation (http://docs.oracle.com/javafx/2/events/filters.htm) können wir lesen:

Ereignisfilter sind in der Regel auf einem Zweigknoten des Ereignisses Versandkette verwendet und werden während der Ereignis-Erfassungsphase Ereignisbehandlung genannt. Verwenden Sie einen Filter, um Aktionen wie das Überschreiben einer Ereignisantwort oder das Blockieren eines Ereignisses an seinem Ziel auszuführen.

0

Ein Ereignisfilter ist ein Ereignishandler, der so eingestellt ist, dass er ein Ereignis behandelt, bevor es zum Knoten gelangt. Sie können keinen EventFilter erstellen.

node.addEventFilter(EventType, eventFilter) - Wo evenFilter ein EventHandler-Objekt ist!

Sie einen Blick auf diese nehmen, wo Sie es verwenden können/blockieren bestimmte inhärente Eingangskontrollen „überschreiben“ bereits definiert in Knoten wie TextArea-: How to consume a TAB/Enter KeyPressed on the TextArea, and replace with focustraversal or enter key without using internal API?

Verwandte Themen