2013-05-31 2 views
0

У меня есть небольшое задание и классы домена JobManager:Обновления таблица JFace когда модель вложенное поле изменилось

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»); Как я могу это сделать?

ответ

0

Возможно, кому-то это поможет. Чтобы реализовать такое поведение, просто переопределите equals и hashCode в классе Job и вызовите firePropertyChange («state», null, null) в Job.setState().

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; 
} 
Смежные вопросы