2016-03-31 8 views
0

Ich frage mich, ob es eine Möglichkeit gibt, einzelne JavaFX Button zu verwenden und verschiedene Aktionen auf dieser einzelnen Button abhängig von einer anderen Bedingung (Beispiel: Aktion 1 durchzuführen, wenn geklickt, wenn Option eins war gewählt, Aktion zwei, wenn Option zwei usw.) in sauberer Weise.Mehrere Aktionen mit einer Taste javafx in sauberer Weise

Ich könnte es mit if Aussagen machen, das ist offensichtlich, aber ich würde etwas anständiger und sauberer Weg bevorzugen, das zu tun.

Können Sie mir einige Ideen vorschlagen, um das zu erreichen?

Antwort

0

Verknüpfen Sie den Handler mit der Option. Sie könnten z.B. dies mit einem Map<Option, EventHandler<ActionEvent>> oder einfach durch die Implementierung von Funktionalität in den Optionen selbst.

Im folgenden Beispiel kann der Benutzer zwischen dem Schließen wählen Drucken Hello World an die Konsole oder Schließen der Anwendung in einem ComboBox:

// handler with a given return value for toString() 
public abstract class NamedEventHandler implements EventHandler<ActionEvent> { 

    private final String name; 

    public NamedEventHandler(String name) { 
     this.name = name; 
    } 

    @Override 
    public final String toString() { 
     return name; 
    } 

} 
ComboBox<EventHandler<ActionEvent>> comboBox = new ComboBox<>(FXCollections.observableArrayList(
     new NamedEventHandler("Print \"Hello World\"") { 
      @Override 
      public void handle(ActionEvent event) { 
       System.out.println("Hello World"); 
      } 
     }, new NamedEventHandler("Close") { 
      @Override 
      public void handle(ActionEvent event) { 
       Platform.exit(); 
      } 
     } 
)); 

Button button = new Button("OK"); 
button.setOnAction((ActionEvent event) -> { 
    EventHandler<ActionEvent> handler = comboBox.getValue(); 
    if(handler != null) { 
     handler.handle(event); 
    } 
}); 

eine Map map Verwendung der Event-Handler zu speichern, würden Sie Verwenden Sie

EventHandler<ActionEvent> handler = map.get(comboBox.getValue()); 

anstelle von

EventHandler<ActionEvent> handler = comboBox.getValue(); 
+0

Danke für die Idee, ich werde auch mit diesem versuchen. – Infinito

0

Ich glaube, dass Sie eine Karte von Methoden, so etwas verwenden:

Map<String, Method> actions = new HashMap(); 

Dann nutzen Sie die Methoden bereit aufgerufen werden:

Method method1 = classInstance.getClass().getMethod("myMethodOne") 
Method method2 = classInstance.getClass().getMethod("myMethodTwo") 
... 

und füllen Sie die Karte mit den Methoden und ihren Namen:

actions.put("methodOne", method1); 
actions.put("methodTwo", method2); 

So basierend auf dem Text eingegeben in einem TextField (oder irgendetwas) können Sie die gewünschte Methode aufrufen, so etwas wie:

+0

Das könnte ein Weg sein, ich werde es versuchen! – Infinito