4

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

所以这就是问题所在。

我的框架上有网格布局和字段,默认文本

        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++;
        }

我想要的是,当用户第一次单击字段时,默认文本会消失。所以我添加了焦点监听器并使用了 accNumberField.setText(""); 在 focusGained 方法中。

但问题是,对于我框架中的默认第一个字段,在创建框架时获得焦点。默认文本从一开始就消失了。如您所见,我使用了计数器。但这不是我想要的。

我希望在创建时没有字段会获得焦点,并且每个字段都能够从用户单击其中一个时获得焦点。

对不起,如果我拼写错误。英语不是我的母语。

4

2 回答 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;
            }
        }
    });
于 2012-09-20T08:31:26.100 回答
2

找到一个线程,其中包含所需功能的代码示例,Java JTextField with input hint。准确地说,您需要提供自己的实现,JTextField该实现将在字段中保存“默认文本”,专门为此创建。

对于第二个问题,您可以将焦点设置为 somebuttonframe它本身。

于 2012-09-20T08:38:35.717 回答