Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: GUI и Java FX приложения > Listener на ячейку таблицы? |
Автор: BlHol 11.1.2009, 16:34 |
День добрый! Вопрос такой. Создал таблицу, заполнил. Теперь нужно на ячейку таблицы повесить листенер, действия в котором, выполняются в зависимости от значения в ячейке. Вопрос - как? Если можно, общий алгоритм и пару методов. Заранее спасибо. С уважением. |
Автор: fixxer 11.1.2009, 17:03 |
Можно usecase поподробнее, что именно нужно и в какой момент? |
Автор: BlHol 11.1.2009, 17:09 | ||
Вобщем ситуация такая. Есть таблица с различными значениями. Если ячейка содержит значение отличное от нуля, то при клике на ней должна разворачиваться (под данной таблицей) еще одна таблица с расшифровкой данного значения ячейки. Заранее спасибо. |
Автор: fixxer 11.1.2009, 17:46 |
если я правильно понял, что речь идет о JTable (кстати в таком случае вопрос стоит задать в разделе по Java GUI), то можно повесится на изменение выделения строк (JTable#getSelectionModel().addSelectionListener(...)) и на изменение выделения колонок (JTable#getColumnModel().addColumnModelListener(...)). Можно объединить эти два листенера в одном классе и при изменении выделения проверять значение в модели таблицы и действовать соответствующим образом. |
Автор: skif18 12.1.2009, 14:52 |
fixxer, а примерчик или ссылку на что-то подобное не подбросишь? Автор опередил с темой ... ![]() |
Автор: LSD 13.1.2009, 15:40 |
Ещё как вариант можно использовать MouseListener и rowAtPoint() + columnAtPoint() (поищи по форуму, примеры как их использовать я уже давал). |
Автор: BlHol 14.1.2009, 13:08 | ||
Спасибо. Попробую. Хотя, честно говоря, получилось через MouseListener, повешеным на таблицу с оценкой выделенной строки и столбца. Теперь появилась новая проблема. Нужно те ячейки, где число отличное от нуля как-то выделить (цветом, жирным шрифтом и т.д.). Усложняется все тем, что в таблице не только числовые данные. Причем, в разных строках и ячейках. Заранее спасибо. С уважением. |
Автор: Connie 14.1.2009, 14:51 |
BlHol, а рендер с этим не справится? http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer |
Автор: fixxer 14.1.2009, 15:48 | ||
|
Автор: BlHol 14.1.2009, 17:05 |
Спасибо! Реально, грамотно! Сейчас, чуть подкорректирую и в код. Еще раз, огроменнейшее спасибо! |
Автор: BlHol 14.1.2009, 17:38 | ||
fixxer Еще один вопросик, если Вас не затруднит. Все, в общем, понятно.
Не совсем понятна необходимость повторного навешивания Листенера и повторной установки выделения (3 и 4 строки) И еще один вопросик. Есть ли смысл написать класс, который будет рендерить любую таблицу (в зависимости, скажем, от некоего флага), переданную в него или лучше просто каждый раз навешивать на новую таблицу новый рендерер? С уважением. |
Автор: fixxer 15.1.2009, 01:46 | ||||
Внимательнее! Листенер присоединяется к различным источникам, изменение выделения сторок и выделения колонок, соответственно. По-поводу универсальности. Зачастую универсальные классы замусориваются в процесе разработки деталями и адаптациями к конкретным решениям. Думаю, что полезно руководствоваться тем, что класс должен хорошо выполнять одну конкретную хорошо очерченую задачу. (Single Responsibility). Но единого ответа тут быть не может - нужно решать в каждом конкретном случае. |
Автор: math64 15.1.2009, 09:18 | ||
Нужно добавить TableModelListener (если есть возможность редактирования таблицы):
|
Автор: BlHol 15.1.2009, 10:52 | ||||||
Это я видел, что к разным. Просто, в случае с
понятно, что вешается на столбец. А в случае с
это как-то не очень понятно, куда он вешается... |
Автор: skif18 15.1.2009, 11:28 | ||
Пользовался этим. Работает. |
Автор: math64 15.1.2009, 14:30 |
Когда вешаешь обработчик MouseListener реакия идёт только на мышь, при ListSelectionListener можно управлять клавиатурой или программно - содержимое метки будет изменяться, но если нет TableModelListener, содержимое метки не будет изменяться при изменении содержимого ячейки таблицы если остаётся выделена та же самая ячейка. |
Автор: x8m6 15.1.2009, 16:41 | ||
На строки соответственно |