2

Java クラスがあり、そのプロパティの 1 つを 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クラスPropertyChangeEventのプロパティが変更されたときに s を発生させ、ラベルを更新するアイテムにリスナーをアタッチすることです。

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

おそらく、ObjectChangeListener を Item オブジェクトに追加し、その objectChanged メソッドをオーバーライドして JLabel を更新し、repaint() を呼び出します。

于 2012-04-19T18:04:41.110 に答える
0

Component から継承された repaint() を呼び出します。

于 2012-04-19T18:01:50.223 に答える