java - JFormattedTextField 插入符号在焦点上的位置

标签 java swing focus caret jformattedtextfield

我在我的程序中使用了一些 JFormattedTextFields。出于某种原因,当单击文本字段后文本字段获得焦点时,插入符号位置总是跳到左侧(位置 0)。我希望插入符最终出现在用户点击的位置。因此,如果我在两位数之间单击,则插入符号应位于这两位数之间。

所以我实现了一个 FocusListener,它将获取点击位置并在那里设置插入符号位置。

FocusListener focusListener = new FocusListener(){


    public void focusGained(FocusEvent evt) {

        JFormettedTextField jftf = (JFormattedTextField) evt.getSource();

        //This is where the caret needs to be.
        int dot = jftf.getCaret().getDot(); 

        SwingUtilities.invokeLater( new Runnable() {

        public void run() {
'the textField that has focus'.setCaretPosition('Some how get the evt or dot');              
              }
           });
        }

    public void focusLost (FocusEvent evt) {}

    });

我已经尝试了很多方法来让他工作。我试过使用 final 关键字,它有效,但仅适用于单个文本字段。

我在焦点监听器中使用了 set/get 方法来分配当前对象,但不确定如何使其“安全”(例如,它们是否需要同步?)。

也许我遗漏了什么?

最佳答案

您需要使用 MouseListener:

MouseListener ml = new MouseAdapter()
{
    public void mousePressed(final MouseEvent e)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                JTextField tf = (JTextField)e.getSource();
                int offset = tf.viewToModel(e.getPoint());
                tf.setCaretPosition(offset);
            }
        });
    }
};

formattedTextField.addMouseListener(ml);

关于java - JFormattedTextField 插入符号在焦点上的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2201873/

相关文章:

java - 将用户 API 与 Google Cloud Endpoint 结合使用

java - 使用 JLabel 和 ArrayList 中的 java 变量的新行

java - 在窗口中请求焦点

css - 更改聚焦选择框选项的背景颜色不起作用

macos - 如何更改 OSX 上 NSTextField 焦点的效果

java - for 循环可以处理随机数吗?

java - While 循环中递减运算符的问题

java - 如何让 Firebase 与 Java 后端一起工作

java - jtable 来自 sql 数据库,带有搜索/比较查询

java - 如何在 JFrame 打开时附加进度条?