JLabel об изменении текста события - PullRequest
9 голосов
/ 16 октября 2010

Как я могу получить событие на JLabel при изменении текста внутри ??

У меня есть JLabel, и когда я изменяю текст внутри, мне нужно обновить другое поле.

Ответы [ 2 ]

10 голосов
/ 01 мая 2011

технически, ответ заключается в том, чтобы использовать PropertyChangeListener и прослушивать изменения свойства "text", что-то вроде

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

не так технически: может стоить пересмотреть общий дизайн и связатьк первоисточнику, вызвавшему изменение метки

2 голосов
/ 01 мая 2011

ИМХО вы не можете получить событие по обмену текстами JLabels. Но вы можете использовать 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");
    }
});

Примечание: это событие вызывается независимо от того, как изменяется текст; программно через "setText ()" в TextField или (если вы не "setEditable (false)") через вырезать / вставить буфер обмена, или пользователем, вводящим непосредственно в поле в пользовательском интерфейсе.

Строки:

textFieldLabel.setEditable(false);
textFieldLabel.setOpaque(true);
textFieldLabel.setBorder(null);

используются для того, чтобы JTextField выглядел как JLabel.

...