簡體   English   中英

當模型嵌套字段更改時更新jface表

[英]Update jface table when model nested field changed

我有小的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”); 我怎樣才能做到這一點?

也許這對某人會有幫助。 要實現這種行為,只需在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM