JLabel关于改变文本事件

时间:2010-10-15 23:08:58

标签: java events swing jlabel

如何在更改内部文本时在JLabel上检索事件?

我有一个JLabel,当更改内部文本时,我必须更新其他字段。

2 个答案:

答案 0 :(得分:10)

从技术上讲,答案是使用PropertyChangeListener并监听“text”属性的更改,例如

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

技术上不那么:重新访问整体设计并绑定到触发标签更改的原始来源是值得的

答案 1 :(得分:2)

恕我直言,你无法在JLabels textchange上获得一个事件。但是您可以使用JTextField而不是JLabel:

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看起来像JLabel。