Как я могу получить текущую вкладку, пока эта вкладка не активна

Я использую модели Eclipse RCP и EMF. Я создал свои собственные листы свойств с вкладками, которые обновляются, когда объект выбран в представлении. Пока здесь все работает нормально. Затем я хотел обновить вкладку свойств, когда внесу изменения в свою модель. Я добавил прослушиватель изменения модели на свою главную страницу листа свойств.

public class MyTabbedPropertySheet extends TabbedPropertySheet{...}


private void init(){
try{ 
  MyModelChangeListener = new MyModelChangeListener(){
  @Override
  public void refreshUI(){
  try{
    UMLModeler.getTransactionHelper().getEditingDomain().runExclusive(new Runnable() {
      @Override
      public void run(){
      refresh() //This is the eclipse TabbedPropertySheet refresh method
     }
    });
  }catch(){..}
   UMLModeler.getTransactionHelper().getEditingDomain().addResourceSetListener(MyModelChangeListener);
}catch{...}

После этого, когда я меняю свой объект, мой лист свойств действительно обновляется, но у меня есть исключение NullPointerException в классе eclipse, поскольку currenttab имеет значение null.

Метод в org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage

public void refresh(){
  currentTab.refresh();
}

Поэтому мне было интересно, как я могу получить текущую вкладку, пока эта вкладка не активна (я делаю изменения в другом представлении). Или есть другой способ обновить страницу листа свойств?


person vanvana    schedule 25.04.2017    source источник
comment
Спасибо за ваш ответ :) Мне, вероятно, следует изменить заголовок вопроса, так как мой главный вопрос: Как я могу получить текущую вкладку, пока эта вкладка не активна?   -  person vanvana    schedule 25.04.2017


Ответы (1)


Вероятно, вам нужно использовать метод addTabSelectionListener из TabbedPropertySheetPage, чтобы дождаться выбора интересующей вас вкладки, а затем обновить вкладку в прослушивателе выбора.

Вы также можете вызвать getCurrentTab, чтобы узнать, есть ли текущая вкладка (она вернет null, если ее нет).

person greg-449    schedule 25.04.2017
comment
Я вызвал getCurrentTab(), и он возвращает значение null. Чего я не могу понять, так это того, почему обновление выполнено хорошо, если я получаю исключение nullPointerException. Я вижу, что мое представление свойств обновляется с правильным значением, и все, кажется, идет хорошо, пока я не проверю консоль и не увижу, что текущая вкладка имеет нулевое значение. Я использую метод selectionchanged для заполнения вкладки свойств, но когда я вижу TabSelectionListener, чтобы проверить, выбрана ли вкладка или нет. В этом случае мне нужно выполнить обновление, пока выбран другой элемент... - person vanvana; 25.04.2017