0

我有小的 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"); 我怎样才能做到这一点?

4

1 回答 1

1

也许这会对某人有所帮助。要实现这种行为,只需覆盖 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;
}
于 2013-09-18T16:14:44.977 回答