検索語を入力するためのTextFieldと、「実行」用のボタンがあります。しかし、JavaFX2では、TextFieldのEnterキーを押すとアクションが実行されるようにするにはどうすればよいですか?
ありがとう :)
検索語を入力するためのTextFieldと、「実行」用のボタンがあります。しかし、JavaFX2では、TextFieldのEnterキーを押すとアクションが実行されるようにするにはどうすればよいですか?
ありがとう :)
TextField
これは、ユーザーがフォーカスを持っているときにのみEnterキーを押したときに発生することを想定しています。パッケージから使用KeyEvent
して、次のjavafx.scene.input
ようなことを行う必要があります。
field.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode().equals(KeyCode.ENTER)) {
doSomething();
}
}
});
ラムダの使用:
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
}
}
単に「ラムダ式」を使用する:
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
}