powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Добавление строки в JTable и запись в Excel
25 сообщений из 26, страница 1 из 2
Добавление строки в JTable и запись в Excel
    #39618809
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Пишу программу по загрузки данных из таблицы JTable в файл Excel.
На данном этапе при рисовании таблицы возникает такая ошибка:

Exception in thread "main" java.lang.ClassCastException: javax.swing.JTable$1 cannot be cast to javax.swing.table.DefaultTableModel
at toexcelfile.MyTableFrame.drawFrame(MyTableFrame.java:38)
at toexcelfile.ToExcelFile.exportExcel(ToExcelFile.java:32)
at toexcelfile.ToExcelFile.main(ToExcelFile.java:73)

Вот кусок кода, связанный с таблицей:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Object[] headers = {"Имя", "Фамилия", "Телефон"};
      Object[][] data = {{"John", "Smith", "1231231"}};
    JFrame frame = new JFrame("Телефонный справочник");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new FlowLayout());
    frame.setSize(300, 170);
    JTable table = new JTable(data, headers);
    table.setBorder(BorderFactory.createBevelBorder(1));
    JScrollPane scrollPane = new JScrollPane(table);
    table.setPreferredScrollableViewportSize(new Dimension(250, 100));
    frame.add(scrollPane);
    frame.setVisible(true);
    
    DefaultTableModel model = (DefaultTableModel)table.getModel();
    JButton add = new JButton("Добавить");
    add.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
                // Номер выделенной строки
                int idx = table.getSelectedRow();
                // Вставка новой строки после выделенной
                model.insertRow(idx + 1, new String[] {"John1", "Smith1", "12312317"});
        }
        });
    frame.add(add);



Помогите пожалуйста! Как вставить новую строку в таблицу в режиме онлайн?
Можно ли вообще реализовать эту задачу средствами языка Java? Спасибо!
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39618817
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7,

В конструкторе JTable вам нужно передавать не массив данных, а новый экземпляр DefaultTableModel. Потому что сейчас у вас там просто реализация TableModel, которая не является DefaultTableModel.
А ваши данные нужно добавить уже в DefaultTableModel. Тогда вы сможете динамически добавлять строки через методы DefaultTableModel.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39618897
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Я исправила код вот так:
Код: java
1.
2.
DefaultTableModel model = new DefaultTableModel(data, headers);
    JTable table = new JTable(model);


Ошибка ушла.
А почему-то строка не появилась новая и даже кнопка "Добавить" тоже не отобразилась.
Что дальше делать?
Может быть что-то не так вот в этом блоке:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    JButton add = new JButton("Добавить");
    add.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
                // Номер выделенной строки
                int idx = table.getSelectedRow();
                // Вставка новой строки после выделенной
                model.insertRow(idx + 1, new String[] {"John1", "Smith1", "12312317"});
        }
        });
    frame.add(add);
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39618900
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Что дальше делать?

Читать учебники по Swing и осваивать отладчик в IDE.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39618929
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Глобальный ответ. А конкретнее нельзя?
Я уже весь интернет перерыла. В других проектах у меня получается отображать кнопки, а в этом нет почему-то.
И как добавлять новую строку - это вообще возможно в Java делать как бы в онлайн режиме?
Мне скажите, задача решаема?
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39618947
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Глобальный ответ. А конкретнее нельзя?

Какой вопрос, такой и ответ. Конкретные вопросы будут?

helga7Я уже весь интернет перерыла.

А дебаггер есть?

helga7В других проектах у меня получается отображать кнопки, а в этом нет почему-то.

Нам предлагается угадать чем другие проекты отличаются от этого? Они не на Java? Они не на Swing? Они написаны не вами?

helga7И как добавлять новую строку - это вообще возможно в Java делать как бы в онлайн режиме?

Ваш фреймверк для разработки GUI приложений называется Swing, а не Java.
Можно, например, попробовать прочесть документацию к тем классам, которые вы используете
https://docs.oracle.com/javase/7/docs/api/javax/swing/table/DefaultTableModel.html#addRow(java.lang.Object [])
Это лучше чем дергать примеры из интернетов не понимая что они вообще делают.

helga7Мне скажите, задача решаема?
Да. Swing отличный фреймверк, в котором можно всё. Но очень многое только через задницу.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39618964
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Например, я спрашивала: Как вставить новую строку в таблицу в режиме онлайн?
Что я для этого делаю:
Код: java
1.
  model.insertRow(idx + 1, new String[] {"John1", "Smith1", "12312317"});


Почему это не работает?
И второй вопрос: почему вот такая команда
Код: java
1.
frame.add(add);


не добавляет кнопку add на панель?
Спасибо за ссылку - я ее посмотрела. Примеры я разбираю, а не тупо вставляю в код. Так что лучше не судить.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39618977
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Например, я спрашивала: Как вставить новую строку в таблицу в режиме онлайн?

Если страницу промотрать вверх, то можно увидеть что вы спрашивали. Тут вся история она, как бы, сохраняется. Видно кто что спрашивал и кто что отвечал.

helga7Что я для этого делаю:
Код: java
1.
  model.insertRow(idx + 1, new String[] {"John1", "Smith1", "12312317"});


Почему это не работает?

То есть отладчик нам всё ещё не даётся и будем дебажить через форум? Откуда мне знать что у вас в idx? Почему вы не используете метод add(), который более простой? Какое значение имеет поле dataVector у модели после добавления вы тоже не смотрели? Исключения есть?

helga7
Код: java
1.
frame.add(add);


не добавляет кнопку add на панель?

Ответ зависит от версии Java. Но для актуальных версий метод добавляет кнопку. Вот только вы её не видете, патамушта

helga7Спасибо за ссылку - я ее посмотрела. Примеры я разбираю, а не тупо вставляю в код. Так что лучше не судить.
Я говорю что примеров не достаточно. Важно читать документацию. К каждому классу в вашем коде. А так как фреймверк для вас новый, то я бы порекомендовал ещё и официальные туториалы. Они к Swing очень клевые. Многое объясняют.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619300
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Я исправила ошибку, добавив в конце кода вот такой кусок:
Код: java
1.
2.
3.
4.
 JPanel contents = new JPanel();
     contents.add(table);
     contents.add(add);
     frame.setContentPane(contents);


Теперь при нажатии на кнопку срабатывает ActionListener().
Единственное что, теперь у меня шапка таблицы перестала отображаться.
Почему? Интересно.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619305
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Я исправила ошибку, добавив в конце кода вот такой кусок:

Возьмите уже NetBeans WYSIWYG если вам абсолютно не интересно разбираться в LayoutManager-ах.

helga7Единственное что, теперь у меня шапка таблицы перестала отображаться.
Почему? Интересно.
Вы так и не сообщили версию Java. Ну, да, ладно. Это старый баг. Чтобы шапка отображалась, JTable нужно поместить в JScrollPane:

Код: java
1.
contents.add(new JScrollPane(table));
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619313
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Спасибо, я параллельно с Вами разобралась в этой проблеме сама. Сделала тоже самое, добавила прокрутку, а не таблицу.
Меня интересует вопрос, как править таблицу прямо во фрэйме?
Сейчас добавляется строка программным кодом, а хотелось бы напрямую через ввод на таблице.
Возможно ли это? Если да, то как? В интернете ничего нет по этому поводу.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619315
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия NetBeans IDE 8.2.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619319
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Сейчас добавляется строка программным кодом, а хотелось бы напрямую через ввод на таблице.
Возможно ли это? Если да, то как? В интернете ничего нет по этому поводу.
Вы сформулируйте какое точно событие должно произойти чтобы появилась новая строка. Трансформируйте это событие в термины Swing, напишите соответсвующего слушаетеля и вызывайте из него метод add.

Например: если курсор попал на последню строку, нужно добавить следующую. Соответственно вешаем слушателя на выбор строк. Если выбрана последняя строка - добавляем новую. Если выбрана не последняя, то все пустные строки подряд начиная с нижней можно удалять.

Или можно на какую-нибудь кнопку повесить добавление. Insert.

Но у вас почему-то "напрямую через ввод на таблице". Через ввод чего? Данных в ячейку? Нажатия кнопки Enter?
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619320
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Версия NetBeans IDE 8.2.
И WYSIWYG вы не используете потому что... А почему?
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619325
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНо у вас почему-то "напрямую через ввод на таблице". Через ввод чего? Данных в ячейку? Нажатия кнопки Enter?
Я хочу войти в ячейку таблицы и ручками ввести строку, а не программным кодом ее добавлять.
Потом, к примеру, данные этой введенной строки кладутся в какую-нибудь переменную.
Для начала, полагаю, должно появиться пустое поле для ввода это строки. Но как?
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619326
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczИ WYSIWYG вы не используете потому что... А почему?
Просто так получилось. Не принципиально. Я даже не знаю, что такое WYSIWYG. Это чем-то лучше?
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619341
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Просто так получилось. Не принципиально. Я даже не знаю, что такое WYSIWYG. Это чем-то лучше?
Не особо лучше, но так как вам лень разбираться в нюансах, то будет проще:
YouTube Video
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619345
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Я хочу войти в ячейку таблицы и ручками ввести строку, а не программным кодом ее добавлять.

Возможно тут путаница в терминологии так как и String и row это "строка"?
Ввести строку таблицы нельзя. Можно ввести текст в ячейку таблицы, а можно добавить строку (ряд) к таблице.

helga7Потом, к примеру, данные этой введенной строки кладутся в какую-нибудь переменную.

Данные таблицы уже находятся в модели. Когда вы держите одни и те же данные в разных местах, может так получится что данные будут различатся в то время когда вы хотели чтобы они были одинаковыми.

helga7Для начала, полагаю, должно появиться пустое поле для ввода это строки. Но как?
Интуиция подсказывает что вопрос не про "ввод", а про "редактирование"
В туториале поиском по слову edit много нужной информации
https://docs.oracle.com/javase/tutorial/uiswing/components/table.html

С другой стороны, возможно, интуиция меня подводит, потому как DefaultTableModel уже редактируется по-умолчанию.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619408
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz а можно добавить строку (ряд) к таблице.
как это сделать?

Blazkowicz Интуиция подсказывает что вопрос не про "ввод", а про "редактирование"
да, можно так сказать: update или insert строки прямо во фрэйме

Blazkowicz В туториале поиском по слову edit много нужной информации
https://docs.oracle.com/javase/tutorial/uiswing/components/table.html
Спасибо за ссылку, я ее посмотрела внимательно. Не нашла ответа на свой вопрос.
Наверно, лучше какой-нибудь код с примером такого редактирования посмотреть.
Но ничего толкового и похожего в сети не увидела.

BlazkowiczС другой стороны, возможно, интуиция меня подводит, потому как DefaultTableModel уже редактируется по-умолчанию.
Похоже этим классом не обойтись.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619425
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7как это сделать?


Мы ходим по кругу:
Код: java
1.
2.
DefaultTableModel tableModel = ...
tableModel.add(data);



helga7да, можно так сказать: update или insert строки прямо во фрэйме

OMFG. Термины UI вам принципиально не даются? Редактирование данных в ячейках строки это одно, а добавление новой строки это другое. Зачем вы всё в кучу мешаете?

helga7Но ничего толкового и похожего в сети не увидела.

Про добавление\удаление строк
YouTube Video
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619433
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, и, вот, почти то что вам нужно, за исключением типизации данных в таблице, если вы делаете spreadsheet, то вам бин в качестве модели строки не нужен.
https://www.javalobby.org/articles/jtable/
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619482
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Спасибо огромное за ссылки! Начала их изучать.
С ходу пока такой вопрос: какую библиотеку подключать для использования конструктора new AudioRecord() и класса fireTableRowsInserted?
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619487
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7С ходу пока такой вопрос: какую библиотеку подключать для использования конструктора new AudioRecord() и класса fireTableRowsInserted?
Класс AudioRecord приведен там же по ссылке целиком и полностью. Но вам он не нужен, так как вы колонки тоже, вероятно, хотите динамические.

fireTableRowsInserted это не класс а метод. Который описано в документации, которую вы продолжаете игнорировать.
https://docs.oracle.com/javase/7/docs/api/javax/swing/table/AbstractTableModel.html
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619494
helga7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczКласс AudioRecord приведен там же по ссылке целиком и полностью. Но вам он не нужен, так как вы колонки тоже, вероятно, хотите динамические.
Нет, колонки фиксированы.

BlazkowiczfireTableRowsInserted это не класс а метод. Который описано в документации, которую вы продолжаете игнорировать.
https://docs.oracle.com/javase/7/docs/api/javax/swing/table/AbstractTableModel.html
Я уже пробовала подключать javax.swing.table.AbstractTableModel - не работает.
...
Рейтинг: 0 / 0
Добавление строки в JTable и запись в Excel
    #39619501
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
helga7Я уже пробовала подключать javax.swing.table.AbstractTableModel - не работает.
Что именно вы пробовали и как именно не работает известно только вам.
DefaultTableModel является наследником AbstractTableModel. Что можно узнать из документации, если знать что такое наследование.

А ещё если не ленится читать код Swing, то жизнь вообще будет полна приятных открытий:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class DefaultTableModel extends AbstractTableModel implements Serializable {
    ...
    public void addRow(Vector rowData) {
        insertRow(getRowCount(), rowData);
    }
    ...
    public void insertRow(int row, Vector rowData) {
        dataVector.insertElementAt(rowData, row);
        justifyRows(row, row+1);
        fireTableRowsInserted(row, row); //Ой, что тут у нас?
    }
    ...
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Добавление строки в JTable и запись в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]