【问题标题】:Change the text of a focused JTextField更改焦点 JTextField 的文本
【发布时间】:2016-05-29 01:44:31
【问题描述】:

在下面的例子中:

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

【问题讨论】:

  • How can i set the text of the JTextfield to an empty string when focus is gained? - 您假设当文本字段获得焦点时用户将始终输入文本。如果用户从一个字段切换到另一个字段怎么办?您将丢失原始文本,然后所有文本字段将不包含任何内容,因此用户将不知道文本字段的用途。当用户没有在文本字段中输入任何文本并且焦点丢失时,您确实需要重新显示提示的能力。

标签: java swing jtextfield


【解决方案1】:

首先看一下JavaDocs for FocusEvent,它有许多有趣的属性,包括getSource,所有EventObject都有,getComponent返回“返回事件的发起者." 作为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 了解更多详情

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

      focusGained() 方法中,您将获得一个FocusEvent,它应该包含使用e.getSource() 启动事件的对象。如果转换为我们期望源为JTextField 的类型,那么我们只需执行以下操作即可:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          你应该在 focusGained merhod 中设置它 JTextField tf = (JTextField)e.getSource(); if(!tf.isFocusOwner()) tf.setText("");

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-12-25
            • 2016-05-13
            • 1970-01-01
            • 1970-01-01
            • 2018-09-16
            • 2010-11-26
            • 2020-09-26
            • 2012-09-14
            相关资源
            最近更新 更多