单击外部时如何将 setText 设置为 JTextField?
How to setText to JTextField when clicking outside of it?
当我从组件上单击关闭时,如何将文本设置为 JTextField?
每当我点击它时,它都会像这样清除文本:
// Clears the "Enter text here..." when clicked
commandLine.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
commandLine.setText("");
}
});
但是,当我单击关闭文本字段时,如何重置它?
我尝试了 FocusEvent,但它没有按我想要的那样工作。
我认为您只需要将 FocusListener 添加到 textField。这里有一个 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;
}
}
}
当我从组件上单击关闭时,如何将文本设置为 JTextField? 每当我点击它时,它都会像这样清除文本:
// Clears the "Enter text here..." when clicked
commandLine.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
commandLine.setText("");
}
});
但是,当我单击关闭文本字段时,如何重置它? 我尝试了 FocusEvent,但它没有按我想要的那样工作。
我认为您只需要将 FocusListener 添加到 textField。这里有一个 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;
}
}
}