Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当自定义对象属性更改时更新JLabel_Java_Swing_Jlabel_Propertychangelistener_Propertychangesupport - Fatal编程技术网

Java 当自定义对象属性更改时更新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

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

如何使标签在项目的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类中的事件变得很容易

如果可能,我希望避免调用任何东西。是否可以使用自定义事件或类似的东西?如果可能,我希望避免调用任何东西。可以使用自定义事件或类似的东西吗?这正是我想要的。谢谢。这正是我想要的。谢谢