diff --git a/src/main/java/ru/egspt/ReportPane.java b/src/main/java/ru/egspt/ReportPane.java index 20634eb..d502b45 100644 --- a/src/main/java/ru/egspt/ReportPane.java +++ b/src/main/java/ru/egspt/ReportPane.java @@ -24,8 +24,6 @@ public class ReportPane extends JPanel { public void init(){ this.setLayout(new BorderLayout()); this.add(reportTablePane, BorderLayout.NORTH); - //this.add(reportTextPane, BorderLayout.WEST); - //this.add(reportSettingsPane, BorderLayout.CENTER); TitledBorder border = new TitledBorder(new LineBorder(Color.black), "report", TitledBorder.CENTER, TitledBorder.CENTER); this.setBorder(border); this.setVisible(true); @@ -48,35 +46,9 @@ public class ReportPane extends JPanel { reportTablePane.setBorder(border); reportTablePane.setVisible(true); } - public void setReportData(Data data){ - getReportTableModel().setData(data); - } - public void setReportHeader(Data report){ - //настройка заголовков таблицы - System.out.println("настраиваем отображение заголовков таблицы отчетов ... "); - reportTableModel = new ReportTableModel(report); - System.out.println("reportTableModel.getColumnCount(): " + reportTableModel.getColumnCount()); - System.out.println("reportTableModel.getHeader().length: " + reportTableModel.getHeader().length); - reportTable = new JTable(reportTableModel); - System.out.println("reportTable.getColumnModel().getColumnCount(): " + reportTable.getColumnModel().getColumnCount()); - int j = 0; - while (j < getReportTableModel().getHeader().length){ - getReportTable().getColumnModel().getColumn(j).setHeaderValue(getReportTableModel().getHeader()[j]); - System.out.println(j + " Заголовок модели: " + getReportTableModel().getHeader()[j]); - System.out.println("Заголовок таблицы: " + getReportTable().getColumnName(j)); - j++; - } - //getReportTableModel().fireTableStructureChanged(); - //getReportTableModel().fireTableDataChanged(); - } /** * формирование таблицы с новым отчетом * обработка заголовков таблицы и данных в одном методе, - * замещаем методы: - * setReportHeader() - * setReportData() - * setReportContent() - * * @param report */ public void updateReport(Data report){ @@ -85,36 +57,9 @@ public class ReportPane extends JPanel { setReportTableModel(new ReportTableModel(report)); DefaultTableModel dm = new DefaultTableModel(getReportTableModel().getData(), getReportTableModel().getHeader()); getReportTable().setModel(dm); - - //отображение в таблице отчета по тегу - //System.out.println("отображение в таблице отчета по тегу " + " ... "); - //setReportTable(new JTable(getReportTableModel())); getReportTable().revalidate(); - //отображение заголовков таблицы - /* - int j = 0; - while (j < getReportTableModel().getHeader().length){ - getReportTable().getColumnModel().getColumn(j).setHeaderValue(getReportTableModel().getHeader()[j]); - j++; - } - */ - //getReportTableModel().toConsole(); - putTableToConsole(getReportTable()); getReportTableModel().fireTableDataChanged();//оповещаем об изменении данных getReportTableModel().fireTableStructureChanged();//оповещаем об изменении структуры модели-таблицы!!! - - - - } - public void setReportContent(Data report){ - //устанавливаем заголовки - setReportHeader(report); - //устанавливаем данные - setReportData(report); - getReportTableModel().fireTableStructureChanged();//оповещаем об изменении структуры модели-таблицы!!! - getReportTableModel().fireTableDataChanged();//оповещаем об изменении данных - //getReportTable().repaint(); - } public void setupReportTextPane(){} public void setupReportSettingsPane(){} @@ -142,9 +87,8 @@ public class ReportPane extends JPanel { public JTable getReportTable() { return reportTable; } - public void putTableToConsole(JTable table){ - //Данные таблицы в консоль - //table.getModel(); + //данные таблицы в консоль + public void toConsole(JTable table){ //заголовки int i = 0; while (i < table.getModel().getColumnCount()){ @@ -164,5 +108,4 @@ public class ReportPane extends JPanel { i++; } } - } diff --git a/src/main/java/ru/egspt/ReportTableModel.java b/src/main/java/ru/egspt/ReportTableModel.java index fc999f2..ce7e794 100644 --- a/src/main/java/ru/egspt/ReportTableModel.java +++ b/src/main/java/ru/egspt/ReportTableModel.java @@ -1,9 +1,9 @@ package ru.egspt; +import java.time.LocalTime; import java.util.ArrayList; import javax.swing.table.AbstractTableModel; -import javax.swing.table.DefaultTableModel; public class ReportTableModel extends AbstractTableModel{ private Object[] header; @@ -89,52 +89,78 @@ public class ReportTableModel extends AbstractTableModel{ this.data = data; } /** - * + * добавить проверку соответствия данных поля и заголовка столбца */ public void setData(Data report) { //создаем объект data - инициализация переменной Object[][] d = new Object[report.getUsers().size()][3 + 2*report.getQuizes().size()]; + //формируем строку заголовков + Object[] header = new Object[3 + 2*report.getQuizes().size()]; + int i = 0; + header[i] = "id"; + i++; + header[i] = "login"; + i++; + header[i] = "mail"; + i++; + int j = 0; + while (j < report.getQuizes().size()){ + header[i] = report.getQuizes().get(j).getName(); + i++; + header[i] = "time"; + i++; + j++; + } + //заголовки в консоль + int h = 0; + while (h < header.length){ + System.out.println("header " + h + ": " + header[h]); + h++; + } //построчно заполняем модель отчета данными - int userCurr = 0; + int userCurr = 0;//номер строки в отчете while (userCurr < report.getUsers().size()){ - ArrayList string = new ArrayList<>();//новая строка отчета - //пишем данные пользователя (первые три столбца) - string.add(report.getUsers().get(userCurr).getId()); - string.add(report.getUsers().get(userCurr).getLogin()); - string.add(report.getUsers().get(userCurr).getMail()); - Boolean find = false; - //перебираем остальные заголовки (перечень опросов) - int quizCurr = 0; - while (quizCurr < report.getQuizes().size()){ - if (find == false){ - //перебираем результаты, ищем результаты по текущему опросу - int resultCurr = 0; - while (resultCurr < report.getResults().size()){ - //если текущий результат относится к текущему опросу: + int col = 0;//номер столбца в строке + //заполняем данные пользователя (имя и почту) + d[userCurr][col] = report.getUsers().get(userCurr).getId(); + col++; + d[userCurr][col] = report.getUsers().get(userCurr).getLogin(); + col++; + d[userCurr][col] = report.getUsers().get(userCurr).getMail(); + col++; + //Заполняем результаты тестирвоания пользователя + //Перебираем результаты, получаем результаты текущего пользователя + int resultCurr = 0; + while (resultCurr < report.getResults().size()){ + if (report.getResults().get(resultCurr).getUserid() == report.getUsers().get(userCurr).getId()){ + //если текущий результат относится к текущему пользователю + //взять индекс теста из результата и сопоставить с полями заголовков (определить номер ячейки для формирования записи) + String quizname = ""; + int quizCurr = 0; + while (quizCurr < report.getQuizes().size()){ if (report.getResults().get(resultCurr).getQuizid() == report.getQuizes().get(quizCurr).getId()){ - //если текущий результат относится к текущему пользователю - if (report.getResults().get(resultCurr).getUserid() == report.getUsers().get(userCurr).getId()){ - string.add(report.getResults().get(resultCurr).getGrade()); - string.add(report.getResults().get(resultCurr).getTime()); - find = true; - } + quizname = report.getQuizes().get(quizCurr).getName(); } - resultCurr++; + quizCurr++; } + //поиск индекса ячейки, куда писать результаты + int ihead = 0; + int headerCurr = 0;//номер ячейки в которую писать результаты тестирования (+2) + while (ihead < header.length){ + if (quizname.equals(header[ihead])){ + headerCurr = ihead; + ihead++; + } + ihead++; + } + //формируем ячейку grade + d[userCurr][headerCurr] = report.getResults().get(resultCurr).getGrade(); + //формируем ячейку time + Long time = report.getResults().get(resultCurr).getTime(); + String t = LocalTime.MIN.plusSeconds(time).toString(); + d[userCurr][headerCurr + 1] = t; } - else{ - string.add(" "); - string.add(" "); - find = false; - } - find = false; - quizCurr++; - } - //пишем строку в d - int j = 0; - while (j < string.size()){ - d[userCurr][j] = string.toArray()[j]; - j++; + resultCurr++; } userCurr++; } diff --git a/src/main/java/ru/egspt/TagControls.java b/src/main/java/ru/egspt/TagControls.java index e6de355..4c75a8a 100644 --- a/src/main/java/ru/egspt/TagControls.java +++ b/src/main/java/ru/egspt/TagControls.java @@ -1,7 +1,5 @@ package ru.egspt; -import java.util.ArrayList; - public class TagControls { //добавляем тег в модель public static void addTag(App app){ @@ -19,8 +17,6 @@ public class TagControls { report.setQuizes(app.getData().getQuizesByResults(app.getData().getQuizes(), report.getResults())); //формирование таблицы отчетов app.getReportPane().updateReport(report); - //app.getReportPane().setReportContent(report); - } //удаляем тег из модели public static void removeTag(App app){ diff --git a/target/classes/ru/egspt/ReportPane.class b/target/classes/ru/egspt/ReportPane.class index 092563d..225dfa9 100644 Binary files a/target/classes/ru/egspt/ReportPane.class and b/target/classes/ru/egspt/ReportPane.class differ diff --git a/target/classes/ru/egspt/ReportTableModel.class b/target/classes/ru/egspt/ReportTableModel.class index 59d532e..4b9af58 100644 Binary files a/target/classes/ru/egspt/ReportTableModel.class and b/target/classes/ru/egspt/ReportTableModel.class differ diff --git a/target/classes/ru/egspt/TagControls.class b/target/classes/ru/egspt/TagControls.class index aa297a8..fdbedd6 100644 Binary files a/target/classes/ru/egspt/TagControls.class and b/target/classes/ru/egspt/TagControls.class differ