| Виды программирования, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Избавление от пробела.. Где можно почитать про *.forms JOptionPane, Как выделить слово в message жирным? Как установить иконку для нода в JTree? У кого есть инфа по SAX & DOM JTree и окна Кто-то может бин для Forms показать JTree + ImageIcon, Не получается перерисовка икон Canvas => Image, как вырезать из Canvas и превратить.. JList. Добавление элемента. Нужен Пример по XML Совмесная работа JIDEA и JBuilder X Использование смайлов, Захотелось использовать эту возможность JComBobox и его размеры? MDI-приложения на Java, как их делать? Проблема с отрисовкой фрэймов, Проблемы с отрисовкой фрэймом Как установить миним размер в JFrame, установить придел уменьшения Нажатие кнопки JFormattedTextField Как обновить менюшку Найти выражение, три точки после Как создать .exe?, создание Java-Software MouseDragged ???, Nuzna pomosh!!! O4en'!!! как сделать так чтобы Character "\n" не находился, проблема с регами... неправильно происходит редактир-е строки в JTable StatusBar, Как его создавать? FolderChooser в Swing?, Что заюзать? Как скрыть/восстановить столбец в JTable?.., Думаю, можно добавить в FAQ.. Новый исправленный вариант GUI, ("Делаем правильный... глюкнулся") Лаба по яве, Подскажите awt или swing, не появляется label Хоть кто-нибудь покажет пример? Ant, property Курсор мыши Делаем ПРАВИЛЬНЫЙ GUI Из массива на экран, чем? Как Вы относитесь к курящим девушкам? Прежде чем задать вопрос, прочтите это! Документация и книги по Java, Давайте соберём ссылки Совершенно не вьезжаю в вывод данных в JTable работа с фалом БД напрямую зачем нужен вызов Class.forName Реализация подсветки синтаксиса, в редакторе текста Ах этот Random Не могу сделать приложение с нормальным окном проблема с удалением строки из модели таблицы, при сортировке строка неудаляется помогите с YOURKIT Как нарисовать графики?, Как зделать чтобы стрелочка не маргала Что-то никак... CheckBox == Hashtable ComboBox, прошлый getSelectItem(); как использовать LookAndFeel из IntellJIDEA событие вставки текста Ищу библиотеку Как узнать какой процесс запустил java приложение jButton.setEnabled(false), продолжает обрабатывать нажатие мышой. Hashtable, получение списка Как повернуть JPanel? Eltima Visual Java/SWING Library java webstart, как изменить заголовок окна JTable + JComboBox, вывод таблицы при выборе в КомбоБоксе Нарды, надо картинки двигать по картинке Cut/Copy/Paste, вопрос JFreeReports ошибка при исп. функции проблеммы с Combobox'ом помогите плиз с regex (чегото я непоимаю) row для JTable, Не получается вставить!!! как сделать круговую диаграмму полупрозрачной и совсем маленький и простенький вопросик...:) JCalendar в JCombobox |
Платные хостинги Раскрутка сайта Книги по программированию проблема с удалением строки из модели таблицы, при сортировке строка неудаляется
- Уделить плиз немного своего времени, а то зашел в тупик. Проблема при удалении строки из модели данных для таблицы tablePrihod,Строка нормально удаляется если несортировать(хотя если удалить а потом отсортировать то тоже ошибка), а при сортировке вылетает ошибкаКод Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 3 at java.util.Vector.elementAt(Vector.java:432) at mobiltrade.MobilTableModel.getValueAt(MobilTableModel.java:106) at mobiltrade.SorterTableModel.getValueAt(SorterTableModel.java:26)highlightSyntax('javaMjYzZj','java');Это модель для таблицы tablePrihod:Код public class MobilTableModel extends AbstractTableModel { int columnCount; ResultSetMetaData rsMetaData; String[] columnName; Object[] row; Vector rows = new Vector(); Connection conn; ResultSet rs; public MobilTableModel(Connection conn, ResultSet rs) { try { this.conn = conn; this.rs = rs; rsMetaData = rs.getMetaData(); columnCount = rsMetaData.getColumnCount(); columnName = new String[columnCount]; for (int i = 1; i < columnCount + 1; i++) { columnName[i - 1] = rsMetaData.getColumnName(i).trim(); } while (rs.next()) { row = new Object[columnCount]; for (int y = 1; y < columnCount + 1; y++) { row[y - 1] = rs.getString(y); } rows.addElement(row); } } catch (SQLException sqle2) { } catch (NullPointerException npe) { } } public int getRowCount() { return rows.size(); } public int getColumnCount() { return columnCount; } public String getColumnName(int column) { return (columnName[column]); } public Object[] getRow(int index) { return ((Object[]) rows.elementAt(index)); } public Object getValueAt(int row, int column) { return ((Object[]) rows.elementAt(row))[column]; } public void removeRow(int row) { rows.removeElementAt(row); rows.setSize(getRowCount()); fireTableRowsDeleted(row, row); }}highlightSyntax('javazMwNTk','java');Это модель сортировки для этой таблицы:Код public class SorterTableModel extends AbstractTableModel { private Row[] rows; private MobilTableModel model; int sortColumn; public SorterTableModel(MobilTableModel m) { model = m; rows = new Row[model.getRowCount()]; for (int i = 0; i < rows.length; i++) { rows[i] = new Row(); rows[i].index = i; } } public void sort(int c) { sortColumn = c; Arrays.sort(rows); } public Object getValueAt(int r, int c) { return model.getValueAt(rows[r].index, c); } public boolean isCellEditable(int r, int c) { return model.isCellEditable(rows[r].index, c); } public void setValueAt(Object aValue, int r, int c) { model.setValueAt(aValue, rows[r].index, c); } public int getRowCount() { return model.getRowCount(); } public int getColumnCount() { return model.getColumnCount(); } public String getColumnName(int c) { return model.getColumnName(c); } private class Row implements Comparable { public int index; public int compareTo(Object other) { Row otherRow = (Row) other; Object a = model.getValueAt(index, sortColumn); Object b = model.getValueAt(otherRow.index, sortColumn); if (a instanceof Comparable) { return ((Comparable) a).compareTo(b); } else { return a.toString().compareTo(b.toString()); } } } public void removeRow(int r) { model.removeRow(rows[r].index); fireTableRowsDeleted(rows[r].index, rows[r].index); }}highlightSyntax('javaMyNmZh','java');Тут при двойном клике по названию столбца сортируетсяКод mobileTableModel = new MobilTableModel(conn, rs);sorterTableModel = new SorterTableModel(mobileTableModel);tablePrihod.getTableHeader().addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent event) { if (event.getClickCount() < 2) return; int tableColumn = tablePrihod.columnAtPoint(event.getPoint()); int modelColumn = tablePrihod.convertColumnIndexToModel(tableColumn); sorterTableModel.sort(modelColumn); }; }); tablePrihod.setModel(sorterTableModel);highlightSyntax('java4YzQ3N','java'); - А в какой строке брошен иксепшн? - Да там же индекс вываливаливается - очень похоже, что в обработчике индекс столбца левый какой-то. - Да я понимаю, но не хочется тратить время на угадывание, когдa автор мог бы указать где же эти строки 106 и 26. - Но на первый взгляд все достаточно нормально. Но я бы проверил значения row и column - просто напечатал бы. И все стало бы ясно. - Код public Object getValueAt(int row, int column) {106: return ((Object[]) rows.elementAt(row))[column]; } public void setValueAt(Object aValue, int r, int c) { 26: model.setValueAt(aValue, rows[r].index, c); }highlightSyntax('java3MjlkM','java');Нет? В стеке ошибок можно и по именам функций ориентироваться - А случайно нe Код public Object getValueAt(int r, int c) {26: return model.getValueAt(rows[r].index, c); }highlightSyntax('javaQ4MDVi','java');Нет, товарищи, давайтe уважать других людей и нe загадывать загадки. Здесь всe понятнo, нo былo бy немного быстрее с указаниem строк. Добавлено @ 18:43 Можно попробовать добавить Код if (event.getClickCount() < 2) return;int tableColumn = tablePrihod.columnAtPoint(event.getPoint());if (tableColumn == -1) // <----return; // <-----//...highlightSyntax('javaiNWI3N','java');может простo клик не там где надо был? - Код public class SorterTableModel extends AbstractTableModel { private Row[] rows;highlightSyntax('javaMmIxMj','java'); что-то не видно удаления из rows в этом классе - А там и нету такого. Это уже в DefaultTableModel появляется только. - Подозрение укрепилось:Имеем массив Rows[] rows в SorterTableModel и массив Vector rows в MobilTableModel.Изначально, до удаления, их размерности равны, скажем, по 6.Вызываем SorterTableModel.removeRow(int r), размер Vector rows становится 5, Rows[] rows остается 6.При сортировке вызываем Arrays.sort(Object[]), который неявно вызывает функцию compareTo внутреннего класса Row для пар объектов из Rows[] rows, в том числе и объект с индексом 6:Код Object a = model.getValueAt(index, sortColumn); Object b = model.getValueAt(otherRow.index, sortColumn);highlightSyntax('javaTVkNDM','java');Но в Vector model.rows ЭТОГО ИНДЕКСА УЖЕ НЕТ Решение: при удалении из Vector rows удалять и из Rows[] rows - Вот эти строки:Код public class MobilTableModel extends AbstractTableModel {......public Object getValueAt(int row, int column) {return ((Object[]) rows.elementAt(row))[column]; //- вот 106 строка}}highlightSyntax('javaU2N2Qw','java');Код public class SorterTableModel extends AbstractTableModel {....public Object getValueAt(int r, int c) {return model.getValueAt(rows[r].index, c); // - вот 26 строка}highlightSyntax('javaWYzM2M','java'); - iqon ты скорее всего прав:Вот переделалКод public void removeRow(int r) { System.out.println("rows.length до "+rows.length); model.removeRow(rows[r].index); rows = new Row[model.getRowCount()]; for (int i = 0; i < rows.length; i++) { rows[i] = new Row(); rows[i].index = i; } System.out.println("rows.length после "+rows.length); System.out.println("rows[r].index "+rows[r].index); fireTableRowsDeleted(rows[r].index, rows[r].index); }highlightSyntax('javaiZjE2O','java');оно удаляет нормально кроме последнегоКод первую строку удаляет нормально----------------------------------------------rows.length до 4rows.length после 3rows[r].index 2----------------------------------------------последнюю неудаляетrows.length до 3rows.length после 2Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 at mobiltrade.SorterTableModel.removeRow(SorterTableModel.java:75) at mobiltrade.MainFrame.buttonDel_actionPerformed(MainFrame.java:442)highlightSyntax('javajZGIyN','java');75 строка: fireTableRowsDeleted(rows[r].index, rows[r].index); - тут ругается - Судя по коду, у тебя не будет удаляться строка с максимальным индексом, а не только последняя.Опять-таки на пальцах - пусть изначально размер массивов = 6.Ты удаляешь элемент 6 в model, создаешь заново Row[] rows на основе model, т.е. размер и rows, и model теперь = 5, но листенерам сообщаешь, что ты удалил 6 элемент (в диапазоне от 6 до 6 )Код fireTableRowsDeleted(rows[r].index, rows[r].index);highlightSyntax('javazZjOGY','java');На самом деле rows[6].index УЖЕ НЕТпоэтому нужно писать типа Код fireTableRowsDeleted(6, 6);highlightSyntax('javaODRmYT','java');илиКод fireTableRowsDeleted(r, r);highlightSyntax('javazVhZTd','java'); |