Как в массив записать строки из 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) {
//и тут у вас происходят какие-то вычисления.
}
}