我有小型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(作业)时,新行显示在表视图中。 当我从作业管理器中删除作业 - jobManager.remove(作业)时,相应的行将从表视图中删除。
但是当工作状态从例如“state1”改变为“state2” - job.setState(“state2”)时,我也想要更新表视图; 我怎么能这样做?
答案 0 :(得分:0)
也许这对某人有帮助。 要实现这样的行为,只需在Job类中重写equals和hashCode并调用 Job.setState()中的firePropertyChange(“state”,null,null)。
public void setState(final State state) {
this.state = state;
firePropertyChange("state", null, null);
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Job))
return false;
final Job other = (Job) o;
return name.equals(other.name)
&& state == other.state;
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + state.hashCode();
return result;
}