当我点击文本字段时,是否有可能清除最近输入的文本?我想是这样的,假设这些是文本字段。
Name: Last Name First Name Middle Initial
然后我会点击姓氏,它将被清除,与First Name和Middle Initial相同。感谢阅读,希望你能帮助我。
答案 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("")