java - 单击外部时如何将文本设置为 JTextField?

标签 java listener jtextfield

当我从组件中单击时,如何将文本设置为 JTextField? 每当我单击它时,它都会清除文本,如下所示:

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

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

最佳答案

我认为你只需要向文本字段添加一个 FocusListener 即可。这里有一个我写的类(class),可以按照你的要求工作。

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;
    }
}

}

关于java - 单击外部时如何将文本设置为 JTextField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44005881/

相关文章:

java - 如何将 JTextField 从 JFrame 传递到另一个 JFrame?

java - Excel Alt+Enter 与换行符\n 相同吗?

javascript - 循环中几个元素的 JS ArrowDown addEventListener(演示)

spring-boot - SpringBootTest - 如何断言上下文加载失败

android - AsyncTask 以及使用 ProgressUpdate 和 Listeners 更新 UI 的问题

java - OSX Java 文本字段中的乱码

java - 如何限制 JTextField 仅接受小于 10 的数字?

java - 如何在 android 中停止 Webview 视频

java - 如何增加Spring WebClient并发请求限制?

java - Spring的JdbcDaoSupport(使用MySQL Connector/J)执行添加FK的sql后失败