2010-10-15 111 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); 

没有那么技术上:可能是值得重游整体设计并结合触发标签变化的原始来源