2012-12-14 12 views
20

Mam pole tekstowe, aby wprowadzić wyszukiwane hasło i przycisk "Przejdź". Ale w JavaFX2, jak miałbym to zrobić, więc naciśnięcie klawisza Enter w polu TextField spowoduje wykonanie akcji?Jak mogę odebrać naciśnięty klawisz Enter w JavaFX2?

Dzięki :)

+0

Javadoc jest dobrym źródłem dla takich pytań: http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextField.html – Puce

Odpowiedz

26

Można użyć atrybutu onAction pola TextField i powiązać go z metodą w kontrolerze.

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

A w pliku FXML:

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

Tak, metoda onAction wydaje się być drogą do wykonania: http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextField.html#onActionProperty -> +1 Ale musisz dodać adnotacje metoda onEnter() z @FXML podczas "wiązania" z FXML i musi przyjąć argument ActionEvent, AFAIK. – Puce

+0

A z kodu u można textfield.setOnAction() - metoda –

+0

Zauważ, że musiałem dodać '(ActionEvent actionEvent)' jako parametr na 'onEnter' zanim to zadziała. – Erhannis

52

Jestem zakładając chcesz to się stało, gdy użytkownik naciśnie klawisz Enter tylko wtedy, gdy pole tekstowe ma fokus. Będziemy chcieli użytkowania keyEvent z javafx.scene.input i zrobić coś takiego ...

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

Nadzieja jest to pomocne!

+6

Należy pamiętać, że podczas korzystania z notacji lambda Java powyższy kod można zapisać jako: 'textArea.setOnKeyPressed ((event) -> { if (event.getCode() == KeyCode.ENTER) { doSomething();}} );' – gbmhunter

+0

myślę, że to jest lepszą odpowiedzią niż użycie FXML. – SleepyFox89

7

można spróbować następujących czynności:

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

lepsze użycie: 'ke.getCode() == KeyCode.ENTER' ponieważ jest to enum – user6133180

+0

Samo to nie działa, jaki jest FXML? – Baxtex

1

to działa:

@FXML public TextField txt; 

@FXML 
public void textAction(KeyEvent e){ 

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

Jeśli z jakiegoś powodu .getCode () nie działa, upewnij się importować bibliotekę:

import javafx.scene.input.KeyEvent; 

NIE

import java.awt.event.KeyEvent; 

ja złapany na ten temat i to było irytujące. Przekazuję to wszystko tym wszystkim, którzy są na tej samej łodzi.

4

prostu za pomocą "wyrażenia lambda":

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

na niektórych klawiaturach trzeba umieścić dodatkowe testy do znaków '\ r' na '\ n' i.

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