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

Java 单击外部时如何将文本设置为JTextField?,java,listener,jtextfield,Java,Listener,Jtextfield,当我从组件中单击“关闭”时,如何将文本设置为JTextField? 每当我点击它时,它都会像这样清除文本: // Clears the "Enter text here..." when clicked commandLine.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e){ commandLine.setTe

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

// Clears the "Enter text here..." when clicked
    commandLine.addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e){
            commandLine.setText("");
        }
    });  
但是,当我单击文本字段时,如何重置它?
我尝试了FocusEvent,但它没有按我所希望的那样工作。

我认为您只需要在文本字段中添加一个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;
    }
}

}

您是否试图实现占位符?我不知道这到底意味着什么,我正在尝试编写一个JTextField,其中“在此处输入消息…”已经写入,但当您单击JTextField时,消息将消失。单击“关闭”后,相同的消息将再次出现。好的,这是一个占位符。如果您输入一些文本,示例文本是否应该保留?可能是的副本,保留与否无关紧要,因为我将使用.setText(“输入消息…”);手动,所以不。看起来很酷,有没有办法添加像commandLine.FocusEvent这样的命令行?就像这样,我不需要创建任何不同的类,只需要一个小方法?问题是,我用WindowBuilder(在NetBeans中)创建了GUi,所以除非我转到属性并在那里进行编辑,否则我无法真正编辑该脚本,所以我宁愿使用一些方法。只需在文本字段中添加一个FocusListener并实现FocusGain()和focusLost()如你所愿,就像我一样