如何在 Java 中将 actionlistener 添加到文本字段

Posted

技术标签:

【中文标题】如何在 Java 中将 actionlistener 添加到文本字段【英文标题】:How to add actionlistener to textfield in Java 【发布时间】:2014-11-16 05:54:43 【问题描述】:

这就是概念:简单地说,有一个以“名称”为值的文本框,我希望如果我单击文本框中的任意位置,值“名称”将消失。这就是我在代码中所做的:

JTextField t1 = new JTextField("Name", 10);

t1.addActionListener(new ActionListener()
            public void actionPerformed(ActionEvent cl)
                t1.setText(" ");
            
        );

没有语法错误,但是当我运行程序并单击文本框中的某处时,没有任何反应,并且值“名称”仍然存在

任何帮助将不胜感激,谢谢!

【问题讨论】:

这甚至不应该编译。 t1 应该是 final 才能在内部类中访问。 我不小心排除了final,对此感到抱歉。但在我的程序中,它是: final JTextField t1 = new JTextField("Name", 10); 1)ActionListener 在您按下ENTER 键后调用JTextField 2) 在 1.8 中,它可以在没有final 的情况下声明。你想达到什么目标? 【参考方案1】:

您不应该为此目的使用 ActionListener。而不是 FocusListener 应该为你工作,在这里解释:http://www.java2s.com/Code/JavaAPI/javax.swing/JTextFieldaddFocusListenerFocusListenerl.htm

【讨论】:

我试过这个 't1.addFocusListener(new FocusListener() public void focusGained(FocusEvent e) t1.setText(""); public void focusLost(FocusEvent e) );'但是当我运行程序时,值“Name”根本没有出现 尝试使用其他方法如下: public void focusLos(FocusEvent e) t1.setText("Name");并让文本字段不请求关注启动! @RexEndozo but when I run the program, the value "Name" doesn't appear at all,似乎是因为您的JTextField 在开始时获得焦点。【参考方案2】:

不要使用 ActionListener,它没有实现满足您需求的类。您还可以通过以下方式添加 MouseListener:

t1.addMouseListener(new MouseListener()...);

http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseListener.html

【讨论】:

【参考方案3】:

你可以试试这个:

t1.addFocusListener(new FocusListener() 

    @Override
    public void focusGained(FocusEvent e) 
        t1.setText(null); // Empty the text field when it receives focus
    

);

【讨论】:

谢谢!这对我有用,我只是添加了 focusLost 事件以再次为 t1 赋予值“Name”,这很酷。 问题,'@Override' 的目的是什么?我删除了它,程序运行得很好 @Override 注解在 Java 中是可选的,但很有帮助。它定义我们正在使用新方法或覆盖现有方法。您可以阅读 Java 的 Method Overriding 主题以获得清晰的概念。谢谢 @RexEndozo:见Overriding and Hiding Methods 当我输入一个值然后失去焦点时,文本框再次将该值设置为“名称”,这很糟糕。如何使焦点获得 t1.setText(null);只触发一次(程序启动时)?

以上是关于如何在 Java 中将 actionlistener 添加到文本字段的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Java AWT actionListener 为局部变量赋值

如何在 ActionListener 中创建类似 lambda 的模式

如何在使用ActionListener按钮和GUI时向数组列表中添加项目?

线程“主”java.lang.***Error actionListeners 中的异常

Java 和 GUI - 根据 MVC 模式,ActionListener 属于哪里?

java 事件和事件监听ActionListener