【问题标题】:How to setText to JTextField when clicking outside of it?在外部单击时如何将文本设置为 JTextField?
【发布时间】:2017-10-15 19:06:41
【问题描述】:

当我从组件中单击关闭时,如何将文本设置为 JTextField? 每当我点击它时,它都会像这样清除文本:

// Clears the "Enter text here..." when clicked
    commandLine.addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e){
            commandLine.setText("");
        }
    });  

但是,当我单击文本字段时,如何重置它? 我尝试了 FocusEvent,但它没有按我的意愿工作。

【问题讨论】:

  • 您是否尝试实现占位符?
  • 我不知道这到底是什么意思,我正在尝试有一个 JTextField,其中“在此处输入消息...”已经写好了,但是当您单击 JTextField 时,该消息将消失.单击关闭后,相同的消息将再次出现。
  • 好的,这是一个占位符。如果输入一些文本,示例文本是否应该保留?
  • 留不留都无所谓,因为我会用 .setText("Enter a message...");手动所以没有。

标签: java listener jtextfield


【解决方案1】:

我认为您只需要在 textField 中添加一个 FocusListener。这里有一个我写的类,可以按你的意愿工作。

class CustomPlaceholderTextField extends JTextField implements FocusListener {

private static final long serialVersionUID = 1L;
private boolean changedText = false;
private final String placeholder;


public CustomPlaceholderTextField(String placeholder){
    super();
    this.placeholder = Objects.requireNonNull(placeholder);
    this.addFocusListener(this);
    super.setText(placeholder);

}

@Override
public String getText() {
    if (this.changedText) {
        return super.getText();
    } else {
        return "";
    }
}

@Override
public void setText(String t) {
    if (t == null || t.isEmpty()) {
        super.setText(this.placeholder);
        this.changedText = false;
    } else {
        super.setText(t);
        this.changedText = true;
    }
}

@Override
public void focusGained(FocusEvent e) {
    if (!this.changedText) {
        super.setText("");
        this.changedText = true;
    }
}

@Override
public void focusLost(FocusEvent e) {
    if (this.getText().isEmpty()) {
        super.setText(this.placeholder);
        this.changedText = false;
    } else {
        this.changedText = true;
    }
}

}

【讨论】:

  • 看起来很酷,有没有办法像 commandLine.FocusEvent 一样添加?像这样我不需要创建任何不同的类,只需要一个小方法?
  • 问题是我用 WindowBuilder(在 NetBeans 中)创建了我的 GUI,所以我不能真正编辑那个脚本,除非我去属性并在那里编辑,所以我宁愿使用一些方法.
  • 只需将 FocusListener 添加到您的 textField 并根据需要实现 focusGained() 和 focusLost(),就像我做的那样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 2013-04-12
  • 2015-10-06
  • 2011-07-09
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
相关资源
最近更新 更多