2

У меня есть класс Java, и я хочу один из его свойств, которое будет отображаться на JLabel в свинг настольного приложения:Update JLabel когда пользовательские свойства объекта изменения

class Item { 
    private String name; 
    private Integer quantity; 

    // getters, setters... 
} 

class Frame { 
    Item item = new Item(); 
    ... 

    JLabel label = new JLabel(); 
    label.setText(item.getQuantity().toString()); 
    ... 
} 

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

ответ

4

Что-то должно будет обновить текст вашей метки (с помощью метода setText, который вы уже знаете). Вероятно, самое простое - дать классу Item огонь PropertyChangeEvent s, когда его свойства будут изменены, и прикрепить прослушиватель к элементу, который обновляет метку.

final JLabel label = new JLabel(); 
label.setText(item.getQuantity().toString()); 
item.addPropertyChangeListener(new PropertyChangeListener(){ 
    @Override 
    public void propertyChange(PropertyChangeEvent event){ 
    if ("quantity".equals(event.getPropertyName)){ 
     //I assume this happens on the EDT, otherwise use SwingUtilities.invoke* 
     label.setText((String)event.getNewValue()); 
    } 
    } 
}); 

PropertyChangeSupport класса позволяет легко управлять слушателями и огнестойкость события в вашем классе Item

+0

Это именно то, что я искал. Благодарю. –

0

Вызывается перерисовка(), которая находится в стороне от компонента.

+0

Если бы это было возможно, я хотел бы, чтобы не вызывать ничего. Можно ли использовать пользовательские события или что-то в этом роде? –

0

Я бы добавил объект ObjectChangeListener к объекту Item, а затем переопределив его метод objectChanged для обновления JLabel и переадресации вызовов().

Смежные вопросы