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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нововведения в Swing jdk1.6, filtering,sorting 
V
    Опции темы
maxlab
Дата 1.2.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!

Вопрос такой... А кто нибудь уже натыкался на комплексный пример как заюзать все это хоз-во грамотно. 
В demo/jfc лежат старые примеры
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
powerOn
Дата 1.2.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Ну а погуглить? ссылка.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
maxlab
Дата 2.2.2007, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



За ссылку спасибо... но эту статью я читал, там все понятно... и я так сделал как там советуют.
Но возникла след ситуация:
Представте себе что есть JTable, модель загружена, сортировщик прикручен к таблице... Все как в этой статье. Жмем на заголовки колонок - все сортируется. А теперь попробуем изменить данные в какой либо ячейке типа tblData.getModel().setValueAt(тра-ля-ля). Содержимое ячейки изменится... только не в той строке что заказывали. Я предполагаю так, что исходная модель как то индексируется и номер видимой строки может не совпасть с номером строки в модели данных. У класса RowSorter есть два интересных метода convertRowIndexToModel(int index) и convertRowIndexToView(int index) ... чую что это спасет отца русской демократии, но по скудному комментарию в доке - пока не понятно как это использовать. Может кто натыкался уже на эти грабли и сможет дать развернутый ответ по этому вопросу

--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
maxlab
Дата 2.2.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile  Победил!

Код

    private void loadPriceData() {
        // номер видимой и выделенной строки таблицы
        int selectedViewRow = tblData.getSelectedRow();
        // преобразуем к номеру строки модели таблицы
        int selectedModelRow = tblData.getRowSorter().convertRowIndexToModel(selectedViewRow);
        // вытягиваем содержимое ячейки из модели таблицы
        String rowid = tblData.getModel().getValueAt(selectedModelRow, tblData.getColumn("rowId").getModelIndex()).toString();
        try {
            Statement st = dbConnection.createStatement();
            // Получаем актуальные цены на продукцию
            ResultSet rs = st.executeQuery("select * from changedata where refer='"+rowid+"' order by datachanged desc limit 1");
            if (rs.next()) {
                // устанавливаем цены в соответствующие ячейки в модели таблицы
                tblData.getModel().setValueAt((rs.getObject("optcena")  == null ? "-" : rs.getObject("optcena").toString()),selectedModelRow,tblData.getColumn("Опт").getModelIndex());
                tblData.getModel().setValueAt((rs.getObject("rozncena") == null ? "-" : rs.getObject("rozncena").toString()),selectedModelRow,tblData.getColumn("Розн").getModelIndex());
                tblData.getModel().setValueAt((rs.getObject("spcena")   == null ? "-" : rs.getObject("spcena").toString()),selectedModelRow,tblData.getColumn("Спец").getModelIndex());
            }
             st = null;
             rs.close();
             rs = null;
        } catch (Exception e) {}
    }



Осталось разобраться для чего нужен метод convertRowIndexToView(int index)

Это сообщение отредактировал(а) maxlab - 2.2.2007, 09:45
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
LSD
Дата 2.2.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

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



Дело в том, что в JTable у столбцов можно менять порядок. И метод convertRowIndexToView() нужен для того чтобы понять какой номер столбца в JTable соответсвует столбцу модели.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maxlab
Дата 2.2.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А причем здесь тогда convertRowIndexToView() ...  smile  В случае с столбцами логично было бы предположить чтото вроде convertColumnIndexToView() ...хотя Х.З. как механизм сортировки устроен внутри  smile 
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
powerOn
Дата 2.2.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Имеется Java Doc, в котором все описано.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 2.2.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

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



Ошибся, это для строк, а не для колонок. Хотя для них такой механизм тоже есть.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maxlab
Дата 2.2.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(powerOn @ 1.2.2007,  18:15)
Ну а погуглить? ссылка.

А второй примерчик с фильтрацией у кого либо заработал? У меня нет  smile 

Вру... в Нетбинсе 5,5 работает с уровнем компиляции 1.6 ... 
это плохо...мой проект компилится с 1.4... придется разбираться  smile 

Это сообщение отредактировал(а) maxlab - 2.2.2007, 22:53
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
LSD
Дата 4.2.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(maxlab @ 2.2.2007,  22:47)
А второй примерчик с фильтрацией у кого либо заработал? У меня нет  smile 

Вру... в Нетбинсе 5,5 работает с уровнем компиляции 1.6 ... 
это плохо...мой проект компилится с 1.4... придется разбираться  smile

Ты сам-то понял, что написал? smile 

Вначале спрашиваешь, что нового появилось в JDK 1.6, а потом удивляешься почему это не работает в JDK 1.4.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maxlab
Дата 5.2.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile  я... ? Конечно понял...
Если первый примерчик с сортировкой по столбцам из этой статьи на уровне 1.4 работает, то почему бы и второму не заработать? 
буду разбираться  smile 
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
LSD
Дата 5.2.2007, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(maxlab @  5.2.2007,  10:29 Найти цитируемый пост)
то почему бы и второму не заработать?

Тебе не приходило в голову, что JDK 1.6 появилсь новые API которых нет в JDK 1.4, и которые используются для этого примера.

А вообще, ты бы хоть ошибку написал, какую он тебе выдает.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maxlab
Дата 5.2.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(LSD @ 5.2.2007,  10:59)

А вообще, ты бы хоть ошибку написал, какую он тебе выдает.

Эт... запросто
Во первых, нужно немного модифицировать код примера. В той части где модель таблицы инициализируется, все числовые значения обрамляем кавычками.... и,далее, удаляем модификаторы <...>

При компиляции получим вот это

C:\Documents and Settings\maxlab\My Documents\j\TestData\src\testdata\FilterTable.java:61: regexFilter(java.lang.String,int...) in javax.swing.RowFilter cannot be applied to (java.lang.String)
                       RowFilter.regexFilter(text));
1 error

и уточню что запускаю пример на JRE1.6 но компилирую в уровень 1.4 в нетбинсе 5.5 
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
LSD
Дата 5.2.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

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



Замени regexFilter(text) на regexFilter(text, new int[0]).

Добавлено @ 11:40 
Только на JDK 1.4, это все равно не заработает.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maxlab
Дата 5.2.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А мне и не надо... запускаем  на  JRE1.6

Немного отвлекаясь от темы топика...

В кровопролитных 3х месячных боях совместно с Брюсом Эккелем,Гароль и Минс,Айвором Хортоном и К.Арнольд, Дж.Гослинг и Д.Холмс и другими гуру в т.ч. и с местного форума LSD,PowerOn были заняты следующие позиции... см аттачменты

Тяжело дается изучение Явы... Но я все больше ловлю себя на мысли ... почему я не обратил внимание на этот шедевр от SUN лет 10 назад, когда все это начиналось  smile 

Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  java.jpg 67,33 Kb
--------------------
Удивительное рядом... но оно запрещено!
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.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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