:JavaFXのテキストフィールド - キーまでにリリースされたのデフォルトの動作をオーバーライドします
private void setTextFieldBehaviour() {
_textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent key) {
switch (key.getCode()) {
case UP:
if (key.isControlDown()) {
... // Do something for Ctrl + UP key
break;
} else {
... // Do something for plain old UP key
_textField.end();
// _textField's cursor will go back
// to the front when the UP key is released!
break;
}
default:
break;
}
}
});
}
しかし、上記のコードの中で述べたように、コメントsetOnKeyPressed
しかオーバーライドしていないので、キーが離されたときのデフォルトの動作がJavaFXのTextFieldのために起動することを意味します。
したがって、これにより、UPキーがリリースされます。
私は、UPのためだけに(以下に示すように)setOnKeyReleased
をオーバーライドすることを考えましたが、これはカーソルがTextFieldの前面にジャンプしてから最後までジャンプするという醜い効果があります。
何かを押す前:
_textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent key) {
switch(key.getCode()) {
case UP:
if(!(key.isControlDown())) {
... // Do something for plain old UP key
_textField.end();
// _textField's cursor will go back
// to the front when the UP key is released
// then jump back to the end again!
break;
}
default:
break;
}
}
});
あるいは視覚的には、これは、それがどのように表示されるかである。//カーソルが文字列
のTextField [oldString |]の最後に置かれ
プレスUP: //カーソルが文字列の前にある
TextField [ oldString]
リリースUP://カーソルが戻って文字列
のTextField [NEWSTRINGのある|]
ので、現在、私は背中に行くためにそれを設定することができていますが、これは周りのジャンプカーソルを伴います。とにかくそれをより良くするには?イベントハンドラを設定し、イベントを消費することによって
:これを達成するために2つの方法を示したものサンプルアプリケーションで
おそらく 'onKeyTyped'-(関数名が間違っているかもしれません)を試すことができますか?そこにあなたのコードを押してください。最後のキーイベント関数を検索する3 – Elltz