Обработка событий изменения выбора JTable: динамический поиск исходной таблицы

Я реализовал свой собственный обработчик событий и добавил его в модель выбора таблицы:

table.getSelectionModel().addListSelectionListener(event);

И реализовал метод для «события» (упомянутого выше):

public void valueChanged(ListSelectionEvent e) {
    log.debug("value changed");
}

К сожалению, событие срабатывает дважды, если я выберу случайный выбор и не представляется возможным найти связанную таблицу, потому что e.getSource предоставляет javax.swing.DefaultListSelectionModel.

Отсюда мои вопросы:

1) Почему он срабатывает дважды, хотя eventListener регистрируется только один раз?

2) Как мне найти таблицу, для которой применяется выбор? DefaultListSelectionModel, похоже, не предлагает никаких getSource () или аналогичных.

Большое спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
20 864
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

1) Я думаю, вы обнаружите, что он срабатывает один раз для отмены выбора старого выбора и один раз для выбора нового выбора. Если вы регистрируете подробности события, вы должны точно видеть, что происходит. Я не могу вспомнить детали, так что, возможно, это неправильно. В любом случае вы должны иметь возможность вызывать getValueIsAdjusting () для события и использовать только последний в цепочке (т.е. когда он возвращает false).

2) Обычно в этом нет необходимости, но AFAIK единственный способ сделать это - создать свой Listener специально для таблицы (т.е. передать таблицу конструктору и запомнить ее).

Большое спасибо, это именно то, что я искал! getValueIsAdjusting () должно быть ложным, как вы написали.

MrG 19.12.2008 03:41

Поскольку более чем один JTable (или другой компонент, который я предполагаю) могут использовать одну и ту же модель выбора, нет смысла запрашивать связанный JTable из события. По этой же причине вы не можете получить JTable из TableModel. Как предлагает Дрэмон, сохраните ссылку на JTable в (или сделайте ее доступной для) вашего класса слушателя.

Спасибо Draemon .. Он отлично работает ....

Наш Кодекс

vMachinesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

    public void valueChanged(ListSelectionEvent lse) {
        if (!lse.getValueIsAdjusting()) {
            System.out.println("Selection Changed");
        }
    }
});

Спасибо

Команда TF

Другие вопросы по теме