Java 当自定义对象属性更改时更新JLabel
我有一个Java类,我希望它的一个属性在Swing桌面应用程序中由JLabel显示:Java 当自定义对象属性更改时更新JLabel,java,swing,jlabel,propertychangelistener,propertychangesupport,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.g
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());
...
}
如何使标签在项目的quantity属性更改时更新其文本 通过调用从组件派生的repaint。通过调用从组件派生的repaint。我可能会将ObjectChangeListener添加到Item对象,然后重写它的objectChanged方法以更新JLabel并调用repaint。我可能会将ObjectChangeListener添加到Item对象,然后重写objectChanged方法以更新JLabel并调用repaint。必须使用您已经知道的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类中的事件变得很容易必须使用您已经知道的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类中的事件变得很容易如果可能,我希望避免调用任何东西。是否可以使用自定义事件或类似的东西?如果可能,我希望避免调用任何东西。可以使用自定义事件或类似的东西吗?这正是我想要的。谢谢。这正是我想要的。谢谢