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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JButton в столбец JTable, Как получить стобец любого типа 
:(
    Опции темы
StormDK
Дата 5.5.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


Эксперт
***


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

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



1. Определяешь свою модель
2. У модели перекрываешь метод определения типа столбца
3. Делаешь свой CellEditor и CellRenderer

А вообще лучше тебе побродить немного по http://www.java2s.com/ - там есть множество примеров по таблицам.


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


Новичок



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

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



Зайди на http://www.esus.com/docs/GetQuestionPage.jsp?uid=1285
Там весь код есть smile
PM MAIL   Вверх
Strange74
Дата 21.5.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



За пример большой респект! Но!
Хочется сделать все это через TableModel. Я определил свою TableModel и хочется использовать вот эти классы ButtonRenderer и ButtonEditor в  TableModel. 

В общем то как я понял проблемы 2: какой тип для полей с кнопочками возвращать в методе getColumnClass и какое знаечение возвращать в методе getValueAt. 

Кто знает ответы на эти вопросы - поделитесь плиз. А то вся дока в основном сводится к тому что задаем DefaultTableModel а дальше мучаем саму таблицу. Но это ведь не правильно!
PM MAIL WWW ICQ   Вверх
nornad
Дата 21.5.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



По getColumnClass() возвращай, например, JButton.
У таблицы тебе надо прописать твои редактор и рендерер:
Код

table.setDefaultEditor( JButton.class, buttonEditor );
table.setDefaultRenderer( JButton.class, buttonRenderer );

А вот насчёт getValueAt() точно не скажу - надо знать, что за кнопки ты отображаешь и что в рендерер/эдитор передаёшь. Если ничего, то можешь просто игнорировать.


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


Новичок



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

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



Спасибо большое! Вроде разобрался с отображением кнопок smile 
В getValueAt действительно возвращать ничего не надо.

Но есть вопрос: кнопочка не нажимается. Т.е. не рисуется ее нажатие. И еще: как на нее слушатель повесить? Подскажите плиз! smile 
PM MAIL WWW ICQ   Вверх
nornad
Дата 21.5.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Strange74 @  21.5.2007,  16:24 Найти цитируемый пост)
И еще: как на нее слушатель повесить?

Ты редактор делал? Делал. Кнопку на нём использовал? Использовал. Вот на неё и надо листенер приделать.
Как сделать это правильнее в твоей программе сказать просто так сложновато, ибо нужно видеть код и знать, что и для чего у тебя там задумано.

Цитата(Strange74 @  21.5.2007,  16:24 Найти цитируемый пост)
Но есть вопрос: кнопочка не нажимается.

А редактирование ячейки ты разрешил?


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


Новичок



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

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



Спасибо Огромное спасибо! Редоктирование то я как раз запретил )) Все экшн срабатывает, осталось только различать какая кнопка нажата, но это я думаю справлюсь.

Хочу еще попробовать через Actions потом сделать, тоже поковыряюсь.

Спасибо еще раз!

Добавлено через 8 минут и 11 секунд
Кстати вот тут вопрос у меня возник по поводу где повесить листенер

Код

public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int column) {
            
if (column == томуто) {
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                ... код
                    fireEditingStopped();
                }
            });
}

        if (isSelected) {
            button.setForeground(table.getSelectionForeground());
            button.setBackground(table.getSelectionBackground());
        } else {
            button.setForeground(table.getForeground());
            button.setBackground(table.getBackground());
        }

        return button;
    }


Вопрос такой: разумно ли вешать листенер именно в данном месте кода. Дело в том, что в каждой строке несколько кнопок и соответственно при нажатии на каждую должны вызываться разные Actions. Как это будет с точки зрения перфоманса и вообще дизайна?

Еще есть такая идея: сделать несколько Actions, у каждого объявить иконку и обработчик. И вешать это дело на кнопки в рендерире. Меня немного смущает тот факт что вид кнопки мы выставляем в ButttonRenderer а обработчик вешаем в ButtonEditor. Как то это не совсем логично.
PM MAIL WWW ICQ   Вверх
nornad
Дата 21.5.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Strange74 @  21.5.2007,  18:02 Найти цитируемый пост)
Как это будет с точки зрения перфоманса и вообще дизайна?

Попробуй и узнаешь. smile 
Самое смешное, что у тебя листенеры будут накапливаться. В общем, "перформанс" у тебя будт тем лучше, чем меньше будешь жать на кнопки. smile


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


Новичок



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

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



Поэтому я и не стал так делать, я просто создал несколько нужных мне классов Actions и просто делаю button.setActions. Думаю так будет правильнее.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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