| Виды программирования, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Проблема множественности интерфейсов в EJB Java 1.4.2 и J2MEWTK2.0 хавает память, about MIDlet Java Form designer FileOutputStream: SecurityException Помогите разобратся Как запустить сервлет, Как запустить сервлет Java IDEA - IntelliJ IDEA, Java IDEA нужны разработчики-энтузиасты, J2ME developers invited Как выгрузить класс J2EE на удаленном сервере, Как развернуть J2EE на удаленном сервере Встроенный java script в си++, Как это сделать? Начал изучать Java и столкнулся с проблемой, Java GVM - java встроенный в c++, Как с этим работать? Strin to Date, конвертирование Списки и списки в таблицах, Редактируемые списки Изменение числа строк в JTable, Добавление и удаление строк в JTable Как скрыть консоль в приложении с фреймом Требуются программисты для Home Java, Research Center Samsung Требуется программист java Среды разработки, Хочу определиться JMF, JMF connection to Oracle Как Вы относитесь к курящим девушкам? Прежде чем задать вопрос, прочтите это! Документация и книги по Java, Давайте соберём ссылки изменение цвета фона некоторых строк в JTable, как изменить цвет фона некоторых строк Хостинг с Java, На сколько мы связаны сервером? При закрытии окна пользователем нужно чтобы открыл WindowUtilities, ошибка В продолжение темы... Апплеты на закладках. Открытие заданных ссылок каждые 2 минуты, как это можно реализовать с помощью JAVA JFileChooser Где лучше обрабатывать ексепшны? Mouse/Key Listener Связь сервлета с HTML ответом. Tomcat 4.1 Text area Создание панелей по меняющимся именам, заранее неизвестно название класса поиск слова в файле и всавка текта в файл Печать Java звонилка, Нужна помощь в написании dialer'a Java.net Срочный вопрос :) Есть слабенький комп, необходимо, иметь возможность на программир. на яве. удаление почты по POP3 мышька, нужено отключение мыши по нажатию JDBC .dbf driver Потоки, Решение по приостановке потока FileDialog, открытие нескольких фалов ч/з FileDialog Vash uroven' Java-programmista InternetAddress и проверка синтаксиса e-mail, Проверка корректности синтаксиса e-mail package extending, расширение существующих packages Как впихнуть данные в созданный пустой jTable ? Как вы парсите XML на java?, Как вы парсите XML на java? Развертывание WEB-приложения Переработанное понятие Focus для AWT., Сразу несколько компонент в фокусе. Использование експлойта на Жаве Обновление ResultSet Как приостановить исполнение до нажатия кнопки? Документация по Tomcat Русские символы в TextField в Linux, возможно ли такое и как.. оператор switch, ??? как узнать что на сокет пришли данные? package and appletviewer Нужны программы, которые компилируют cryptography Java applet, можно поместить в апплет HTML-file Jakarta regexp Java SOAP, Кто-нибудь работал с SOAP в JAVA Варианты архивирования Как Вы относитесь к курящим девушкам? |
Платные хостинги Раскрутка сайта Книги по программированию Как впихнуть данные в созданный пустой jTable ?
- Имеемjavax.swing.JTable refTbl;...refTbl.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null}, {null, null, null, null, null} }, итд...В общем на экране есть таблица 10Х5Далее , путем шаманских танцев с бубном вокруг сокета, получили набитый по уши Vector Каждый элемент вектора массив из 5 элементов.Вопрос: Как впихнуть в таблицу например первые 10 элементов из вектораПытался делать что то наподобие :Код public void fillTable(int page, java.util.Vector aArray) { // page - номер страницы // из массива aArray Object curRow=new java.lang.reflect.Array[5]; // сюда ложится элемент из вектора if(aArray.size()>0){ pageCount=aArray.size()/10; refTbl.removeRowSelectionInterval(0, 9); // очищаем таблицу for(int k=page*10; k<page*10+10; k++) // цикл на 10 итераций (10 строк в таблице) { curRow=aArray.get(k); // достаем из вектора N-й элемент, который является массивов 1Х5 for(int i=0; i<5; i++){ refTbl.setValueAt(curRow[i], k, i ); // по идее должны поэлементно заполнить строку из таблицы, ан нет... } } } }highlightSyntax('javamZjhjN','java');получаем ошибкуarray required, but java.lang.Object found refTbl.setValueAt(curRow[i], k, i ); - Может дело в этом объявленииObject curRow=new java.lang.reflect.Array[5];Здесь curRow объявлен массивом из пяти эллементов типа Array (а не Object). А тебе нужен массив объектов а не массив массивов. Поэтому и компилятор ругается. Тебе наверно лучше использовать что-то вродеObject[] curRow = new Object[5]; Это сообщение отредактировал Sun - 7.8.2003, 18:44 - Все делается намного проще )) Через датамодель... Погоди часика полтора - до дому доберусь выложу... - если через датамодель, то насколько я понял это будет просто пересоздание таблицы, ток уже с новыми значениями ячеек? - Не обязательно... В общем погодь чутка Это сообщение отредактировал DarkDS - 7.8.2003, 18:59 - ладно, жду а пока тут с примерами из постваки jdk поразбираюсь... - Кстати... Вопрос... А не проще ли передавать Вектор, хранящий в себе какой либо класс с данными (то есть уже упорядочить данные) Это сообщение отредактировал DarkDS - 7.8.2003, 19:20 - Итак: Пишем небольшой класс Модели... Примерно такой:Код import java.util.List;import java.util.LinkedList;import javax.swing.table.DefaultTableModel;public class MTableModel extends DefaultTableModel { private LinkedList rows = new LinkedList(); public int getRowCount() { int count = rows.size(); if ( count < 10 ) count = 10; return count; } public int getColumnCount() { return Storage.STORAGE_LENGHT; } public String getColumnName(int columnIndex) { return ""; } public Class getColumnClass(int columnIndex) { return String.class; } public Object getValueAt(int rowIndex, int columnIndex) { int size = rows.size(); if ( size == 0 || rowIndex >= size ) return ""; Storage row = (Storage)rows.get( rowIndex ); if ( row == null || row.getData( columnIndex ) == null ) return ""; return row.getData( columnIndex ); } public void addRow( Storage row ) { rows.addLast( row ); fireTableRowsInserted( rows.size() - 1, rows.size() - 1 ); } public void addRows( List newRows ) { rows.addAll( newRows ); fireTableDataChanged(); } public void clear() { rows.clear(); fireTableDataChanged(); }}highlightSyntax('javaMzgwYj','java');В данном случае я воспользовался для простоты работы классом Сторедж (чтобы не работать на прямую с массивом)Код public class Storage { public static int STORAGE_LENGHT = 5; private Object[] data = new Object[STORAGE_LENGHT]; public Object getData( int index ) { if ( index >= STORAGE_LENGHT ) return null; return data[index]; } public void setData( int index, Object value ) { if ( index >= STORAGE_LENGHT ) return; data[index] = value; }}highlightSyntax('javaU3YjQ1Y','java');Как будет происходить в данном случае работа с данными:Создается наша датамодельКод MTableModel model = new MTableModel();JTable table = new JTable( model ); //(О таблице теперь можно забыть - все будет идти через модель...)highlightSyntax('javaTU0OTZiM','java');Теперь в месте где получаем лист (кстати. Лудше работать с листами чем с вектором. У них скорость доступа меньше) мы можем либо добавить какое то количество строк, либо весь вектор сразу...Вот так:Код public void fillTable( List list ) { model.clear() //Если мы хотим очистить таблицу... Иначе этого не нужно. model.addRows( list ) //Если мы хотим добавить все данные в листе... //Иначе делаем так: /* Iterator iterator = rows.iterator(); //Для быстроты перебора воспользуемся итератором. //minItem i maxItem - индексы начала и конца страницы. while( iterator.hasNext() && i < maxItem ) { Storage storage = (Storage)iterator.next(); if ( i >= minItem ) model.addRow( storage ); ++i; } */}highlightSyntax('javajFmMGI2N2','java'); Это сообщение отредактировал DarkDS - 16.9.2003, 14:25 - Все понятно? Нужны пояснения?ЗЫ. Сорри.. Чутка ошибся во времени пути до дому... Дела появились... Это сообщение отредактировал DarkDS - 7.8.2003, 22:45 - Да. Вопросы есть.Код хороший, я понял его.Только зачем наследовать целый класс? Почему нельзя использовать JTable?В JTable я нашел метод, тот что мне надо: setValueAt(Object o, col, row);Он бы меня вполне устроил.Только вот, что за объект ему надо скормить для указанной ячейки? - Вообще то нужно скормить обычный объект... А Наследовать целый класс - для простоты работы с содержимым таблицы. Тут ты можешь и имена столбцов выставить и если нужно чтобы данные редактировались - добавить 2-а метода и все (один метод показывает - редактируемая ли ячейка, а второй изменяет значени... Причем редактируемость можешь контролировать. К примеру сделать все столбцы кроме первого редактируемыми. И с данными тоже работать можешь как угодно )...Да к тому же более "кошерно" работать с моделью данных, а не с таблицей...Тем более что таблица методом setValueAt(Object o, col, row); вызывает такой же метод у модели... И через таблицу напрямую столбец не добавишь. (в данном примере достаточно убрать if ( count < 10 )count = 10; и в начале таблица будет пустой, а после заполнения ее с помощю модели буду отображатся добавленные столбцы) Это сообщение отредактировал DarkDS - 8.8.2003, 10:33 - УгУ... Однако хорошо сказано! Убедил.Таки с меня пиво... [(_) И еше пиво... [(_) - Кстати, а таблицу нужно лепить только на jScrollPanel? Или по барабану?Если по барабану, то я не понял почему при добавлении таблицы на скроллпанель - имена столбцов есть, а если прилепить таблицу на JPanel, то она голая свсем... - Все очень просто: Когда для показа столбцов реализован такой принцип, что заголовки показываются через специальный вьюпорт. В скрол панеле этот вьюпорт есть, а в обычной панеле нет. Так что лудше всего таблицу в скроле помещать... Если не нужно чтобы прокручивалось - поставь просто у скрола опцию NO_SCROLL - Это понятно. я уже так и сделал.Тут в другом вопрос... Код java.util.LinkedList list = new java.util.LinkedList(); String[] ls={"1", "Пупкин В", "24234", "345345", "45646"}; list.addFirst(ls); model.addRows(list);highlightSyntax('javaYTI1OW','java');что в этом неправильногопотому что таблица не появилас, а в стдаут получено:Код java.lang.ClassCastException at pbx.mTableModel.getValueAt(mTableModel.java:63) at javax.swing.JTable.getValueAt(JTable.java:1760) at javax.swing.JTable.prepareRenderer(JTable.java:3686) at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:1149) at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1051) at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:974) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142) at javax.swing.JComponent.paintComponent(JComponent.java:541) at javax.swing.JComponent.paint(JComponent.java:808) at javax.swing.JComponent.paintChildren(JComponent.java:647) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JViewport.paint(JViewport.java:707) at javax.swing.JComponent.paintChildren(JComponent.java:647) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JComponent.paintChildren(JComponent.java:647) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JComponent.paintChildren(JComponent.java:647) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4771) at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4724) at javax.swing.JComponent._paintImmediately(JComponent.java:4668) at javax.swing.JComponent.paintImmediately(JComponent.java:4477) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178) at java.awt.EventQueue.dispatchEvent(EventQueue.java:448) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136) at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)highlightSyntax('javaMDRjNWI','java');И еще: что бы выставить ширину стлобцов так как мне надо, мне пришлось сделать этоКод int[] refColumnWidth = {30,170,10,10,10}; javax.swing.table.TableColumnModel tModel = refTbl.getColumnModel(); for (int i=0;i<5;i++) { tModel.getColumn(i).setPreferredWidth(refColumnWidth[i]); }highlightSyntax('javaMjlmNDJj','java');В принципе сработало, но хотелось бы мнение... Это сообщение отредактировал Alone - 8.8.2003, 15:26 |