当更改JLabel中的文本时,我如何检索事件?
我有一个JLabel,当更改其中的文本时,我必须更新其他字段。
从技术上讲,答案是使用PropertyChangeListener并监听“text”属性的更改,类似于以下内容:
PropertyChangeListener l = new PropertyChangeListener() {
public void propertyChanged(PropertyChangeEvent e) {
// do stuff here
}
};
label.addPropertyChangeListener("text", l);
从技术上来说不是很复杂:重新审视整体设计并绑定到触发标签更改的原始源可能是值得的。
在我看来,你无法获取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。