2010-10-15 105 views
9

如何在JLabel中更改文本時更改事件?JLabel更改文本事件

我有一個JLabel,當更改裏面的文本時,我必須更新其他字段。

+1

從引起首先更改的任何事件中立即更新兩個字段會更好嗎? – 2010-10-15 23:11:43

+0

我把一個文本我jlabel1點擊一個按鈕,並根據我選擇了我必須把另一個文本我jLabel2 – Giovanni 2010-10-15 23:22:36

回答

2

恕我直言,你不能在JLabels textchange上得到一個事件。但是你可以使用,而不是一個JLabel一個JTextField:

private JTextField textFieldLabel = new JTextField(); 
textFieldLabel.setEditable(false); 
textFieldLabel.setOpaque(true); 
textFieldLabel.setBorder(null); 

textFieldLabel.getDocument().addDocumentListener(new DocumentListener() { 

    public void removeUpdate(DocumentEvent e) { 
     System.out.println("removeUpdate"); 
    } 

    public void insertUpdate(DocumentEvent e) { 
     System.out.println("insertUpdate"); 
    } 

    public void changedUpdate(DocumentEvent e) { 
     System.out.println("changedUpdate"); 
    } 
}); 

注:觸發此事件無論文本如何得到改變;編程方式通過TextField上的「setText()」或者(如果您不是「setEditable(false)」)通過剪貼板剪切/粘貼,或者通過用戶直接在UI上輸入字段。

的線條:

textFieldLabel.setEditable(false); 
textFieldLabel.setOpaque(true); 
textFieldLabel.setBorder(null); 

被用來製造JTextField的看起來像一個JL​​abel的。

+0

這個答案是錯誤的(與可用的JLabel監聽器有關的部分) – kleopatra 2011-05-01 12:27:05

10

techically,答案是使用一個PropertyChangeListener,聽「文本」的變化特性,像

PropertyChangeListener l = new PropertyChangeListener() { 
     public void propertyChanged(PropertyChangeEvent e) { 
      // do stuff here 
     } 
}; 
label.addPropertyChangeListener("text", l); 

沒有那麼技術上:可能是值得重遊整體設計並結合觸發標籤變化的原始來源