2

我有一个 Java 类,我希望它的一个属性由 Swing 桌面应用程序中的 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

3 回答 3

4

有些东西必须更新标签的文本(使用setText您已经知道的方法)。可能最简单的事情是让Item类在其属性更改时触发PropertyChangeEvents,并将侦听器附加到更新标签的项目。

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类中的事件变得容易

于 2012-04-19T18:07:51.130 回答
0

通过调用从 Component 继承的 repaint()。

于 2012-04-19T18:01:50.223 回答
0

我可能会向您的 Item 对象添加一个 ObjectChangeListener,然后覆盖它的 objectChanged 方法来更新 JLabel 并调用 repaint()。

于 2012-04-19T18:04:41.110 回答