2016-11-23 3 views
3

Im obigen Code definieren wir, was passiert, wenn wir die Taste drücken. Das ist alles gut, aber ich möchte einen neuen ActionListener erstellen und ihn dann zu meiner Schaltfläche hinzufügen. Normalerweise in JButton kann ich nur hinzufügen, Action wie folgt aus:Javafx Hinzufügen von ActionListener zur Schaltfläche

button.addActionListener(someControllerClass.createButtonListener()); 

Im Code oben createButtonListener() gibt Action.

Meine Frage ist: Was ist äquivalent zu JButton addActionListener?

Antwort

1

Ich denke, das ist, wie ich tun sollte. Erstellen der Handler:

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 Schaltfläche Hinzufügen:

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

Warum möchten Sie eine Methode (für Ihr explizit angegebenes Codebeispiel) bereitstellen, die einen neuen EventHandler im Gegensatz zu dem Ansatz in meiner Antwort zurückgibt? – SSchuette

+0

@SSchuette In Ihrer Antwort können Sie nur einen Ereignishandler gleichzeitig haben. Das OP benötigt möglicherweise mehr Aktionen, um gefeuert zu werden, so dass er mehrere Aktionshandler benötigt. – GOXR3PLUS

+0

Ja, volle Antwort @ GoXR3Plus, aber darum gefragt - das beschriebene Szenario schien mit dem einzelnen Handler "ok" zu sein. – SSchuette

3

Wenn Sie z.B. Wiederverwendung eines EventHandler, definieren sie in JavaFX Documentation wie beschrieben wie:

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

Sie können nun fügen Sie Ihre buttonHandler zum onAction Ihrer Taste definiert über:

button.setOnAction(buttonHandler); 

Und unter Berufung aus der Dokumentation die Option Entfernen Bereitstellen der Vollständigkeit halber:

Um einen Ereignishandler zu entfernen, der mit einer Convenience-Methode registriert wurde, übergeben Sie null an den Convenie nce Verfahren zum Beispiel node1.setOnMouseDragged(null).

Resultierende für Sie in:

button.setOnAction(null) 

Die Dokumentation stellt darüber hinaus einige Beispiele, wie Handler für bestimmte Ereignisse hinzuzufügen - es ist ein gutes Buch.

+0

Ty für Ihre Antwort SSchuette. Wenn ich dich richtig verstehe, sagst du, ich sollte eventHandlers anstelle von actionListeners verwenden. Habe ich recht? – MertG

+0

Da Sie anscheinend von Swing stammen (Ihre JButton-Anweisung), müssen Sie die Terminologie Ihrem UI-Framework entsprechend beibehalten. EDIT: Werfen Sie einen Blick auf http://Stackoverflow.com/a/29785487/2061026 – SSchuette

+1

Ja, ich suche nur nach eventHandlers und es ist ein bisschen anders, aber ich löste mein Problem, danke für Ihre Hilfe. – MertG

Verwandte Themen