(在stackoverflow上搜索,我已经看到针对Javascript而不是针对JavaFX的问题)
我有一个TextArea,它实际上是类似文字处理器的应用程序中的主要文本编辑器(即,我希望用户花费大量时间在此TextArea中工作)。当用户切换到TextArea时,我希望将光标放置在TextArea的末尾,以便用户可以从上次键入的末尾继续进行编辑。
我已经使用ChangeListener(下面的代码)实现了它,它具有所需的行为。但是,由于每次获得焦点时光标都位于TextArea的末尾,所以如果我要切换应用程序然后再切换回来,则光标会移动。例如,如果用户在TextArea中间的某个地方键入句子,切换到阅读电子邮件,然后切换回以发现其光标已移动,这将带来不便。
是否有一个焦点遍历策略可以执行此操作或以其他方式实现此目标,以便仅当用户将其切换到TextArea时才将光标移到末尾?在我看来,这将是通常希望的行为:每当将TabA选中时,总是将光标显示在TextArea的末尾,否则光标将保持不动。
TextArea passageTextArea;
passageTextArea.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue)
{
if (newValue.booleanValue()) {
passageTextArea.positionCaret(passageTextArea.getText().length());
}
}
});
您可以添加一个EventHandler
用于KeyEvent
其移动插入符文的结尾,当你按下Tab
键:
EventHandler<KeyEvent> tabListener = evt -> {
if (evt.getCode() == KeyCode.TAB && !evt.isShiftDown()) {
evt.consume();
passageTextArea.requestFocus();
passageTextArea.end();
}
};
node.addEventHandler(KeyEvent.ANY, tabListener);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句