我知道如何通过鼠标单击清除 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? Switch...case 我需要那里,因为会有多个 JTextField。 第二个问题 - 这种方法完全不好吗?
最佳答案
Switch...case I need there because there will more than one JTextField. Second question - Is this approach totally bad?
使用不正确设计的开关盒:
- 如果处理是一样的,那么就不需要switch case,直接获取组件并进行处理即可。
因此,使用 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)类,以便您可以自定义处理。
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") );
或者,如果您想了解更多,可以查看 Text Prompt它实现了这个基本功能以及更多功能。
关于java - 仅使用 MouseListener java 当鼠标单击时清除 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36795415/