自定义对象属性更改时更新JLabel

时间:2012-04-19 17:57:14

标签: java swing jlabel propertychangelistener propertychangesupport

我有一个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());
    ...
}

每当数量属性在项目上发生变化时,如何让标签更新其文本?

3 个答案:

答案 0 :(得分:4)

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

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班级中的事件

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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