Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模型嵌套字段更改时更新jface表_Java_Eclipse_Data Binding_Jface_Observable - Fatal编程技术网

Java 模型嵌套字段更改时更新jface表

Java 模型嵌套字段更改时更新jface表,java,eclipse,data-binding,jface,observable,Java,Eclipse,Data Binding,Jface,Observable,我有小型作业和作业管理器域类: 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() {retur

我有小型作业和作业管理器域类:

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);
    }
}
这个很好用。 将作业添加到作业管理器-jobManager.add(作业)时,新行将显示在表视图中。 当我从作业管理器-jobManager.remove(作业)中删除作业时,相应的行将从表视图中删除

但我还希望在作业状态从“state1”更改为“state2”时更新表视图—job.setState(“state2”);
我该怎么做呢?

也许这会对某人有所帮助。 要实现这样的行为,只需重写Job类中的equals和hashCode并调用 Job.setState()中的firePropertyChange(“state”,null,null)

... // TableViewer tableViewer;
... // JobManager jobManager;
IObservableList jobs = BeanProperties.list(JobManager.class, "jobs").observe(jobManager);
tableViewer.setContentProvider(new ObservableListContentProvider());
... // set label provider etc
tableViewer.setInput(jobs);
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;
}