2017-05-16 27 views
0

當我從組件中單擊時,如何將文本設置爲JTextField? 每當我點擊它,它會清除這樣的文字:如何在單擊外部時將TextText設置爲JTextField?

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

但是,當我點擊關閉文本框,我怎麼能恢復呢? 我試過FocusEvent,但沒有按照我的要求工作。

+0

你想實現一個佔位符? – Ollaw

+0

我不知道這意味着什麼,我正試圖讓JTextField在這裏寫入「輸入消息......」,但是當您單擊JTextField時,消息將消失。點擊後,同樣的消息將再次出現在那裏。 – Timppa

+0

好的,這是一個佔位符。如果您輸入一些文字,示例文字應該保留嗎? – Ollaw

回答

1

我想你只需要將FocusListener添加到textField。這裏有一門我寫的課程,可以按你的意願工作。

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

}

+0

看起來很酷,有沒有辦法像commandLine.FocusEvent一樣添加?像我不需要創建任何不同的類,只是一個小方法? – Timppa

+0

問題是我用WindowBuilder創建了我的GUi(在NetBeans中),所以我不能真正編輯該腳本,除非我去屬性並在那裏編輯,所以我寧願使用一些方法。 – Timppa

+0

只需將FocusListener添加到您的textField並按需要實現focusGained()和focusLost(),就像我一樣 – Ollaw

相關問題