我有一个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());
...
}
每当数量属性在项目上发生变化时,如何让标签更新其文本?
答案 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()。