在Java中,从多个JTextFields中清除鼠标单击文本

在Java中,从多个JTextFields中清除鼠标单击文本,java,swing,focus,jtextfield,mouselistener,Java,Swing,Focus,Jtextfield,Mouselistener,我正在两个JTextFields中进行一些错误检查。我将给它们标上jtext1和jtext2 现在,我的GUI如下所示: Enter number 1: [ ] // jtext1 Enter number 2: [ ] // jtext2 Convert [ answer ] 我希望能够检查多个条件并显示错误消息。例如,如果用户未为两个文本字段输入任何内容,并单击“转换”,则应显示以下内容: Enter number 1: [ Nothing enter

我正在两个
JTextField
s中进行一些错误检查。我将给它们标上
jtext1
jtext2

现在,我的GUI如下所示:

Enter number 1: [      ] // jtext1
Enter number 2: [      ] // jtext2
Convert         [ answer ]
我希望能够检查多个条件并显示错误消息。例如,如果用户未为两个文本字段输入任何内容,并单击“转换”,则应显示以下内容:

Enter number 1: [  Nothing entered    ] // jtext1
Enter number 2: [  Nothing entered    ] // jtext2
Convert         [ answer ]
Enter number 1: [  Nothing entered    ] // jtext1
Enter number 2: [        ]              // jtext2
Convert         [ answer ]
而且,如果您使用鼠标单击
jtext1
,我希望它清除消息,以便用户可以输入一个数字。如果他们点击jtext2,同样的事情也会发生

因此,例如,如果我要单击
jtext2
,应该会出现以下内容:

Enter number 1: [  Nothing entered    ] // jtext1
Enter number 2: [  Nothing entered    ] // jtext2
Convert         [ answer ]
Enter number 1: [  Nothing entered    ] // jtext1
Enter number 2: [        ]              // jtext2
Convert         [ answer ]
问题是,使用这段代码:

if(!jtext1.isvalid()) {
    jtext1.setText("Nothing entered");
    jtext1.addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e) {
            jtext1.setText("");
        }
    });
}

if(!jtext2.isvalid()) {
    jtext2.setText("Nothing entered");
    jtext2.addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e) {
            jtext2.setText("");
        }
    });
}

只有
jtext1
可以工作。这对我来说很有意义,因为我不认为我可以继续重写同一个函数,但是我该如何解决这个问题呢?

我认为如果您创建另一个可以显示提示的类会更好,这样无论何时您需要再次执行此操作都会更容易。 下面是一个它如何工作的例子,摘自

您可以使用此选项,然后将JTextField设置为新建HintTextField(“您希望的提示是什么”)。您可以根据自己的需要修改这个类,但这是一个很好的起点


更新:如果您想出于任何原因使用当前代码,请将鼠标侦听器更改为焦点侦听器并覆盖FocusGain。

为了更快获得更好的帮助,请发布(最小完整可验证示例)或(简短、自含、正确示例)。@Alex please where is multiple
jtext2.addMouseListener(new MouseAdapter(){
removed,JTextField理论上cat to返回null、isEmpty或字符序列@mKorbel不确定我是否理解您的问题?我确实有另一个
jtext2.addMouseListener的实例(new MouseAdapter(){
获取另一个依赖于单独故障状态的错误消息。@Alex
jtext2.addMouseListener(new MouseAdapter()
(从多个jtextfields中清除鼠标单击的文本)中的哪一个是您真正在侦听的,因为您面临着可能存在百万的风险
jtext2.addMouseListener(new MouseAdapter())
在运行时添加到一个
JTextField
中:-)感谢您提供的解决方案!只是好奇,如果我已经有了一个JTextField,比如
JTextField text1=new JTextField()
我如何将其转换为
HintTextField
?或者我是否只使用
HintTextField
进行所有操作?一旦用户输入了无效的内容,我就尝试执行
text1=new HintTextField(“错误文本”)
bu它告诉我它不能从
HintTextField
转换到
javax.swing.JTextField
@Alex当你初始化你的文本字段时,你使用JTextField text1=HintTextField(“Message”)。之后,每当你在文本字段中没有任何文本,并且字段没有焦点时,“Message”就会显示出来。