我知道如何通过鼠标单击清除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) {
}
}
如何获取JTextField的访问权限,是否位于JFrame上的ButtonDemo中? 切换...案例我需要那里,因为会有多个JTextField。 第二个问题 - 这种方法完全不好吗?
答案 0 :(得分:1)
Switch ... case我需要那里因为有多个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") );
或者,如果您想获得幻想,可以查看实现此基本功能的Text Prompt等。
答案 1 :(得分:0)
您可以在创建时为每个JTextField设置名称,如下所示:
JTextField textField = new JTextField();
textfield.setName("text1");
// Later on the event controller
if (((JTextField) event.getSource().equals("text1")) {
// Do any stuff here
}