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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTable проблемка в выборе листенера 
V
    Опции темы
goodday1941
Дата 23.8.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в общем есть таблица к примеру из двух колонок в первой Boolean вторая String, обе колонки редактируемые!

дак вот нужно сделать так что б когда я начал редактировать стринговую ячейку, автоматом проставлялась галочка в первой колонке..

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


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
jManiak
Дата 23.8.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну как вариант, можно создать свой класс extends AbstractTableModel. В нем прописываешь в методе setValueAt() все что нужно. т.е. в нем прописываешь сохранение саоих данных куда тебе надо + делаешь изменение определенной ячейки в нужном тебе столбце.
PM MAIL ICQ   Вверх
dorogoyIV
Дата 23.8.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 boolean isEditing() 
          Returns true if a cell is being edited. 

PM MAIL   Вверх
goodday1941
Дата 23.8.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dorogoyIV @  23.8.2007,  11:20 Найти цитируемый пост)
boolean isEditing()           Returns true if a cell is being edited. 

нипонял  smile 

Цитата(jManiak @  23.8.2007,  11:02 Найти цитируемый пост)
Ну как вариант, можно создать свой класс extends AbstractTableModel. В нем прописываешь в методе setValueAt() все что нужно. т.е. в нем прописываешь сохранение саоих данных куда тебе надо + делаешь изменение определенной ячейки в нужном тебе столбце.


а вот это интерестное предложение! сейчас буду пробвать!



--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
goodday1941
Дата 23.8.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(goodday1941 @  23.8.2007,  11:25 Найти цитируемый пост)
а вот это интерестное предложение! сейчас буду пробвать!

в общем то прокатило.. но есть одно но.. чекбокс отрепейнтиваеться только после какого то действия... в общем то нужно определить момент когда мне обновить таблицу нужно? подскажите варианты

вот так вот я галочку проставляю теперь:

это в моделе метод

 
Код

public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            if (col==2) {
                data[row][0] = new Boolean(true);
            }
        }




--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
goodday1941
Дата 23.8.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть конечно такой вариант :

Код

public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            if (col==2) {
                data[row][0] = new Boolean(!value.equals(""));
                tableProperties.repaint();
            }
        }


но это есть гонево  smile 


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
jManiak
Дата 23.8.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Table.updateUI()?
PM MAIL ICQ   Вверх
le_chat
Дата 23.8.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




Нужно выполнять некоторые действия (править определенную колонку) перед начало редактирования другой колонки - я правильно понял? Если так, то специального листнера для этого вроде бы нет. Есть листнеры на окончания редактирования (на нормальное и аварийное).  Можно отловить начальное редактирование по вызову метода
Код

Component getTableCellEditorComponent(JTable table, Object value,  boolean isSelected,      int row, int column);


у интрерфеса TableCellEditor. Он вызывается перед началом редактирования и должен вернуть текущий редактор (например JComboBox). Перед возвратом как раз и можно выполнить требуемые действия, благо текущие таблица, строка и колонка передаются.
Таблица обычно использует DefaultCellEditor для управления процессом редактирования. Этот едитор сам ничего не редактирует, он просто подставляет элементы для редактирования (checkbox напрмер). Этот же едитор используется и в JTree. Если его функционлаьность не нужна (а она обычно не нужна), то наследуешь класс от его предка AbstractCellEditor и юзаешь уже его smile 
(редактор привязывается к колонке - ну это так, на всякий случай smile )
PM MAIL   Вверх
dorogoyIV
Дата 24.8.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



le_chat, а я вот понял не так как ты... я подумал, что просто не перерисовывается таблица. , даже не таблица, а чекбокс.
получается, что надо чекбокс репейнтить постоянно (почти). конечно проще всего запустить поток, и пусть он перерисовывает чекбокс постоянно. 
или и не правильно понял???
PM MAIL   Вверх
le_chat
Дата 24.8.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




думаю что лучше уж пусть пояснит автор 
PM MAIL   Вверх
goodday1941
Дата 27.8.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            if (col==2) {
                data[row][0] = new Boolean(!value.equals(""));
                tableProperties.repaint();
            }
        }


этот вариант отрабатывает как мне нужно... но постоянный репейнт меня не возбуждает если честно smile вот к чему я


Цитата(dorogoyIV @  24.8.2007,  15:29 Найти цитируемый пост)
 конечно проще всего запустить поток, и пусть он перерисовывает чекбокс постоянно. 

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


Цитата(jManiak @  23.8.2007,  12:54 Найти цитируемый пост)
Table.updateUI()?

да по сути тот же репейнт

Цитата(le_chat @  23.8.2007,  16:49 Найти цитируемый пост)
AbstractCellEditor


такс... значит не совсем понял.. тоесть вы мне предлагаете переопределить метом getTableCellEditorComponent в AbstractCellEditor? в общем то вариант конечно имеет право на жизнь.. нужно будет подумать над ним....

ПС.. всем спасибо за участие в дискусии  smile 




--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
w38
Дата 31.8.2007, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



AbstractTableModel.fireTableCellUpdated
Самый детализированный вариант события
Код

    public void setValueAt(Object aValue, int row, int column) {
        requestRow.setValueAt(column, aValue);
        fireTableCellUpdated(row, column);
    }

PM MAIL 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.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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