9

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

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

4

2 回答 2

12

从技术上讲,答案是使用 PropertyChangeListener 并监听“文本”属性的变化,例如

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

从技术上讲不是这样:可能值得重新访问整体设计并绑定到触发标签更改的原始来源

于 2011-05-01T12:23:30.867 回答
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。

于 2011-05-01T11:25:28.903 回答