gpt4 book ai didi

java - 将插入符号放置在焦点上的 JTextField 末尾的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 08:27:52 26 4
gpt4 key购买 nike

默认情况下,当 JTextField 获得焦点时,插入符号位于文本的开头。但是,我认为更好的行为是将其放置在末尾,或者选择所有文本,例如http://jsfiddle.net/Marcel/jvJzX/ 。有什么好的方法可以做到这一点?理想情况下,该解决方案将全局应用于应用程序中的所有 JTextField。

默认行为示例(点击选项卡以聚焦字段):

public static void main(String[] args) {
JTextField field = new JTextField("hello world!");
JOptionPane.showMessageDialog(null, field);
}

编辑:澄清一下,如果我不必搜索我的应用程序并更改所有文本字段,那就太好了。

最佳答案

实际行为和要求都没有完整描述:

when a JTextField gains focus the caret is positioned at the beginning of the text

这并不完全正确:当它获得焦点时

  • 单击,插入符号将放置在鼠标位置
  • 其他方式(选项卡式、编程式)将其放置在焦点丢失时的位置。

因此,要求:

the better behavior is to position it at the end, or to select all the text

需要对这些情况进行一些思考,以免损害可用性,至少对于第一批用户来说,如果鼠标手势被否决,可能会感到困惑。第二个是有争议的并且可能依赖于操作系统/LAF。就我个人而言,如果插入符号的位置不在开头,我不会碰它。

从技术上讲,在焦点更改时全局触发组件状态更改的解决方案是向 KeyboardFocusManager 注册 PropertyChangeListener:

PropertyChangeListener pl = new PropertyChangeListener() {

@Override
public void propertyChange(PropertyChangeEvent evt) {
if (!(evt.getNewValue() instanceof JTextField)) return;
JTextField field = (JTextField) evt.getNewValue();
// crude check to not overdo it
int dot = field.getCaretPosition();
if (dot == 0) {
field.selectAll();
}
}
};
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addPropertyChangeListener("permanentFocusOwner", pl);

关于java - 将插入符号放置在焦点上的 JTextField 末尾的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com