![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| #Maestro# |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.7.2008 Репутация: нет Всего: нет |
Господа!
На форме Frame таблица jTable Два массива: public ArrayList<String> collNames = new ArrayList<String>(); //массив имён столбцов public ArrayList<String> collValues = new ArrayList<String>(); //массив значений Как «присобачить» эти массивы к таблице jTable, что бы значения collNames стали именами столбцов данной таблицы (число столбцов таблицы должно соответствовать числу элементов collNames), значения collValues стали ячейками таблицы jTable? Я таки понимаю, что происходит это с помощью модели типа TableModel. Кто может объяснить подробнее – объясните, если есть возможность. Модератор: Название темы должно отражать ее суть! Это сообщение отредактировал(а) powerOn - 18.2.2009, 20:13 |
|||
|
||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
Класс JTable очень сложный и чтобы лучше с ним разобраться советую почитать "Swing: Эффективные пользовательские интерфейсы". Ну а если уже лень то тогда читай документацию по javax.swing.table.TableModel (вроде так)
Добавлено через 10 минут и 56 секунд Вот мини примерчик:
|
|||
|
||||
| #Maestro# |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.7.2008 Репутация: нет Всего: нет |
Kircul! уважаемый! спосибо громадное за помощь, но остались пробленные моменты:
Дело в том, что массив collValues объявлен не как у вас «List<List<String>>», а просто ArrayList<String> Дело в том, что я никогда не использовал этот List<List<String>> и делать этого сейчас не умею. И, как следствие, возникает ошибка в цикле: collValues.add(value); // value значения из базы данных table и массивы у меня создаются в классе-наследнике от javax.swing.JFrame, а у вас в функции main, которая throws InterruptedException, это принципиально? Кстати в вашем примере каждая строчка collValues заполняется как отдельный массив, то есть видимо нельзя все значения «пихать» как один ArrayList? видимо поэтому фукция getValueAt(int r, int c) класса, который расширяет «AbstractTableModel» у меня выглядит следующим образом public Object getValueAt(int r, int c) { Object d = collValues.get(perem); perem++; return d; } Вместо вашей: return collValues.get(rowIndex).get(columnIndex); Где переменная perem у меня объявлена глобально и равна нулю. Хотя, наверное, всё это бред кстати, это возможно - найти "Swing: Эффективные пользовательские интерфейсы" в электронном виде. если да, то где? |
|||
|
||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
нет это не нужно. Так что-то я запутался... А что за значения хранит список collValues
т.е. это двумерный список. |
|||
|
||||
| #Maestro# |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.7.2008 Репутация: нет Всего: нет |
у вас это двумерный список, а в моём убогом случае это:
Frame.jTable = new JTable(new packageDB.tableA.TableD(collValues, collNames)); А вот пример заполнения collValues (написан криво): public void valuesInit(ResultSet rs) throws SQLException { while(rs.next()) { for(int j=0;j<collNames.size();j++) { String coll = rs.getString(collNames.get(j)); //значение ячейки collValues.add(coll); //каждое поле таблицы добовляется в массив значений } } } Входящий параметр «rs» это результат запроса: ResultSet rs = st.executeQuery("SELECT * FROM " + Frame1.stringJList); Где stringJList - список всех таблиц взятых из БД. на всякий случай пример заполнения collNames: public TableModel collSpisok(Connection con, String s) { //список имён столбцов выбранной таблицы TableModel model; try{ TablesName tName = new TablesName(); Statement st =con.createStatement(); //список всех полей таблицы ResultSet rs = st.executeQuery("SELECT * FROM " + Frame1.stringJList); ResultSetMetaData meta = rs.getMetaData(); for (int i =1; i<meta.getColumnCount()+1;i++) { String collName = meta.getColumnLabel(i); //каждое поле добовляется в массив имён столбцов collNames.add(collName); } } catch(Exception e){System.out.println(e.toString());} model = new packageDB.tableA.TableD( collValues, collNames); return model; } |
|||
|
||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
Лучше переделать так:
и использовать мой первый пример. В таком случае имена колонок будут как в базе. |
|||
|
||||
| #Maestro# |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.7.2008 Репутация: нет Всего: нет |
спосибо за поддержку! а где книжку "Swing: Эффективные пользовательские интерфейсы" найти в электронном виде не подскажете?
|
|||
|
||||
| #Maestro# |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.7.2008 Репутация: нет Всего: нет |
уважаемый Kircul. у меня новая проблемма с вышеупомянутой таблицей:
если изменить размеры таблицы, или нажать мышью на любую ячейку - значения ячеек начинают меняться. не подскажете дураку - как избавиться от этого бреда? и как узнать номер этой выбранной ячейки (желательно в качестве элемента однимерного массива, ведь значения ячеек у меня хранятся в массиве collValues)? |
|||
|
||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
||||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |