Как в массив записать строки из JTable Java?

import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
import java.lang.String;
import java.util.*;
public class Main {
    public static void createPanelUI (Container container) {
        container.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        container.setLayout(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        DefaultTableModel tableModel = new DefaultTableModel();
        JTable table1 = new JTable(tableModel);
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.weightx = 0.5;
        constraints.weighty = 1;
        constraints.gridy = 0 ;
        JLabel label = new JLabel("Введите количество чисел вариационного ряда"); //метка
        constraints.gridy = 0;
        constraints.gridx = 0;
        container.add(label, constraints);
        JTextField textField = new JTextField(); //текстовое поле для ввода числа вариац ряда
        constraints.gridx = 0;
        constraints.gridy = 1;
        container.add(textField, constraints);
        JButton button = new JButton("Добавить таблицу"); //кнопка добавить таблицу
        constraints.gridx = 0;
        constraints.gridy = 2;
        container.add(button, constraints);

`

button.addActionListener(new ActionListener() { //слушатель "добавить таблицу"                                   
@Override                                             
public void actionPerformed(ActionEvent e) {              
int n = 0; //начальная переменная
                       String c = String.valueOf(n);
                              c = textField.getText();
                                 int t = Integer.parseInt(c);      //переменная, которая отвечает за количество столбцов в таблице
        

JFrame frame = new JFrame();          
            tableModel.setColumnCount(t+1);//добавляет t столбцов и +1             
            tableModel.setRowCount(20);
            table1.setRowHeight(30);
            table1.setRowHeight(60, 50); //количество строк и столбцов
            table1.getColumnModel().getColumn(0).setPreferredWidth(700); 
            table1.setSize(new Dimension(10, 10)); //ширина и высота
            table1.setGridColor(Color.BLACK);
            table1.setValueAt("Введите числа для сортировки по возрастанию", 0, 0);
            table1.setValueAt("Введите числа для расчёта моды", 1, 0); //добавление ткста в 1 строку и 1 столбец
            table1.setValueAt("Введите числа для расчёта медианы", 2, 0);
            table1.setValueAt("Введите числа для расчёта среднего арифметического", 3, 0);
            table1.setValueAt("Введите числа для расчёта размаха", 4, 0);
            table1.setValueAt("Введите числа для расчёта среднего линейного отклонения", 5, 0);
            table1.setValueAt("Введите числа для расчёта дисперсии", 6, 0);
            table1.setValueAt("Введите числа для расчёта исправленной дисперсии", 7, 0);
            table1.setValueAt("Введите числа для расчёта среднеквадратического отклонения", 8, 0);
            table1.setValueAt("Введите числа для расчёта оценк среднеквадратического отклонения", 9, 0);
            table1.setValueAt("Введите числа для расчёта коэффициента вариации", 10, 0);
            table1.setValueAt("Введите числа для расчёта линейного коэффициента вариации", 11, 0);
            table1.setValueAt("Введите числа для расчёта коэффициента осцилляции", 12, 0);
            table1.isCellEditable(0, 0);
            table1.setCellSelectionEnabled(true);
            frame.getContentPane().add(table1);
            frame.setSize(700, 500);
            frame.setVisible(true);
            JScrollPane scrollPane =new JScrollPane(table1, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            frame.getContentPane().add(scrollPane);`

У меня есть таблица JТable, которая заполняется пользователем. Она создаётся по нажатию на кнопку, которая находится в окне, где пользователь вводит количество столбцов таблицы(переменная t). В дальнейшем с этой таблицей производятся расчёты. Чтобы проводить расчёты мне нужно записать в массив строку (все строки таблицы). Пробовала вносить и в одномерный массив, и в двумерный.

Возможно нужен цикл и двумерный массив:

    int [][] array = new int[13][t]; // массив который отвечает за строку таблицы
    for (int i=0; i<array.length; i++) {
    for (int j = 0; j<t; j++) {
//код }}

Ответы (1 шт):

Автор решения: Дмитрий Алексеенко
    Map<Integer, List<Object>> map = new HashMap<Integer, List<Object>>();

    for (int i = 0; i < tableModel.getRowCount(); i++) {
        for (int j = 0; j < tableModel.getColumnCount(); j++) {
            List<Object> list = map.get(i);
            if (list == null) {
                list = new ArrayList<>();
                map.put(i, list);
            }
            list.add(tableModel.getValueAt(i, j));
        }
    }

у вас получится некий цикл, где вы идет по количеству строк и колонок и появляется коллекция Map, где ключ это строка, а List это значения колонки.

в итоге мы получим список строк и их значения, но не факт что они буду по порядку поэтом можно заменить на LinkedList

UPD

for (int i = 0; i < tableModel.getColumnCount(); i++) {
            for (int j = 0; j < tableModel.getRowCount(); j++) {
                List<Object> list = map.get(i);
                if (list == null) {
                    list = new ArrayList<>();
                    map.put(i, list);
                }
                list.add(tableModel.getValueAt(i, j));
            }
        }

Делаем тогда в ином порядке и получите колонка - список значений из этой колонки.

UPD

for(Integer key : map.keySet()) {
     List<Object> list = map.get(key);
     for(Object obj : list) {
        
       //и тут у вас происходят какие-то вычисления.
       
     }
}
→ Ссылка