diff --git a/src/main/java/ru/egspt/App.java b/src/main/java/ru/egspt/App.java index 3e01ed6..353af4a 100644 --- a/src/main/java/ru/egspt/App.java +++ b/src/main/java/ru/egspt/App.java @@ -29,8 +29,6 @@ public class App extends JPanel{ mainframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); mainframe.add(this); mainframe.setSize(640, 480); - //mainframe.setLocationByPlatform(true); - //mainframe.pack(); mainframe.setVisible(true); } /** diff --git a/src/main/java/ru/egspt/BaseControls.java b/src/main/java/ru/egspt/BaseControls.java index 328d195..505d819 100644 --- a/src/main/java/ru/egspt/BaseControls.java +++ b/src/main/java/ru/egspt/BaseControls.java @@ -11,12 +11,15 @@ public class BaseControls { String password = String.valueOf(app.getAccessPane().getPassField().getPassword()); app.getBase().getAccess().setPassword(password); app.getBase().connect();//подключиться к базе - app.getData().setUsersFromBase(app.getBase()); - app.getData().getUsersToConsole(app.getData().getUsers()); + //инициация данных из базы + app.getData().setUsers(app.getData().getUsersFromBase(app.getBase())); + app.getData().setQuizes(app.getData().getQuizesFromBase(app.getBase())); + app.getData().setResults(app.getData().getResultsFromBase(app.getBase())); //данные в панель отчетов app.getReportPane().init(); - app.getReportPane().setData(app.getData()); - //app.getReportPane().getPreferredSize(); + app.getReportPane().setUsers(app.getData()); + app.getReportPane().setQuizes(app.getData()); + app.getReportPane().setResults(app.getData()); app.getReportPane().setVisible(true); } diff --git a/src/main/java/ru/egspt/Data.java b/src/main/java/ru/egspt/Data.java index 6efe2f0..2efe86e 100644 --- a/src/main/java/ru/egspt/Data.java +++ b/src/main/java/ru/egspt/Data.java @@ -1,10 +1,11 @@ package ru.egspt; +import java.sql.ResultSet; import java.util.ArrayList; public class Data extends UserListModel { - ArrayList quizes = new ArrayList<>(); - ArrayList results = new ArrayList<>(); + private ArrayList quizes = new ArrayList<>(); + private ArrayList results = new ArrayList<>(); /** * @param quizes the quizes to set @@ -18,6 +19,29 @@ public class Data extends UserListModel { public ArrayList getQuizes() { return quizes; } + /** + * @return полный перечень опросов из базы + */ + public ArrayList getQuizesFromBase(Base base) { + ArrayList q = new ArrayList<>(); + String querry = "SELECT id, name, timelimit FROM mdl_quiz"; + ResultSet rs = base.querry(querry); + try { + while (rs.next()){ + int id = rs.getInt("id"); + String name = rs.getString("name"); + Quiz qu = new Quiz(id, name); + q.add(qu); + } + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + + return q; + } /** * @param results the results to set */ @@ -30,4 +54,29 @@ public class Data extends UserListModel { public ArrayList getResults() { return results; } + /** + * @return полный перечень результатов из базы + */ + public ArrayList getResultsFromBase(Base base) { + ArrayList r = new ArrayList<>(); + String querry = "SELECT id, quiz, userid, grade, timemodified FROM mdl_quiz_grades"; + ResultSet rs = base.querry(querry); + try { + while (rs.next()){ + int id = rs.getInt("id"); + int quizid = rs.getInt("quiz"); + int userid = rs.getInt("userid"); + double grade = rs.getDouble("grade"); + Long time = rs.getLong("timemodified"); + Result result = new Result(id, quizid, userid, grade, time); + r.add(result); + } + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + return r; + } } diff --git a/src/main/java/ru/egspt/QuizesListModel.java b/src/main/java/ru/egspt/QuizesListModel.java deleted file mode 100644 index e9fc63a..0000000 --- a/src/main/java/ru/egspt/QuizesListModel.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.egspt; - -public class QuizesListModel { - -} diff --git a/src/main/java/ru/egspt/QuizesTableModel.java b/src/main/java/ru/egspt/QuizesTableModel.java new file mode 100644 index 0000000..e8d31ca --- /dev/null +++ b/src/main/java/ru/egspt/QuizesTableModel.java @@ -0,0 +1,62 @@ +package ru.egspt; + +import javax.swing.table.AbstractTableModel; + +public class QuizesTableModel extends AbstractTableModel{ + private String[] header = {"id", "name"}; + private Object[][] data; + public QuizesTableModel(Data data){ + setData(data); + } + @Override + public int getRowCount() { + return getData().length; + } + + @Override + public int getColumnCount() { + return getHeader().length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return getData()[rowIndex][columnIndex]; + } + /** + * @return the data + */ + public Object[][] getData() { + return data; + } + /** + * + */ + public void setData(Data data) { + //создаем объект data - инициализация переменной + int row = 0; + row = data.getQuizes().size(); + int col = 2;//по количеству заголовков + this.data = new Object[row][col]; + //заполняем модель данными пользователей + int i = 0; + while (i < data.getQuizes().size()){ + this.data[i][0] = data.getQuizes().get(i).getId(); + this.data[i][1] = data.getQuizes().get(i).getName(); + i++; + this.fireTableDataChanged(); + } + } + /** + * @return the header + */ + public String[] getHeader() { + return header; + } + /** + * @param header the header to set + */ + public void setHeader(String[] header) { + this.header = header; + } + +} diff --git a/src/main/java/ru/egspt/ReportPane.java b/src/main/java/ru/egspt/ReportPane.java index 91abbd0..3dd0e4f 100644 --- a/src/main/java/ru/egspt/ReportPane.java +++ b/src/main/java/ru/egspt/ReportPane.java @@ -9,51 +9,123 @@ import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; +import javax.swing.table.TableColumnModel; public class ReportPane extends JPanel{ private JPanel controlPane = new JPanel();//панель кнопок - пока не надо private JButton generateXLSXButton = new JButton("create xlsx"); private JButton generateTXTButton = new JButton("create txt"); - private JPanel tabPane = new JPanel();//панель таблицы - private JTable table; - private ReportTableModel tableModel; + private JPanel usersPane = new JPanel();//панель пользователей + private JPanel quizesPane = new JPanel();//панель опросов + private JPanel resultsPane = new JPanel();//панель результатов + private JTable usersTable; + private JTable quizesTable; + private JTable resultsTable; + private UsersTableModel usersTableModel; + private QuizesTableModel quizesTableModel; + private ResultsTableModel resultsTableModel; public ReportPane(){} public ReportPane(App app){ - tableModel = new ReportTableModel(app.getData()); - table = new JTable(tableModel); - //table.setTableHeader(tableModel.getHeader()); - //table.setPreferredScrollableViewportSize(new Dimension(500, 70)); - //table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); - //table.setAutoResizeMode(JTable.HEIGHT); - //table.setPreferredScrollableViewportSize(table.getPreferredSize()); - //table.setFillsViewportHeight(true); - //table.getMaximumSize(); - //table.setFillsViewportHeight(true); - JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - //scrollPane.getMaximumSize(); - tabPane.add(scrollPane); - + setupUsersPane(app); + setupQuizesPane(app); + setupResultsPane(app); } - public void init(){ - controlPane.add(generateXLSXButton); - controlPane.add(generateTXTButton); + this.setupControlPane(); this.setLayout(new BorderLayout()); this.add(controlPane, BorderLayout.NORTH); - this.add(tabPane, BorderLayout.CENTER); - tabPane.getMaximumSize(); + this.add(usersPane, BorderLayout.WEST); + this.add(quizesPane, BorderLayout.CENTER); + this.add(resultsPane, BorderLayout.EAST); TitledBorder border = new TitledBorder(new LineBorder(Color.black), "report", TitledBorder.CENTER, TitledBorder.CENTER); this.setBorder(border); this.setVisible(true); } - public void setData(Data data){ - getTableModel().setData(data); + public void setupControlPane(){ + controlPane.add(generateXLSXButton); + controlPane.add(generateTXTButton); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "ControlPane", TitledBorder.CENTER, TitledBorder.CENTER); + controlPane.setBorder(border); + } + /** + * Настройка панели пользователей + */ + public void setupUsersPane(App app){ + usersTableModel = new UsersTableModel(app.getData()); + usersTable = new JTable(usersTableModel); + //настройка заголовков + int i = 0; + while (i < usersTable.getColumnCount()){ + usersTable.getColumnModel().getColumn(i).setHeaderValue(usersTableModel.getHeader()[i]); + i++; + } + JScrollPane scrollPane = new JScrollPane(usersTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + usersPane.setLayout(new BorderLayout()); + usersPane.add(scrollPane); + usersPane.add(new TagPane(app), BorderLayout.NORTH); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Users", TitledBorder.CENTER, TitledBorder.CENTER); + usersPane.setBorder(border); + } + /** + * Настройка панели опросов + */ + public void setupQuizesPane(App app){ + quizesTableModel = new QuizesTableModel(app.getData()); + quizesTable = new JTable(quizesTableModel); + //настройка заголовков + int i = 0; + while (i < quizesTable.getColumnCount()){ + quizesTable.getColumnModel().getColumn(i).setHeaderValue(quizesTableModel.getHeader()[i]); + i++; + } + JScrollPane scrollPane = new JScrollPane(quizesTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + quizesPane.setLayout(new BorderLayout()); + quizesPane.add(scrollPane, BorderLayout.CENTER); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Quizes", TitledBorder.CENTER, TitledBorder.CENTER); + quizesPane.setBorder(border); + } + /** + * Настройка панели результатов + */ + public void setupResultsPane(App app){ + resultsTableModel = new ResultsTableModel(app.getData()); + resultsTable = new JTable(resultsTableModel); + //настройка заголовков + int i = 0; + while (i < resultsTable.getColumnCount()){ + resultsTable.getColumnModel().getColumn(i).setHeaderValue(resultsTableModel.getHeader()[i]); + i++; + } + JScrollPane scrollPane = new JScrollPane(resultsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + resultsPane.setLayout(new BorderLayout()); + resultsPane.add(scrollPane, BorderLayout.CENTER); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "Results", TitledBorder.CENTER, TitledBorder.CENTER); + resultsPane.setBorder(border); + } + public void setQuizes(Data data){ + getQuizesTableModel().setData(data); + } + + public void setUsers(Data data){ + getUsersTableModel().setData(data); + } + public void setResults(Data data){ + getResultsTableModel().setData(data); } /** * @return the tableModel */ - public ReportTableModel getTableModel() { - return tableModel; + public UsersTableModel getUsersTableModel() { + return usersTableModel; + } + /** + * @return the quizesTableModel + */ + public QuizesTableModel getQuizesTableModel() { + return quizesTableModel; + } + public ResultsTableModel getResultsTableModel() { + return resultsTableModel; } } diff --git a/src/main/java/ru/egspt/Result.java b/src/main/java/ru/egspt/Result.java index 2518a9c..f4e636b 100644 --- a/src/main/java/ru/egspt/Result.java +++ b/src/main/java/ru/egspt/Result.java @@ -1,12 +1,20 @@ package ru.egspt; public class Result { - int id; - int quizid; - int userid; - double grade; - Long time; + private int id; + private int quizid; + private int userid; + private double grade; + private Long time; + public Result(){} + public Result(int id, int quizid, int userid, double grade,Long time){ + this.setId(id); + this.setQuizid(quizid); + this.setUserid(userid); + this.setGrade(grade); + this.setTime(time); + } /** * @param id the id to set */ diff --git a/src/main/java/ru/egspt/ResultsListModel.java b/src/main/java/ru/egspt/ResultsListModel.java deleted file mode 100644 index 7e35066..0000000 --- a/src/main/java/ru/egspt/ResultsListModel.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.egspt; - -public class ResultsListModel { - -} diff --git a/src/main/java/ru/egspt/ResultsTableModel.java b/src/main/java/ru/egspt/ResultsTableModel.java new file mode 100644 index 0000000..1b3a8eb --- /dev/null +++ b/src/main/java/ru/egspt/ResultsTableModel.java @@ -0,0 +1,64 @@ +package ru.egspt; + +import javax.swing.table.AbstractTableModel; + +public class ResultsTableModel extends AbstractTableModel{ + private String[] header = {"id", "Quizid", "Userid", "Grade", "Time"}; + private Object[][] data; + public ResultsTableModel(Data data){ + setData(data); + } + @Override + public int getRowCount() { + return getData().length; + } + + @Override + public int getColumnCount() { + return getHeader().length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return getData()[rowIndex][columnIndex]; + } + /** + * @return the data + */ + public Object[][] getData() { + return data; + } + /** + * + */ + public void setData(Data data) { + //создаем объект data - инициализация переменной + int row = 0; + row = data.getResults().size(); + int col = 5;//по количеству заголовков + this.data = new Object[row][col]; + //заполняем модель данными пользователей + int i = 0; + while (i < data.getResults().size()){ + this.data[i][0] = data.getResults().get(i).getId(); + this.data[i][1] = data.getResults().get(i).getQuizid(); + this.data[i][2] = data.getResults().get(i).getUserid(); + this.data[i][3] = data.getResults().get(i).getGrade(); + this.data[i][4] = data.getResults().get(i).getTime(); + i++; + this.fireTableDataChanged(); + } + } + /** + * @return the header + */ + public String[] getHeader() { + return header; + } + /** + * @param header the header to set + */ + public void setHeader(String[] header) { + this.header = header; + } +} diff --git a/src/main/java/ru/egspt/TagControls.java b/src/main/java/ru/egspt/TagControls.java index 3212917..1ca413d 100644 --- a/src/main/java/ru/egspt/TagControls.java +++ b/src/main/java/ru/egspt/TagControls.java @@ -11,8 +11,8 @@ public class TagControls { //Выводим пользователей в отчет Data data = new Data(); data.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); - app.getReportPane().setData(data); - app.getReportPane().getTableModel().fireTableDataChanged(); + app.getReportPane().setUsers(data); + app.getReportPane().getUsersTableModel().fireTableDataChanged(); } //удаляем тег из модели public static void removeTag(App app){ @@ -22,10 +22,10 @@ public class TagControls { app.getTagPane().updateTagArea(app.getTagModel()); //tp.getTagArea().update(tp.getTagArea().getGraphics()); app.getTagPane().getCurrentTagField().setText(""); - //Выводим пользователей в отчет - Data data = new Data(); - data.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); - app.getReportPane().setData(data); - app.getReportPane().getTableModel().fireTableDataChanged(); + //Выводим пользователей в отчет + Data data = new Data(); + data.setUsers(app.getData().getUsersByTag(app.getData().getUsers(), app.getTagModel())); + app.getReportPane().setUsers(data); + app.getReportPane().getUsersTableModel().fireTableDataChanged(); } } diff --git a/src/main/java/ru/egspt/UserListModel.java b/src/main/java/ru/egspt/UserListModel.java index 323bcd5..48c0ed1 100644 --- a/src/main/java/ru/egspt/UserListModel.java +++ b/src/main/java/ru/egspt/UserListModel.java @@ -19,11 +19,12 @@ public class UserListModel { public void setUsers(ArrayList users) { this.users = users; } - //берем список пользователей из базы (сразу после подключения к базе данных) + // устанавливаем список пользователей из базы как текущий public void setUsersFromBase(Base base){ ArrayList us = getUsersFromBase(base); setUsers(us); } + // берем полный список пользователей из базы public ArrayList getUsersFromBase(Base base){ ArrayList us = new ArrayList<>(); String querry = "SELECT id, username, email FROM mdl_user"; diff --git a/src/main/java/ru/egspt/UsersTableModel.java b/src/main/java/ru/egspt/UsersTableModel.java new file mode 100644 index 0000000..7b599ef --- /dev/null +++ b/src/main/java/ru/egspt/UsersTableModel.java @@ -0,0 +1,63 @@ +package ru.egspt; + +import javax.swing.table.AbstractTableModel; + +public class UsersTableModel extends AbstractTableModel{ + private Object[] header = new String[]{"id", "login", "mail"}; + private Object[][] data; + public UsersTableModel(Data data){ + setData(data); + } + @Override + public int getRowCount() { + return getData().length; + } + + @Override + public int getColumnCount() { + return getHeader().length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return getData()[rowIndex][columnIndex]; + } + /** + * @return the data + */ + public Object[][] getData() { + return data; + } + /** + * + */ + public void setData(Data data) { + //создаем объект data - инициализация переменной + int row = 0; + row = data.getUsers().size(); + int col = 3;//по количеству заголовков + this.data = new Object[row][col]; + //заполняем модель данными пользователей + int i = 0; + while (i < data.getUsers().size()){ + this.data[i][0] = data.getUsers().get(i).getId(); + this.data[i][1] = data.getUsers().get(i).getLogin(); + this.data[i][2] = data.getUsers().get(i).getMail(); + i++; + this.fireTableDataChanged(); + } + } + /** + * @return the header + */ + public Object[] getHeader() { + return header; + } + /** + * @param header the header to set + */ + public void setHeader(String[] header) { + this.header = header; + } + +} diff --git a/target/classes/ru/egspt/App.class b/target/classes/ru/egspt/App.class index 7762791..8d92cca 100644 Binary files a/target/classes/ru/egspt/App.class and b/target/classes/ru/egspt/App.class differ diff --git a/target/classes/ru/egspt/BaseControls.class b/target/classes/ru/egspt/BaseControls.class index 4e9a46a..46a6805 100644 Binary files a/target/classes/ru/egspt/BaseControls.class and b/target/classes/ru/egspt/BaseControls.class differ diff --git a/target/classes/ru/egspt/Data.class b/target/classes/ru/egspt/Data.class index 7693bdf..8145cae 100644 Binary files a/target/classes/ru/egspt/Data.class and b/target/classes/ru/egspt/Data.class differ diff --git a/target/classes/ru/egspt/QuizesListModel.class b/target/classes/ru/egspt/QuizesListModel.class deleted file mode 100644 index 669b615..0000000 Binary files a/target/classes/ru/egspt/QuizesListModel.class and /dev/null differ diff --git a/target/classes/ru/egspt/QuizesTableModel.class b/target/classes/ru/egspt/QuizesTableModel.class new file mode 100644 index 0000000..c0f7fb9 Binary files /dev/null and b/target/classes/ru/egspt/QuizesTableModel.class differ diff --git a/target/classes/ru/egspt/ReportPane.class b/target/classes/ru/egspt/ReportPane.class index 05ee446..79880c5 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/Result.class b/target/classes/ru/egspt/Result.class index dd5f8ac..cd80d23 100644 Binary files a/target/classes/ru/egspt/Result.class and b/target/classes/ru/egspt/Result.class differ diff --git a/target/classes/ru/egspt/ResultsListModel.class b/target/classes/ru/egspt/ResultsListModel.class deleted file mode 100644 index 11c0b73..0000000 Binary files a/target/classes/ru/egspt/ResultsListModel.class and /dev/null differ diff --git a/target/classes/ru/egspt/ResultsTableModel.class b/target/classes/ru/egspt/ResultsTableModel.class new file mode 100644 index 0000000..437e3af Binary files /dev/null and b/target/classes/ru/egspt/ResultsTableModel.class differ diff --git a/target/classes/ru/egspt/TagControls.class b/target/classes/ru/egspt/TagControls.class index 0af4d79..1951a62 100644 Binary files a/target/classes/ru/egspt/TagControls.class and b/target/classes/ru/egspt/TagControls.class differ diff --git a/target/classes/ru/egspt/UserListModel.class b/target/classes/ru/egspt/UserListModel.class index 55b0aa8..967ae4c 100644 Binary files a/target/classes/ru/egspt/UserListModel.class and b/target/classes/ru/egspt/UserListModel.class differ diff --git a/target/classes/ru/egspt/UsersTableModel.class b/target/classes/ru/egspt/UsersTableModel.class new file mode 100644 index 0000000..b3df93c Binary files /dev/null and b/target/classes/ru/egspt/UsersTableModel.class differ