1

我在我的文本字段上设置了默认文本,当用户关注文本字段时程序如何删除此文本。反之亦然,当用户不关注文本字段时,默认文本会返回。

我正在考虑在 TF 上添加一个动作事件,但这仅在用户在专注于 TF 时点击输入按钮时才有效。线程会工作吗?

4

4 回答 4

3

考虑将 FocusListener 添加到 JTextField。在该focusGained(FocusEvent e)方法中,您可以检查 JTextField 的文本,如果它与预览文本完全匹配,则将其删除。在该focusLost(FocusEvent e)方法中,您检查 JTextField 是否为空,如果是,则重新添加默认文本。

myTextField.addFocusListener(new FocusListener() {
  public void focusGained(FocusEvent e){
    // get text from JTextField
    // if text matches default text, either select all, so user can keep it or change it
    // or delete it --- your choice
  }

  public void foucsLost(FocusEvent e){
    // check if JTextField's text is empty.
    // if so, cal setText(DEFAULT_TEXT) on the field
  }
});
于 2013-10-27T12:42:11.387 回答
0

我认为您想做与 HTML 占位符一样的操作,

 private void txtSearchStandardFocusLost(java.awt.event.FocusEvent evt) {                                            
        // TODO add your handling code here:
        if (txtSearchStandard.getText().equals("")) {
            txtSearchStandard.setText(" Type Here to Search Standard");
            txtSearchStandard.setForeground(Color.GRAY);
        }

    }                                           

    private void txtSearchStandardFocusGained(java.awt.event.FocusEvent evt) {                                              
        // TODO add your handling code here:
        if (txtSearchStandard.getText().equals(" Type Here to Search Standard")) {
            txtSearchStandard.setText("");
        }

        txtSearchStandard.setForeground(Color.BLACK);
    }   

但是,当您尝试在同一个 TEXTFIELD 上添加一些其他事件时,请记住这一点

于 2013-10-28T06:42:03.713 回答
0

您可以在任何 JTextFields 上调用这些函数

public void FocusGainedEmptyBox(JTextField txt)
{
   txt.setText(null);
}

public void FocusLostFillBox(JTextField txt)
{
   if(!txt.getText().equals(""))
   {
     txt.setText("I am Back");
   }
}

在获得焦点时调用 FocusGainedEmptyBox(txtValue),在失去焦点时调用 FocusLostFillBox(txtValue)。

于 2013-10-27T12:47:24.677 回答
0

如果您需要在文本字段上使用 DocumentListener 以了解文本何时更改,则在文本字段中添加/删除文本可能会导致问题。

有关此问题的不同解决方案,请查看Text Prompt

于 2013-10-27T17:25:08.393 回答