1

いくつかのデータを含むプログラムがあるとします。{1, 5, 10, 3} などの整数値。プログラムには、データを表示する GUI があります。各整数は文字列に変換され、ラベルとして表示されます。プログラムには、データを変更できる部分がいくつかあります。たとえば、クリックすると値が増加するボタンです。値が変更されるたびに、対応するラベルを更新して新しい値を表示する必要があります。

おそらくより一般的なシナリオ: データの変更とデータの表示の両方を行うコントロール (スライダー バーなど) があるとします。スライダーを動かすたびにデータを変更し、ラベル (または多くの異なるラベル) に表示する必要があります。ただし、データを変更する方法は他にもあり、その場合はスライダー バーを移動する必要があります。

Java Swing の場合、ラベルの更新を忘れないようにこれを自動的に行うための現在のベスト プラクティスは何ですか?

Objective C Cocoa についても同じ質問です。

4

4 に答える 4

6

Swing で最も一般的なアプローチは、 PropertyChangeListenersを使用することだと思います。

于 2012-06-14T15:58:36.650 に答える
6

まず、オブザーバーのデザイン パターンを見ていきます。

データの変化を観察し、それに応じて UI を更新できます。言語ごとに実装方法が異なります。

于 2012-06-14T15:53:46.267 に答える
1

この問題は、SwingUIウィジェットのいずれかで解決されます。それらはすべてビュー側とモデル側を持っています(たとえば、aJTableはテーブルのビュー側であり、TableModelはモデル側です)。

データに変更を加え、UIが更新されていることを確認する場合は、モデル側で変更を行い、残りはSwingが処理します。同じアプローチを取ることができます。ビューを裏付けるモデルを用意し、すべての変更がモデルで行われることを確認します。次に、ビュー要素はリスナーをそのモデルに登録し、必要なときにいつでもリスナーを更新する必要があります(基本的に、tjg184によって提案されたオブザーバーパターン)

于 2012-06-14T18:46:59.913 に答える
0

Objective cにはデリゲートパターンがあります

VariableChanger.h

@protocol VariableChangedProtocol

-(void) variableDidChange;

@end

@interface VariableChangerClass : NSObject
{
    id<VariableChangedProtocol> delegate;
    int exampleVariable;
}

@property int exampleVariable;

-(id) initWithDelegate:(id<VariableChangedProtocol>) target;

@end

VariableChanger.m

@implementation
@synthesize exampleVariable;

-(id) initWithDelegate:(id<VariableChangedProtocol>) target
{
    self = [super init];
    if (self)
    {
        delegate = target;
    }
}

-(void) setExampleVariable:(int) newValue
{
    if(newValue != exampleVariable)
    exampleVariable = newValue;
    [delegate variableDidChange];
}

@end

VariableChangedListener.m

@implementation VariableChangedListener

-(id) init
{
    self = [super init];
    if (self)
    {
         VariableChangerClass *v = [[VariableChangerClass alloc] initWithDelegate:self];
    }
    return self;
 }

-(void) variableDidChange
{
    NSLog(@"The variable changed");
}

@end
于 2012-06-14T16:06:23.797 に答える