[英]Clear JTextField when mouse click using only MouseListener java
我知道如何通过单击鼠标清除JTextField:
JLabel jlab;
ButtonDemo() {
JFrame jfrm = new JFrame("A button example");
jfrm.setLayout(new FlowLayout());
jfrm.setSize(500, 200);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfrm.setVisible(true);
JTextField jtf=new JTextField("enter text here");
jtf.setName("jtf1");
jfrm.add(jtf);
jtf.addActionListener(this);
jtf.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e){
jtf.setText("");
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ButtonDemo();
}
}
);
}
}
但是我必须使用MouseListener:
...
jtf.addMouseListener(new MListener());
...
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MListener implements MouseListener{
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked " + e.paramString()+" e.getComponent().getName() -> "+e.getComponent().getName());
}
@Override
public void mousePressed(MouseEvent e) {
// switch(e.getComponent().getName())){
// case "jtf1": Here I need access to ButtonDemo jtf1 element ;
// }
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
在JFrame的ButtonDemo中,如何访问JTextField? 切换...我需要在那里的情况 ,因为这里将有多个JTextField。 第二个问题-这种方法完全不好吗?
切换...我需要在那里的情况,因为这里将有多个JTextField。 第二个问题-这种方法完全不好吗?
在不正确的设计中使用开关盒:
因此,使用FocusListener方法,基本代码将是:
FocusListener fl = new FocusAdapter()
{
@Override
public void focusGained(FocusEvent e)
{
JTextField component = (JTextField)e.getSource();
component.setText("");
}
};
...
textField1.add( fl );
textField2.add( fl );
...
问题在于,每次文本字段获得焦点时,都会清除该文本。 您可能只想在显示默认提示“在此处输入文本”时清除文本,这导致第二种方法
因此,在这种情况下,您将创建一个包含参数的通用类,以便可以自定义处理。
public class ClearTextPrompt extends FocusAdapter
{
private String prompt;
public ClearTextPrompt(String prompt)
{
this.prompt = prompt;
}
@Override
public void focusGained(FocusEvent e)
{
JTextField textField = (JTextField)e.getSource();
if (prompt.equals(textField.getText())
textField.setText("");
}
}
然后,您将使用类似的类:
textField1.addFocusListener( new ClearTextPrompt("Enter First Name") );
textField2.addFocusListener( new ClearTextPrompt("Enter Last Name") );
或者,如果您想花哨的话,可以查看实现此基本功能等的文本提示 。
您可以通过在创建每个JTextField时为其设置名称来做到这一点,如下所示:
JTextField textField = new JTextField();
textfield.setName("text1");
// Later on the event controller
if (((JTextField) event.getSource().equals("text1")) {
// Do any stuff here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.