Как добавить результаты метода в таблицу?
Пишу программку для сравнения типов коллекций. Не могу разобраться с вопросом как время выполнения метода добавить в ячейку таблицы. Суть таблицы следующая: В каждую из типов коллекций применяется вставка элементов (на 100/1000/10 000 элементов), удаление, доступ к элементу и другое. По нажатию кнопки должен происходить расчет и время выполнения заноситься в определенную ячейку таблицы. Как это сделать?
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
public class ComparingTypeOfCollections implements TableModelListener, ActionListener
{
public ComparingTypeOfCollections() {
JFrame jFrame = new JFrame("Comparing types of collections");
MigLayout migLayout = new MigLayout();
//закрытие окна
jFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
// добавление колонок в таблицу
String[] columnNames = new String[]{"Type","Units","Add","Remove","Populate","Contains","Get"};
// Заголовки рядов
Object[][] rowNames = new Object[][]{
{"ArrayList", "sec", 0d,0d,0d,0d,0d},
{"LinkedList","sec",0d,0d,0d,0d,0d},
{"HashSet","sec", 0d,0d,0d,0d,0d},
{"TreeSet","sec",0d,0d,0d,0d,0d}
};
//создание самой таблицы и добавление в нее рядов и столбцов
JTable table = new JTable(rowNames,columnNames);
table.setFillsViewportHeight(true);
//добавление компоновщика для размещения элементов
Box contents = new Box(BoxLayout.Y_AXIS);
//добавление полосы прокрутки к таблице
contents.add(new JScrollPane(table));
//добавление обработчика событий к таблице
table.getModel().addTableModelListener(this);
//установление высоты строк
table.setRowHeight(0,25);
table.setRowHeight(1,25);
table.setRowHeight(2,25);
table.setRowHeight(3,25);
//добавление контента к окну
jFrame.setContentPane(contents);
//установление размера окна
jFrame.setSize(550, 300);
//установление масштабирования, видимости и размещения
jFrame.setResizable(false);
jFrame.setVisible(true);
jFrame.setLocationRelativeTo(null);
//добавление кнопок для рассчета эффективности элементов
JButton button_100 = new JButton("Calculate for 100 elements");
JButton button_1000 = new JButton("Calculate for 1 000 elements");
JButton button_10000 = new JButton("Calculate for 100k elements");
//создание панели для кнопок и добавление кнопок в неё
JPanel buttonPanel = new JPanel(migLayout);
buttonPanel.add(button_100);
buttonPanel.add(button_1000, "wrap");
buttonPanel.add(button_10000, "wrap");
//создание главное панели в которой все будет размещаться. Добавление к ней таблицы и панели с кнопками
JPanel mainPanel = new JPanel();
mainPanel.setLayout( new FlowLayout(FlowLayout.CENTER));
mainPanel.add(table);
mainPanel.add(buttonPanel);
mainPanel.setVisible(true);
JProgressBar progressBar = new JProgressBar();
//добавление панелей к окну
jFrame.add(mainPanel, "wrap");
jFrame.add(progressBar);
jFrame.add(buttonPanel);
button_100.addActionListener(myListener);
}
MyListener myListener = new MyListener();
private long toCollect100Elements(){
ArrayList<Double> list = new ArrayList<>();
long startTime = System.nanoTime();
for (double k = 0; k<100; k++){
double n = k+Math.random();
list.add(n);
}
long endTime = System.nanoTime();
//кусок кода для подсчета времени выполениня программы
return (endTime - startTime);
}
public static void main(String[] args) {
new ComparingTypeOfCollections();
}
@Override
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnNameEvent = model.getColumnName(column);
Object dataEvent = model.getValueAt(row,column);
}
@Override
public void actionPerformed(ActionEvent e) {
}
class MyListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
toCollect100Elements();
System.out.println(toCollect100Elements());
}
}
}
Ответы (2 шт):
Автор решения: azlov
→ Ссылка
long start = System.currentTimeMillis(); // начинаем отсчет до выполнения метода
// вызов метода
long end = System.currentTimeMillis(); // после выполнения
long workTime = end - start; // получаем время работы в миллисекундах
При желаний, посредством математических операций, переводим в секунды, минуты, часы и тд
Автор решения: Delembech
→ Ссылка
Решением будет следующие строки кода:
@Override
public void actionPerformed(ActionEvent e) {
long executionTime = toCollect100Elements();
int rowIndex = 1;
int columnIndex = 2;
table.getModel().setValueAt(executionTime, rowIndex, columnIndex);
}