2012-10-07 190 views
1

当我点击文本框时,是否有可能清除最近输入的文本?我的意思是,假设这些是textfields。单击文本框并清除文本?

Name: Last Name  First Name  Middle Initial 

然后我单击姓氏,它将被清除,与名字和中间名初始相同。感谢您的阅读,希望您能帮助我。

+2

使用textchange事件 –

+1

什么是textchange事件?我会为此使用FocusListener。 –

+0

如果用户想要在导航到下一个字符后更正其中一个字符,该怎么办?你想让他/她每次都重新开始吗? – user1406062

回答

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(""); 
} 

的情况下,如果删除文本inmediatelly没有什么希望,用selectAll()代替setText("")的建议多次

+3

并且如果用户键入字段?我认为没有一个FocusListener会更好。 –

+0

那么,这取决于user1694994的想法......他说,想要发生点击,而不是焦点......无论如何,这是一个altenative – mishamosher

+0

使用FocusListener,如果当前文本组件没有焦点,则在点击时会发生该行为。 –

6

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

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

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

+1

有一个很好的关于“Tab”的选项卡(十可用性启发式: http://www.useit.com/papers/heuristic/heuristic_list.html) – user1406062

+1

感谢您的帮助 – user1694994

+0

@Hussain:感谢您的评论和链接! –

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

+1

你的用户似乎是受虐狂;-) – kleopatra

+1

@kleopatra你不知道:P – MadProgrammer