Java Swing默认焦点在框架上。

4

我正在学习Java和Swing,并尝试为教育目的开发简单的程序。

那么问题来了。

我在框架上使用了GridLayout和默认文本字段。

        accNumberField = new JTextField("0", 10);
    accNumberField.addFocusListener(new FocusListener() {
        int focusCounter = 0;
        @Override
        public void focusGained(FocusEvent arg0) {
            // TODO Auto-generated method stub
            if (focusCounter > 0)
            accNumberField.setText("");
            focusCounter++;
        }

我希望的是当用户第一次点击字段时,默认文本消失。因此,我添加了聚焦监听器,并在focusGained方法中使用了accNumberField.setText(“”)。
但问题在于,在我的框架中默认的第一个字段在创建时立即获得焦点。并且默认文本从一开始就消失了。正如您所见,我使用了计数器。但这不是我想要的。
我希望在创建时没有字段会获得焦点,每个字段都能够在用户单击其中一个字段后获得焦点。
如果有拼写错误,请见谅。英语不是我的母语。

new JTextField("0", 10); 这是一个创建文本框的代码,初始值为“0”,长度为10个字符。除了“1”之外,用户可能在该字段中输入什么?这是一个图形用户界面(GUI)。 - Andrew Thompson
https://dev59.com/CHI-5IYBdhLWcg3wqqXh - Adeel Ansari
任何整数。 GUI 是一个 5x3 的网格布局框架。其中一行包括 <JTextField、带图标的标签和“保存”按钮>。 用户在字段中输入值,单击保存按钮,如果输入正确,则图标从红色变为绿色倾斜。 - user1685095
2个回答

2

你使用focusListener()的原因是什么?为什么不使用如下的mouseListener()呢?

    accNumberField.addMouseListener(new MouseAdapter()
    {
        @Override
        public void mouseReleased(MouseEvent e)
        {
            accNumberField.setText("");
        }
    });

如果你想在第一次点击时清除文本,可以简单地使用一个布尔变量:

    //outside constructor
    private boolean isTextCleared = false;

    //in constructor
    accNumberField.addMouseListener(new MouseAdapter()
    {
        @Override
        public void mouseReleased(MouseEvent e)
        {
            if (!isTextCleared)
            {
                accNumberField.setText("");
                isTextCleared = true;
            }
        }
    });

如果我添加大括号,那么这两行代码 accNumberField.setText(""); focusCounter++;将永远不会被执行)))我再重复一遍,“我希望在创建时没有任何字段会获得焦点…” - user1685095

2

我找到了一个帖子,其中有一个代码示例可以实现您需要的功能,Java JTextField with input hint。具体来说,您需要提供自己的 JTextField 实现,该实现将在专门为此创建的字段中保存“默认文本”。

至于您的第二个问题,您可以将焦点设置到某个 buttonframe 本身。


再次强调,这不是我所期望的功能。感谢您的帮助,但那并不完全是我想要的,也不是我所询问的。当程序开始执行并创建 GUI 时,布局中的第一个字段会获得焦点,然后“提示”或“默认文本”就会消失。我希望它不会消失。更重要的是,我希望在用户单击它们之前,没有任何文本字段能够获得焦点。清楚吗?=) - user1685095
@user1685095:啊,所以这个链接没有回答你的第二个问题。我说得对吗? - Adeel Ansari
我尝试将焦点设置在某个按钮上,但不知何故它没有起作用。我会尝试在框架上实现这个功能。 - user1685095
@user1685095:抱歉我离开了一段时间。但我很高兴它有帮助。 - Adeel Ansari
@user1685095 我曾经遇到过完全相同的问题。谢谢!pack后跟着requestFocus对我很有用。 - Parag Doke
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接