javafx mehrere Tasten zur gleichen handler
Ich versuche einen einfachen Taschenrechner mit 20 Tasten und ein handler. In java kann ich verwenden 'if' - Anweisung mit Fall.getSource() in der ActionPerformed zu überprüfen, welche Taste gedrückt wird, aber es funktioniert nicht mit handler in javafx. Ist es möglich in javafx dass alle Tasten hat ein handler? (Ich will nicht mit java 8 Lambdas.)
Letztes mal habe ich versucht mit setId/getId, aber es trotzdem nicht funktioniert (für mich).
public class Calculator extends Application {
public Button b0, b1;
@Override
public void start(Stage primaryStage) {
GridPane grid = new GridPane();
b0 = new Button("0");
b0.setId("0");
b0.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
grid.add(b0, 0, 1);
b0.setOnAction(myHandler);
b1 = new Button("1");
b1.setId("1");
b1.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
grid.add(b1, 0, 0);
b1.setOnAction(myHandler);
Scene scene = new Scene(grid, 365, 300);
scene.getStylesheets().add
(Calculator.class.getResource("calculator.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.show();
}
final EventHandler<ActionEvent> myHandler = new EventHandler<ActionEvent>(){
@Override
public void handle(final ActionEvent event) {
Button x = (Button) event.getSource();
if (x.getId().equals(b0.getId()))
System.out.println("0");
else if(x.getId().equals(b1.getId()))
System.out.println("1");
}
};
public static void main(String[] args) {
launch(args);
}
}
Dein code funktioniert nur, wenn ich es versuchte (obwohl es viel einfachere Möglichkeiten, es zu tun). Es ist in der Regel viel besser ist, um verschiedene Handler für verschiedene Steuerelemente, obwohl; warum wollen Sie es zu tun auf diese Weise?
Oh! Wirklich!!!! Ich wusste nicht möchten, fügen Sie den gesamten code und schreiben einfach hier die Essenz. Das ist lustig. Danke für die Antwort!
Ich dachte, der code ist sauberer, wenn ich einen handler, ich wusste nicht, dass Nachteil.
Für kürzeren code, die Sie verwenden können Lambda-Ausdrücke wie
Oh! Wirklich!!!! Ich wusste nicht möchten, fügen Sie den gesamten code und schreiben einfach hier die Essenz. Das ist lustig. Danke für die Antwort!
Ich dachte, der code ist sauberer, wenn ich einen handler, ich wusste nicht, dass Nachteil.
Für kürzeren code, die Sie verwenden können Lambda-Ausdrücke wie
b0.setOnAction(e -> System.out.println("b0 pressed"))
InformationsquelleAutor toge | 2014-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Getestet habe ich den code und es scheint zu funktionieren nur fine.
Gibt es keinen wirklichen Grund zu testen, die ids der Schaltflächen, obwohl. Wenn Sie wirklich wollen, verwenden Sie die gleichen handler (was ich nicht raten), nur test für die Gleichheit zwischen jeder Taste und die Quelle des Ereignisses:
Aber es ist (fast?) immer noch besser, verwenden Sie einen anderen handler für die einzelnen Maßnahmen. Es hält den code frei von allen
if/else
Konstrukte, die sowohl macht es sauberer und besser in Bezug auf Leistung. Hier, da die buttons fast die gleiche Sache, die Sie verwenden können, eine einzige Umsetzung, sondern gleich mehrere Objekte.Hier ist ein vollständiges Beispiel:
InformationsquelleAutor James_D