Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JTable: отличить множественное выделение


Автор: Real McCoy 5.8.2007, 12:32
Подскажите, плз, направление для размышлений о такой проблеме: имеется таблица и другой контрол (не важно какой, у меня - панель с диаграммой), на котором отражаются результаты выбора строк таблицы. В таблице позволено выбирать как одиночные строки, так и множественные интервалы строк. Каким образом можно определить, что пользователь выбирает одну строку в таблице, а не добавляет строку к уже выбранным (с Ctrl или Shift)? Надо вешать MouseListener или ActionListener, или есть более правильные способы?

Код обработки выделения сейчас примерно такой:
Код

MyTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
ListSelectionModel lsModel = this.getSelectionModel();

lsModel.addListSelectionListener(new javax.swing.event.ListSelectionListener()
{
  public void valueChanged(javax.swing.event.ListSelectionEvent e)
  {
    if(e.getValueIsAdjusting())
      return;
    ListSelectionModel lsModel = (ListSelectionModel)e.getSource();

    int minSelectionIndex = lsModel.getMinSelectionIndex();
    // ... действия с выделением ...
  }
});

Автор: AlexeyVorotnikov 5.8.2007, 16:20
Цитата(Real McCoy @  5.8.2007,  13:32 Найти цитируемый пост)
MouseListener или ActionListener, или есть более правильные способы?

А причём тут MouseListener или ActionListener? IMHO, всё, что нужно, надо делать в ListSelectionListener. По-моему, это самый правильный способ.

Автор: Real McCoy 5.8.2007, 17:27
Цитата(AlexeyVorotnikov @  5.8.2007,  16:20 Найти цитируемый пост)
А причём тут MouseListener или ActionListener?

Вопрос в том, чтобы определить, сделал ли пользователь просто левый клик на строке таблицы, т.е. выделил одну строку или сделал его с нажатым Ctrl или Shift, т.е. добавил новую строку к существующим выделенным строкам.
Я не нашёл, чтобы с помощью ListSelectionListener (который у меня уже реализован), можно было различить разный характер выделения строк, потому и спросил.

Автор: AlexeyVorotnikov 5.8.2007, 17:48
Тогда, наверное, надо просто запоминать состояние выделения, и в ListSelectionListener'е сравнивать запомненное состояние выделения с тем, которое получается после соответствующего ивента.

Добавлено через 1 минуту и 7 секунд
PS: А зачем нужно различать такие способы выделения?

Автор: Real McCoy 5.8.2007, 18:22
Видимо придётся запоминать статус выделения. А так хотелось простого и красивого решения smile

Цитата(AlexeyVorotnikov @  5.8.2007,  17:48 Найти цитируемый пост)
PS: А зачем нужно различать такие способы выделения? 

Ну, например, в моём случае я делаю highlight элементов диаграммы, строки соответствующие которым выделяются пользователем в таблице. Управление осуществляется через контроллер, которому ListSelectionListener'ом шлётся ID выбранной записи с помощью PropertyChange. И мне надо как-то различать, когда на диаграмме надо сбросить подсветку всех подсвеченных элементов и выделить один новый, а когда  добавить подсвеченный новый к остальным.

Автор: nornad 5.8.2007, 18:23
Real McCoy, MyTable.getSelectedRowCount() тебе поможет.  smile 

Автор: Real McCoy 5.8.2007, 18:42
О! Точно! Опять упустил с самой поверхности...
Ещё одно спасибо, nornadsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)