JLabel文本改变事件

9

当更改JLabel中的文本时,我如何检索事件?

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


1
更新两个字段时,是否最好一次性更新,无论是哪个事件导致了第一个字段的更改? - Christian Mann
当我点击一个按钮时,我会在jLabel1中放置一个文本,并根据我的选择,在jLabel2中放置另一个文本。 - Giovanni
2个回答

12

从技术上讲,答案是使用PropertyChangeListener并监听“text”属性的更改,类似于以下内容:

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

从技术上来说不是很复杂:重新审视整体设计并绑定到触发标签更改的原始源可能是值得的。


2

在我看来,你无法获取JLabel文本更改时的事件。但是,你可以使用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。


这个答案是错误的(涉及JLabel可用的侦听器部分)。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接