Удалить список выбора из таблицы - PullRequest
1 голос
/ 06 января 2012

Я работаю над программой, которая использует две таблицы. Первая таблица имеет прослушиватель выбора, который добавляет новые элементы во вторую таблицу. В зависимости от значения первой таблицы, я хочу, чтобы другой слушатель выбора был добавлен ко второй таблице. Если значение является чем-то другим, я хочу, чтобы слушатель выбора был удален. Я могу заставить слушателя выбора быть добавленным ко второй таблице, но я не могу удалить его. Если для первой таблицы требуется, чтобы во второй таблице был прослушиватель выбора, а прослушиватель выбора выглядит удвоенным.

tblFirst.addSelectionListener(new SelectionListener() { 
    @Override
    public void widgetSelected(SelectionEvent arg0) {
        TableItem ti = tblFirst.getSelection()[0];
        String selectedText = ti.getText();

        SelectionListener myListener = new SelectionListener(){
            @Override
            public void widgetSelected(SelectionEvent arg0) {
                //do something here
            }
        }
        if(selectedText.equals("sometext")) {
            tblSecond.removeSelectionListener(myListener);
            tblSecond.addSelectionListener(myListener);
        }
    }

В приведенном выше примере SelectionListener добавляется каждый раз, когда я выбираю элемент с текстом «sometext». Если я выбрал элемент три раза, SelectionListener запускается три раза. Утилита removeSelectionListener не удаляет сначала список выбора.

Как мне сделать эту работу?

1 Ответ

3 голосов
/ 07 января 2012

myListener относится к новому экземпляру, а не к тому, который был создан и добавлен в последний раз.Если вы каждый раз создаете новый экземпляр и не сохраняете ссылку на него, вы не можете удалить его.Создайте myListener только один раз вне метода обработчика выбора.

Хотя все добавление и удаление слушателя выглядит как kludge - вместо этого вы должны иметь какое-то условие в второй слушатель, чтобы решить, реагировать ли на изменение выбора или нет.

...