小さな Job および JobManager ドメイン クラスがあります。
public class Job extends ModelObject {
private String name;
private String state;
public State getState() {return state;}
public void setState(final State state) {this.state = state;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
public class JobManager extends ModelObject {
private List<Job> jobs = new ArrayList<Job>();
public List<Job> getJobs() {
return jobs;
}
public void addJob(Job job) {
jobs.add(job);
firePropertyChange("jobs", null, null);
}
public void removeJob(Job job) {
jobs.remove(job);
firePropertyChange("jobs", null, null);
}
}
次に、JFace データバインディングを使用して TableViewer を更新します。
... // TableViewer tableViewer;
... // JobManager jobManager;
IObservableList jobs = BeanProperties.list(JobManager.class, "jobs").observe(jobManager);
tableViewer.setContentProvider(new ObservableListContentProvider());
... // set label provider etc
tableViewer.setInput(jobs);
これはうまくいきます。ジョブをジョブ マネージャーに追加すると、jobManager.add(job) という新しい行がテーブル ビューに表示されます。ジョブ マネージャーからジョブを削除すると、jobManager.remove(job) 対応する行がテーブル ビューから削除されます。
しかし、ジョブの状態が「state1」から「state2」に変わったときにテーブルビューを更新したい - job.setState("state2"); どうやってやるの?