单击文本字段并清除文本?

时间:2012-10-07 03:22:55

标签: java swing jtextfield

当我点击文本字段时,是否有可能清除最近输入的文本?我想是这样的,假设这些是文本字段。

   Name: Last Name     First Name      Middle Initial

然后我会点击姓氏,它将被清除,与First Name和Middle Initial相同。感谢阅读,希望你能帮助我。

3 个答案:

答案 0 :(得分:6)

考虑一个FocusListener,其中选择了所有文本:

myTextField.addFocusListener(new FocusAdapter() {
  public void focusGained(FocusEvent fEvt) {
    JTextField tField = (JTextField)fEvt.getSource();
    tField.selectAll();
  }
});

通过选择所有文本,您可以选择键入并删除当前文本并将其替换为新文本,或使用鼠标或箭头键保留当前文本并可能更改它。

答案 1 :(得分:1)

我认为气垫船是对的。最好为此目的使用FocusListener

我会编写一个可以解决这个问题的实用程序类,我已经为自动选择做了类似的事情。意味着我不必扩展所有出现的文本组件,也不必为丢失那些做同样事情的小焦点听众而烦恼。

public class AutoClearOnFocusManager extends FocusAdapter {

    private static final AutoClearOnFocusManager SHARED_INSTANCE = new AutoClearOnFocusManager();

    private AutoClearOnFocusManager() {

    }

    public static AutoClearOnFocusManager getInstance() {
        return SHARED_INSTANCE;
    }

    @Override
    public void focusGained(FocusEvent e) {
        Component component = e.getComponent();
        if (component instanceof JTextComponent) {
            ((JTextComponent)component).setText(null);
        }
    }

    public static void install(JTextComponent comp) {
        comp.addFocusListener(getInstance());
    }

    public static void uninstall(JTextComponent comp) {
        comp.removeFocusListener(getInstance());
    }        
}

然后你只需要使用

JTextField textField = new JTextField("Some text");
AutoClearOnFocusManager.install(textField);

如果您只想提供“提示”(提示用户的字段内的文字),您还可以查看Prompt API

答案 2 :(得分:0)

为什么不使用mouseClicked事件?

所以,你可以拥有像

这样的东西
jTextFieldMyText.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        jTextFieldMyTextMouseClicked(evt);
    }
});

private void jTextFieldMyTextMouseClicked(java.awt.event.MouseEvent evt) {
    jTextFieldMyText.setText("");
}

在焦点的情况下

jTextFieldMyText.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(java.awt.event.FocusEvent evt) {
        jTextFieldMyTextFocusGained(evt);
    }
});

private void jTextFieldMyTextFocusGained(java.awt.event.MouseEvent evt) {
    jTextFieldMyText.setText("");
}

如果删除中间的文字不符合要求,请多次使用selectAll()代替setText("")