1

是否有可能当我单击文本字段时,它会清除那里输入的最近文本?我的情况是,假设这些是文本字段。

   Name: Last Name     First Name      Middle Initial

然后我会单击姓氏,它将被清除,与名字和中间名首字母相同。感谢阅读,希望你能帮到我。

4

3 回答 3

6

考虑一个 FocusListener,其中所有文本都被选中:

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

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

于 2012-10-07T03:34:51.187 回答
1

我认为气垫船是对的。最好使用 aFocusListener来达到这个目的。

我会编写一个可以处理这个问题的实用程序类,我已经为自动选择做了类似的事情。意味着我不必扩展出现的每个文本组件,也不必因为失去做同样事情的小焦点听众而混乱。

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

于 2012-10-07T03:44:13.657 回答
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("")

于 2012-10-07T03:32:30.703 回答