Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / смена цвета в JTable у компонента JCheckBox / 18 сообщений из 18, страница 1 из 1
12.03.2007, 13:17:57
    #34384105
userok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
уважаемые, я где-то чего-то не догоняю, но уже и в инете поискал, и тут посмотрел, но не могу сделать так, чтобы один столбец (который по условию не может быть редактируемым), состоящий из JCheckBox был другого цвета...
Код: plaintext
1.
2.
3.
        DefaultTableCellRenderer checkColumnRenderer =  new  DefaultTableCellRenderer() ;
        checkColumnRenderer.setBackground(Color.LIGHT_GRAY);
        numbersColumn.setCellRenderer(numberColumnRenderer);
        
такой код приводит к тому, что я вместо JCheckBox'ов получаю текстовое поле со значением true и false...
примерно понимаю, что таким обрахом я получаю преобразование в текстовое поле... как мне взять именно JCheckBox и у него поменять (где то не хватает знаний) ???
...
Рейтинг: 0 / 0
12.03.2007, 13:35:22
    #34384212
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
А не проще ли унаследовать DefaultTableCellRenderer, в котором получаем значение true или false, сами создаем JCheckBox, меняем у него Background и радуемся. Регистрируем рендерер для конкретного столбца:

Код: plaintext
myTable.getColumnModel().getColumn( 0 ).setCellRenderer(...)

Или я чего то не понимаю?
...
Рейтинг: 0 / 0
12.03.2007, 14:05:41
    #34384368
userok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
Вот регистировать рендер я как раз знаю как, а вот как сделать подмену новым чекбоксом с изменённым бэкграундом ?
Код: plaintext
1.
2.
3.
4.
                    DefaultTableCellRenderer renderer =  new  DefaultTableCellRenderer(){ 
                         public  Component getTableCellRendererComponent(JTable table, Object value,  boolean  isSelected,  boolean  hasFocus,  int  row,  int  column){ 
                            ..............
                        } 
                    };
подозреваю, что вы намекаете на это, а как должна выглядеть реализация внутри ?
...
Рейтинг: 0 / 0
12.03.2007, 14:42:19
    #34384531
userok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
всё, осмыслил... всё таки лекарства от гриппа сильно тормозят разум
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
                    DefaultTableCellRenderer renderer =  new  DefaultTableCellRenderer(){ 
                         public  Component getTableCellRendererComponent(JTable table, Object value,  boolean  isSelected,  boolean  hasFocus,  int  row,  int  column){ 
                                JCheckBox cb =  new  JCheckBox();
                                cb.setSelected(( Boolean )value);
                                cb.setBackground(Color.LIGHT_GRAY);
                                cb.setHorizontalAlignment(SwingConstants.CENTER);
                             return  cb;
                         } 
                    };

спасибо за наставление на путь истинный :) (а то уже много вариантов перепробовал)
...
Рейтинг: 0 / 0
12.03.2007, 14:42:23
    #34384532
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
Именно. Попробуйте так:

Код: plaintext
1.
2.
3.
4.
5.
JCheckBox cb =  new  JCheckBox();
cb.setSelected( ... конвертируем строку в  boolean  ... );
cb.setBackground(...);

 return  cb;
...
Рейтинг: 0 / 0
12.03.2007, 14:44:46
    #34384543
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
почти угадал

...
Рейтинг: 0 / 0
12.03.2007, 17:59:12
    #34385179
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
userokвсё, осмыслил... всё таки лекарства от гриппа сильно тормозят разум
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
                    DefaultTableCellRenderer renderer =  new  DefaultTableCellRenderer(){ 
                         public  Component getTableCellRendererComponent(JTable table, Object value,  boolean  isSelected,  boolean  hasFocus,  int  row,  int  column){ 
                                JCheckBox cb =  new  JCheckBox();
                                cb.setSelected(( Boolean )value);
                                cb.setBackground(Color.LIGHT_GRAY);
                                cb.setHorizontalAlignment(SwingConstants.CENTER);
                             return  cb;
                         } 
                    };

спасибо за наставление на путь истинный :) (а то уже много вариантов перепробовал)
Угу - классно тебя наставили на путь истинный - нечего сказать... Т.е. при каждой перерисовке ячейки (а это может происходить ООЧЕНЬ часто) создается новый экземпляр JCheckBox (создание объекта - очень недешевая операция) - а потом скармливается сборщику мусора. Гениально млин... а потом еще говорят, что Swing тормозной.
Создай ОДИН экземпляр JCheckBox в рендерере а в методе getTableCellRendererComponent меняй его selection и цвет...
...
Рейтинг: 0 / 0
12.03.2007, 18:14:35
    #34385226
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
И нахрена от DefaultTableCellRenderer наследоваться для отрисовки CheckBox??? Смысл сего действа вам ясен??? Или исходники посмотреть гордость не позволяет? Вообще то DefaultTableCellRenderer наследуется от JLabel, реализует интерфейс TableCellRenderer и в методе getTableCellRendererComponent возвращает ссылку на самого себя - т.е. отрисовывает ячейку с помощью JLabel. А нам надо отрисовать с помощью JCheckBox. Шо делать??? А теперь шевелим немного мозгами, и делаем так же, как взрослые дяди из Sun сделали - создаем новый класс DefaultCheckBoxRenderer, наследуем его от JCheckBox, реализуем интерфейс TableCellRenderer и в методе getTableCellRendererComponent возвращаем ссылку на самого себя (предварительно выставив все нужные параметры)....
...
Рейтинг: 0 / 0
23.03.2007, 09:11:10
    #34410407
userok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
ДуремарИ нахрена от DefaultTableCellRenderer наследоваться для отрисовки CheckBox??? Смысл сего действа вам ясен??? Или исходники посмотреть гордость не позволяет?
Давненько не заглядывал, полсе того как получил хоть какое-то решение проблемы. Тут вот заглянул, хочу сказать что Ваша манера общения - не есть хорошо. Если я сюда пришёл и спросил, дак это не значит, что я решил кому-то мозг потрахать, а мне реально нужна помощь. Если бы все были такими умными как Вы, то на кой Икс тогда форум такого профиля? Он как раз нужен для того, чтобы одни, кто имеет бОльшие знания делился (при желании) с другими. Если вы такой умный и Вас раздражают те кто знает меньше, и по вашему мнению задают дурацкие вопросы, то лучше не отвечать, если же вы хотите помочь, то пожалуйста, делайте это более корректно, не окуная оппонена в грязь. Это мои пожелания на будущее.

Далее...
ДуремарУгу - классно тебя наставили на путь истинный - нечего сказать... Т.е. при каждой перерисовке ячейки (а это может происходить ООЧЕНЬ часто) создается новый экземпляр JCheckBox (создание объекта - очень недешевая операция) - а потом скармливается сборщику мусора. Гениально млин... а потом еще говорят, что Swing тормозной.
Создай ОДИН экземпляр JCheckBox в рендерере а в методе getTableCellRendererComponent меняй его selection и цвет...
Если честно то мне с самого начала не очень нравилась идея создания большого количества объектов, но так как опыта мало, меня это мало смутило, и при отрисовке мне это не мешает, потому как на данный момент табличка маленькая (впринципе расти не будет). Но я реализовал это замечание, так как по мере знаний и возможностей пытаюсь оптимизировать. Здесь вам спасибо.

Дуремарсоздаем новый класс DefaultCheckBoxRenderer, наследуем его от JCheckBox, реализуем интерфейс TableCellRenderer и в методе getTableCellRendererComponent возвращаем ссылку на самого себя (предварительно выставив все нужные параметры)....
Это, при наличии времени, я постараюсь реализовать.

С профессиональной точки зрения общение с вами принесло дополнительные знания. Спасибо
...
Рейтинг: 0 / 0
23.03.2007, 09:43:32
    #34410491
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
userok
[off] Я бы на вашем месте просто сказал спасибо Дуремар :(
Человек дал очень дельный совет, пусть и не совсем в том виде, что Вам бы хотелось, но лекции по правилам поведения он не заслужил.
Более того, его фраза про шевеление мозгами вовсе не обидна, ибо справедлива, и связана не с тем, что Вы начинающий, а с тем, что поленились (я, кстати, тоже частенько ленюсь шевелить мозгами и был бы очень благодарен тому, кто мне на это указал, даже не в очень-то вежливой форме. Если я себя вел как лентяй и дурак (я не намекаю на Вас :) , это просто пример, честное слово), то и назовите меня лентяем и дураком, политкоректность оставьте для страдающих комплексами).

Да, и рекомендую прислушаться к его советам без относительно к размерам вашей таблицы - раз уж начинающий, то попробуйте посерьезней отнестись к умным советам. Даже на маленькой табличке не надо городить подобное безобразие и портить себе стиль программирования.

[/off]
...
Рейтинг: 0 / 0
23.03.2007, 10:35:01
    #34410669
userok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
carper
Я бы на вашем месте просто сказал спасибо Дуремар :(
Человек дал очень дельный совет, пусть и не совсем в том виде, что Вам бы хотелось, но лекции по правилам поведения он не заслужил.
Более того, его фраза про шевеление мозгами вовсе не обидна, ибо справедлива, и связана не с тем, что Вы начинающий, а с тем, что поленились (я, кстати, тоже частенько ленюсь шевелить мозгами и был бы очень благодарен тому, кто мне на это указал, даже не в очень-то вежливой форме. Если я себя вел как лентяй и дурак (я не намекаю на Вас :) , это просто пример, честное слово), то и назовите меня лентяем и дураком, политкоректность оставьте для страдающих комплексами).

Да, и рекомендую прислушаться к его советам без относительно к размерам вашей таблицы - раз уж начинающий, то попробуйте посерьезней отнестись к умным советам. Даже на маленькой табличке не надо городить подобное безобразие и портить себе стиль программирования.


Во-первых, если вы читали ВСЁ, то я не только прислушался к совету, но и реализовал его, за что поблагодарил Дуремара, второй совет так же учёл, так что Ваш последний абзац "в молоко".
Во-вторых, шевелить мозгами надо, тут я не спорю, но надо ещё и знать в каком направлении. Я бы не сказал, что мне лень. Когда мне лень, я ничего не делаю, а если делаю, то пытаюсь делать это по мере своих знаний и возможностей, и так как я не смог обнаружить в инете при поиске подсказку для своих действий, то мне пришлось обратиться к профи.
В-третьих, да возможно я немного перегнул палку в нравоучениях, но у каждого своя грань, до которой можно терпеть некорректное обращение к себе, и после которой начинать возмущаться. Так что думаю в общении на профессиональные темы стоит придерживаться более адекватного общения, а то так можно далеко зайти, вплоть до мата и прочей ругани.
Дальнейшее обсуждение морали общения моего и Дуремара считаю неуместным в данной теме. Если есть ещё что сказать (не по теме), то при желании могу дать мыло или аську.
...
Рейтинг: 0 / 0
25.03.2007, 03:16:56
    #34413800
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
userokТут вот заглянул, хочу сказать что Ваша манера общения - не есть хорошо.
Sorry - с тоном я действительно переборщил. Просто я такой код раз 300 у студентов видел - накипело :) Вобщем приношу свои извинения коллега
...
Рейтинг: 0 / 0
25.03.2007, 03:23:56
    #34413802
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
userok...
Еще я бы Вам посоветовал почаще в сановских исходниках копаться - во-первых там уже есть решения многих проблем, над которыми Вы ломаете голову, во вторых прививает хороший стиль программирования.
...
Рейтинг: 0 / 0
25.03.2007, 03:58:34
    #34413806
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
Еще один бесплатный совет. В версии 1.4 рендереры, сделанные с помощью JCheckBox или JRadioButton, в Windows XP (причем не во всех версиях) начинают дико тормозить. Чёй то там ребята в Сане накосячили. По-моему даже bug-report был. Может быть в 1.5 это поправили - не знаю, не проверял.
Вобщем обходится это просто - отрисовывается CheckBox с помощью JLabel (можно отнаследоваться от DefaultTableCellRenderer и там реализовать). Просто делаете две иконки - с галочкой и без, точно такие же как и в JCheckBox, и в JLabel в зависимости от того выбран у вас элемент или нет устанавливайте нужную иконку. Т.е. обычный Label начинает у вас выглядеть точно так же, как и CheckBox. Оптический обман получается - ловкость рук и никакого мошенничества ;) А editor реализуете уже с помощью обычного JCheckBox.
...
Рейтинг: 0 / 0
26.03.2007, 12:02:44
    #34415079
userok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
Дуремар
хорошо, кто старое помянет, тому глаз вон :)
а наставления и подсказки с благодарностью принимаю
спасибо
...
Рейтинг: 0 / 0
26.03.2007, 12:28:10
    #34415189
max_from_sumy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
userok Дуремар
кто старое помянет, тому глаз вон :)


А кто забудет - тому два...
...
Рейтинг: 0 / 0
26.03.2007, 19:28:05
    #34416674
Ы
Ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
Дуремар userok...
Еще я бы Вам посоветовал почаще в сановских исходниках копаться - во-первых там уже есть решения многих проблем, над которыми Вы ломаете голову, во вторых прививает хороший стиль программирования.

Исходники Swing у Sun прививают хороший стиль???????
И это говорите Вы, почетный третьекурсник? Ну пора хотя б на четвертый курс глянуть (тот, который без Java)
...
Рейтинг: 0 / 0
26.03.2007, 21:09:13
    #34416821
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
смена цвета в JTable у компонента JCheckBox
Ы Дуремар userok...
Еще я бы Вам посоветовал почаще в сановских исходниках копаться - во-первых там уже есть решения многих проблем, над которыми Вы ломаете голову, во вторых прививает хороший стиль программирования.

Исходники Swing у Sun прививают хороший стиль???????
И это говорите Вы, почетный третьекурсник? Ну пора хотя б на четвертый курс глянуть (тот, который без Java)
У меня не начинается!!!!! Нууу начинается... (C) Масяня
Ну что я могу сказать - каждый мнит себя стратегом видя бой со стороны... А вообще этот пост можно расценить только как попытку раскрутить тупой флуд. Вы не тот форум выбрали батенька - вам в ПТ.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / смена цвета в JTable у компонента JCheckBox / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]