更改聚焦的 JTextField 的文本

Change the text of a focused JTextField

在下面的例子中:

JTextField name = new JTextField("Enter Name");
JTextField place = new JTextField("Enter Place of birth");
JTextField a = new JTextField("Enter a");
JTextField b = new JTextField("Enter b");
JTextField c = new JTextField("Enter c");


FocusListener f = new FocusListener() {
  public void focusGained(FocusEvent e) {

  }

  public void focusLost(FocusEvent e) {

  }

name.addfocuslistener(f);
place.addfocuslistener(f);
a.addfocuslistener(f);
b.addfocuslistener(f);
c.addfocuslistener(f);

如何在获得焦点时将 JTextfield 的文本设置为空字符串?

所以像这样:

focusedTextField.settext("");

focusGained() 方法中,系统向您传递了一个 FocusEvent,其中应包含使用 e.getSource() 启动事件的对象。如果转换为我们期望源的类型,JTextField,那么要清除文本,我们只需执行:

 public void focusGained(FocusEvent e) {
          ((JTextField)e.getSource()).setText("");
  }

我还没有测试过,但应该可以。

您需要导出作为 FocusEvent 目标的 swing 元素并将其转换为 JTextField。

在您的 focusGained 方法中,您可以使用:

  public void focusGained(FocusEvent e) {
    JTextField target = (JTextField)e.getSource();
    target.setText("TEXT_TO_SET");
    }

首先看一下 JavaDocs for FocusEvent,它有许多有趣的属性,包括 getSource,所有 EventObject 都有,getComponent returns"Returns the originator of the event."作为Component,非常有用。

利用这些知识,您可以做类似...

FocusListener f = new FocusListener() {
  public void focusGained(FocusEvent e) {
      Component source = e.getComponent();
      if (source instanceof JTextField) {
          ((JTextField)source).setText("");
      }
  }

您还应该查看 How to Write a Focus Listener 了解更多详情

How can i set the text of the JTextfield to an empty string when focus is gained?

我猜您并不想在获得焦点时将文本字段设置为空字符串。用户可以在不输入任何文本的情况下关闭该字段,因此您将永远失去提示。

查看 Text Field Prompt 可重复使用的 class,它将允许您在文本字段中显示提示文本。

class 有几个不同的选项,因此您可以控制何时显示提示。

您甚至可以为文本赋予不同的属性,使其看起来更像是提示而不是实际文本。

你应该在focusGained merhod中设置这个 JTextField tf = (JTextField)e.getSource(); 如果(!tf.isFocusOwner()) tf.setText("");