Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTable: отличить множественное выделение, от одиночного. Как? 
V
    Опции темы
Real McCoy
  Дата 5.8.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 28.6.2007

Репутация: 2
Всего: 2



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

Код обработки выделения сейчас примерно такой:
Выделить всёкод Java
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
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();
    // ... действия с выделением ...
  }
});

PM MAIL   Вверх
AlexeyVorotnikov
Дата 5.8.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 3
Всего: 18



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

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


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Real McCoy
Дата 5.8.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 28.6.2007

Репутация: 2
Всего: 2



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

Вопрос в том, чтобы определить, сделал ли пользователь просто левый клик на строке таблицы, т.е. выделил одну строку или сделал его с нажатым Ctrl или Shift, т.е. добавил новую строку к существующим выделенным строкам.
Я не нашёл, чтобы с помощью ListSelectionListener (который у меня уже реализован), можно было различить разный характер выделения строк, потому и спросил.
PM MAIL   Вверх
AlexeyVorotnikov
Дата 5.8.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 3
Всего: 18



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

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


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Real McCoy
Дата 5.8.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 28.6.2007

Репутация: 2
Всего: 2



Видимо придётся запоминать статус выделения. А так хотелось простого и красивого решения smile

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

Ну, например, в моём случае я делаю highlight элементов диаграммы, строки соответствующие которым выделяются пользователем в таблице. Управление осуществляется через контроллер, которому ListSelectionListener'ом шлётся ID выбранной записи с помощью PropertyChange. И мне надо как-то различать, когда на диаграмме надо сбросить подсветку всех подсвеченных элементов и выделить один новый, а когда  добавить подсвеченный новый к остальным.
PM MAIL   Вверх
nornad
Дата 5.8.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 6
Всего: 31



Real McCoy, MyTable.getSelectedRowCount() тебе поможет.  smile 


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Real McCoy
Дата 5.8.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 28.6.2007

Репутация: 2
Всего: 2



О! Точно! Опять упустил с самой поверхности...
Ещё одно спасибо, nornadsmile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.