Слушане за промени в WritableList

Клас на модела на данни

Създаване на IObservableList

  1. IObservableList observableList = нов WritableList();
  2. Добавете метод за добавяне на данни към observableList
  3. Метод за връщане на observableList

Клас за преглед на таблици

  1. Задайте доставчик на съдържание на ObservableListContentProvider

GUI клас

  1. Viewer setInput за получаване на ObservableList от класа на модела на данни

Изглежда всичко работи както желаете, програмата за преглед на таблици се актуализира с промените в ObservableList.

Но проблемът, който имам, е как да актуализирам бутоните си в GUI. Имам няколко бутона, които активират и деактивират според броя на обектите в ObservableList в модела на данни. За да стартирам тази логика, трябва да знам кога има промяна в списъка.

Опитах се да внедря IListChangeListener в GUI класа. След това добавете метода

public void handleListChange(ListChangeEvent arg0) {
  updateButtons();  <-- My method to run the logic

}

Това не работи, трябва ли да прилагам нещо друго вместо IListChangeListener?

Не съм сигурен какво трябва да внедря в GUI класа, за да слушам промените?

РЕДАКТИРАНЕ

Трябва ли да добавя слушател към зрителя?

viewer = new AplotDataTableViewer(parent, SWT.BORDER|SWT.V_SCROLL|SWT.FULL_SELECTION);
viewer.setInput(AplotDataModel.getInstance().getObservableList());
viewer.addListener(etc... )

Това е единственият вариант, който имам

 addSelectionChangedListener(ISelectionChangeListener listener)

Не ме интересува промяната на избора - само ако списъкът е променен.


person jkteater    schedule 12.12.2012    source източник
comment
Да, прилагането на IListChangeListener е правилният начин. Какво прави updateButtons()?   -  person Behnil    schedule 13.12.2012
comment
@Behnil Проверява списъка, за да се увери, че има поне 1 обект в списъка - Ако не, деактивирам всички бутони, ако има, активирам бутоните. Също така, моля, вижте редакцията по-горе   -  person jkteater    schedule 13.12.2012
comment
Какъв е проблемът с ISelectionChangeListener? Публикувайте тук съдържанието на updateButtons().   -  person Behnil    schedule 13.12.2012
comment
@Behnil Може да видя проблема, нека тествам   -  person jkteater    schedule 13.12.2012
comment
@Behnil Методът handleListChange(ListChangeEvent arg0) никога не се извиква. Това ли е защото не съм добавил слушател към инструмента за преглед на таблици?   -  person jkteater    schedule 14.12.2012
comment
@jkteater Бихте ли ми помогнали, моля, като изясните точки 2 и 3 във вашия въпрос?   -  person Campa    schedule 19.02.2015


Отговори (1)


Опитах този пример и той работи за мен:

IObservableList observableList = new WritableList();
observableList.addListChangeListener(new IListChangeListener() {

    @Override
    public void handleListChange(ListChangeEvent event) {
        System.out.println(event.diff);
    }
});
observableList.add("element");
observableList.add("element");
observableList.add("element");

TableViewer viewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL);
viewer.getTable().setHeaderVisible(true);
viewer.getTable().setHeaderVisible(true);
viewer.setContentProvider(new ObservableListContentProvider());

TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
column.getColumn().setText("Column");
column.getColumn().setWidth(200);

column.setLabelProvider(new ColumnLabelProvider());

// Provide the input to the ContentProvider
viewer.setInput(observableList);

Сега IListChangeListener се извиква три пъти при стартиране на приложението и след това всеки път, когато добавя елемент към observableList.

person Behnil    schedule 13.12.2012