我有一个 TextField 可以输入搜索词,还有一个“Go”按钮。但是在 JavaFX2 中,我将如何让它在 TextField 中按下 Enter 键来执行操作?
谢谢 :)
我有一个 TextField 可以输入搜索词,还有一个“Go”按钮。但是在 JavaFX2 中,我将如何让它在 TextField 中按下 Enter 键来执行操作?
谢谢 :)
我假设您希望仅当用户在TextField
获得焦点时按 Enter 键时才会发生这种情况。你会想要使用KeyEvent
out of javafx.scene.input
package并做这样的事情:
field.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode().equals(KeyCode.ENTER)) {
doSomething();
}
}
});
使用 lambda:
field.setOnKeyPressed( event -> {
if( event.getCode() == KeyCode.ENTER ) {
doSomething();
}
} );
您可以使用 TextField 的 onAction 属性并将其绑定到控制器中的方法。
@FXML
public void onEnter(ActionEvent ae){
System.out.println("test") ;
}
在您的 FXML 文件中:
<TextField fx:id="textfield" layoutX="29.0" layoutY="298.0" onAction="#onEnter" prefWidth="121.0" />
您可以尝试以下方法:
@FXML
public void buttonPressed(KeyEvent e)
{
if(e.getCode().toString().equals("ENTER"))
{
//do something
}
}
只需使用“lambda 表达式”:
TextField textField = new TextField();
textField.setOnAction(e -> {
// add your code to be run here
System.out.println("textFile");
});
这有效:
@FXML public TextField txt;
@FXML
public void textAction(KeyEvent e){
if(e.getCode().equals(KeyCode.ENTER))
System.out.println(txt.getText());
}
如果由于某种原因 .getCode() 不起作用,请确保导入库:
import javafx.scene.input.KeyEvent;
不是
import java.awt.event.KeyEvent;
我被赶上了这件事,这很烦人。我只是把这个传递给所有在同一条船上的人。
在某些键盘上,您必须对 '\n' 和 '\r' 字符进行额外测试。
if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') {
// your action
}