2012-12-14 8 views
20

Ich habe ein TextField, um einen Suchbegriff einzugeben, und eine Schaltfläche für "Go". Aber wie würde ich es in JavaFX2 so machen, dass das Drücken der Eingabetaste in der TextField eine Aktion ausführen würde?Wie kann ich die Enter-Taste in JavaFX2 drücken?

Thanks :)

+0

Die Javadoc ist eine gute Quelle für solche Fragen: http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextField.html – Puce

Antwort

26

Sie können das onAction-Attribut des TextFields verwenden und an eine Methode in Ihrem Controller binden.

@FXML 
public void onEnter(ActionEvent ae){ 
    System.out.println("test") ; 
} 

Und in Ihrer FXML Datei:

<TextField fx:id="textfield" layoutX="29.0" layoutY="298.0" onAction="#onEnter" prefWidth="121.0" /> 
+1

Ja, die OnAction-Methode scheint der Weg zu sein: http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextField.html#onActionProperty -> +1 Aber Sie müssen kommentieren die Methode onEnter() mit @FXML, wenn sie von FXML "bindet" und ein ActionEvent-Argument, AFAIK, benötigt. – Puce

+0

Und aus dem Code u kann textfield.setOnAction() - Methode –

+0

Beachten Sie, dass ich hinzufügen musste '(ActionEvent actionEvent)' als Parameter auf 'onEnter', bevor es funktionieren würde. – Erhannis

52

Ich gehe davon wollen Sie dies geschehen kann, wenn der Benutzer drückt nur eingeben, während der TextField- Fokus hat. Sie verwenden KeyEvent aus javafx.scene.input und tun so etwas wie dieses ...

textField.setOnKeyPressed(new EventHandler<KeyEvent>() 
    { 
     @Override 
     public void handle(KeyEvent ke) 
     { 
      if (ke.getCode().equals(KeyCode.ENTER)) 
      { 
       doSomething(); 
      } 
     } 
    }); 

Hoffe, das ist hilfreich wollen!

+6

Beachten Sie, dass bei der Verwendung von Java Lambda-Notation der obige Code geschrieben werden kann: 'textArea.setOnKeyPressed ((event) -> { if (event.getCode() == KeyCode.ENTER) { doSomething(); }});' – gbmhunter

+0

ich denke, das ist eine bessere Antwort als die Verwendung von FXML. – SleepyFox89

7

können Sie versuchen, die folgenden:

@FXML 
public void buttonPressed(KeyEvent e) 
{ 
    if(e.getCode().toString().equals("ENTER")) 
    { 
     //do something 
    } 
} 
+8

besser verwenden: 'ke.getCode() == KeyCode.ENTER', weil es eine enum ist – user6133180

+0

Das allein funktioniert nicht, was ist die FXML dafür? – Baxtex

1

Dies funktioniert:

@FXML public TextField txt; 

@FXML 
public void textAction(KeyEvent e){ 

    if(e.getCode().equals(KeyCode.ENTER)) 
     System.out.println(txt.getText()); 
} 

Wenn aus irgendeinem Grund .getCode () funktioniert nicht, stellen Sie sicher, um die Bibliothek zu importieren:

import javafx.scene.input.KeyEvent; 

NICHT

import java.awt.event.KeyEvent; 

Ich habe auf diese gefangen und es war reizend. Ich gebe das nur für alle im selben Boot weiter.

4

einfach mit "Lambda-Ausdruck":

TextField textField = new TextField(); 
textField.setOnAction(e -> { 
    // add your code to be run here 
    System.out.println("textFile"); 
    }); 
0

Auf manchen Tastaturen Sie zusätzliche Tests an den '\ n' setzen haben und '\ r' Zeichen.

if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') { 
     // your action 
    } 
Verwandte Themen