From 44482bae780a272182f7ca22082d26f8ef04d5c2 Mon Sep 17 00:00:00 2001 From: Tergel TSAGAAN Date: Mon, 4 Jan 2021 21:50:04 +0100 Subject: [PATCH] Added add/edit/remove projection dialog, agenda adaptation --- src/main/java/GUI/Agenda.java | 48 +++++-- src/main/java/GUI/CompetType.java | 5 + src/main/java/GUI/GUI.form | 5 +- src/main/java/GUI/GUI.java | 53 ++++++-- src/main/java/GUI/ProjectionHandler.form | 125 ++++++++++++++++++ src/main/java/GUI/ProjectionHandler.java | 61 +++++++++ src/main/java/GUI/ProjectionType.java | 5 + .../{MyTableModel.java => TableModel.java} | 15 ++- 8 files changed, 292 insertions(+), 25 deletions(-) create mode 100644 src/main/java/GUI/CompetType.java create mode 100644 src/main/java/GUI/ProjectionHandler.form create mode 100644 src/main/java/GUI/ProjectionHandler.java create mode 100644 src/main/java/GUI/ProjectionType.java rename src/main/java/GUI/{MyTableModel.java => TableModel.java} (66%) diff --git a/src/main/java/GUI/Agenda.java b/src/main/java/GUI/Agenda.java index 230b1df..6dc86ff 100644 --- a/src/main/java/GUI/Agenda.java +++ b/src/main/java/GUI/Agenda.java @@ -1,12 +1,10 @@ package GUI; import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableColumn; +import javax.swing.event.MouseInputAdapter; import javax.swing.table.TableColumnModel; import java.awt.*; -import java.util.ArrayList; +import java.awt.event.MouseEvent; import java.util.Arrays; public class Agenda extends JPanel { @@ -20,8 +18,12 @@ public class Agenda extends JPanel { this.totalDay = totalDay; this.currentPage = currentPage; this.agendaPanel.removeAll(); - System.out.println("lolilol"); int totalPages[] = dayToPage(9); + if (this.currentPage >= totalPages.length) { + this.currentPage = totalPages.length - 1; + } else if (this.currentPage < 0) { + this.currentPage = 0; + } JScrollPane scroll = constructAgenda(totalPages[this.currentPage]); agendaPanel.add(scroll); } @@ -44,25 +46,50 @@ public class Agenda extends JPanel { public int getSize() { return headers.length; } + public Object getElementAt(int index) { return headers[index]; } }; - MyTableModel dm = new MyTableModel(day, currentPage); + TableModel dm = new TableModel(day, currentPage, headers.length); JTable table = new JTable(dm) { @Override - public Dimension getPreferredScrollableViewportSize() { - return new Dimension(super.getPreferredSize().width, getRowHeight()*(getRowCount()-1)-20); + public boolean getScrollableTracksViewportHeight() { + return true; } }; + System.out.println(table.getRowHeight()); table.setCellSelectionEnabled(true); + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setRowHeight(100); + table.addMouseListener(new MouseInputAdapter() { + @Override + public void mousePressed(MouseEvent mouseEvent) { + JTable table = (JTable) mouseEvent.getSource(); + Point point = mouseEvent.getPoint(); + int row = table.getSelectedRow(); + int column = table.getSelectedColumn(); + if (mouseEvent.getClickCount() == 2 && table.getSelectedRow() != -1) { + ProjectionHandler dialog; + if (table.getValueAt(row, column) == "") { + dialog = new ProjectionHandler(ProjectionType.ADD); + } else { + dialog = new ProjectionHandler(ProjectionType.EDIT); + } + dialog.pack(); + dialog.setVisible(true); + } + } + }); + TableColumnModel columnModel = table.getColumnModel(); int columnCount = columnModel.getColumnCount(); for (int i = 0; i < columnCount; i++) { table.getColumnModel().getColumn(i).setPreferredWidth(200); } + + JList rowHeader = new JList(lm); rowHeader.setFixedCellWidth(100); rowHeader.setFixedCellHeight(100); @@ -73,7 +100,12 @@ public class Agenda extends JPanel { scroll.setRowHeaderView(rowHeader); scroll.setBorder(BorderFactory.createEmptyBorder()); scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); + this.agendaPanel.setPreferredSize(new Dimension(this.agendaPanel.getWidth(), headers.length * 100 + 20)); + return scroll; } + public int getCurrentPage() { + return this.currentPage; + } } diff --git a/src/main/java/GUI/CompetType.java b/src/main/java/GUI/CompetType.java new file mode 100644 index 0000000..9b0e1a5 --- /dev/null +++ b/src/main/java/GUI/CompetType.java @@ -0,0 +1,5 @@ +package GUI; + +public enum CompetType { + LM, UCR, HC +} \ No newline at end of file diff --git a/src/main/java/GUI/GUI.form b/src/main/java/GUI/GUI.form index 97b6bb9..0ddae9d 100644 --- a/src/main/java/GUI/GUI.form +++ b/src/main/java/GUI/GUI.form @@ -10,10 +10,7 @@ - - - - + diff --git a/src/main/java/GUI/GUI.java b/src/main/java/GUI/GUI.java index 2634b71..2640c7d 100644 --- a/src/main/java/GUI/GUI.java +++ b/src/main/java/GUI/GUI.java @@ -1,11 +1,6 @@ package GUI; import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.plaf.basic.BasicArrowButton; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.TableModel; -import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -25,10 +20,13 @@ public class GUI extends JFrame implements ActionListener { private JMenuItem menuItemRemoveProj = new JMenuItem("Remove projection"); private int currentPage; String headers[] = {"Matin", "Midi", "Milieu
Après-midi", "Fin
Après-midi", "Soirée"}; + private CompetType currentCompetition = CompetType.LM; + public GUI() { super(); construct(); } + private void renderMenu() { menuBar.add(menuFichier); menuFichier.add(menuItemAddProj); @@ -41,7 +39,7 @@ public class GUI extends JFrame implements ActionListener { this.currentPage = 1; setTitle("Projection Planning"); setContentPane(mainPanel); - setSize(1280,800); + setSize(1280, 800); setLocationRelativeTo(null); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -51,6 +49,12 @@ public class GUI extends JFrame implements ActionListener { System.out.println("agenda"); previousButton.addActionListener(this); nextButton.addActionListener(this); + HCButton.addActionListener(this); + LMButton.addActionListener(this); + UCRButton.addActionListener(this); + menuItemAddProj.addActionListener(this); + menuItemEditProj.addActionListener(this); + menuItemRemoveProj.addActionListener(this); setVisible(true); } @@ -59,15 +63,48 @@ public class GUI extends JFrame implements ActionListener { Object source = e.getSource(); if (source == previousButton) { this.currentPage--; - new Agenda(agendaPanel, headers, 8, this.currentPage); + Agenda agenda = new Agenda(agendaPanel, headers, 8, this.currentPage); + this.currentPage = agenda.getCurrentPage(); this.repaint(); this.revalidate(); } else if (source == nextButton) { this.currentPage++; - new Agenda(agendaPanel, headers, 8, this.currentPage); + Agenda agenda = new Agenda(agendaPanel, headers, 8, this.currentPage); + this.currentPage = agenda.getCurrentPage(); + this.repaint(); this.revalidate(); + } else if (source == LMButton) { + this.headers = new String[]{"Matin", "Midi", "Milieu
Après-midi", "Fin
Après-midi", "Soirée"}; + Agenda agenda = new Agenda(agendaPanel, headers, 8, 0); + currentCompetition = CompetType.LM; + this.repaint(); + this.revalidate(); + } else if (source == HCButton) { + this.headers = new String[]{"Fin
Matinée", "Fin
Après-midi", "Soirée"}; + Agenda agenda = new Agenda(agendaPanel, headers, 8, 0); + currentCompetition = CompetType.HC; + this.repaint(); + this.revalidate(); + } else if (source == UCRButton) { + this.headers = new String[]{"Matin", "Midi", "Milieu
Après-midi", "Fin
Après-midi", "Soirée"}; + Agenda agenda = new Agenda(agendaPanel, headers, 8, 0); + currentCompetition = CompetType.UCR; + this.repaint(); + this.revalidate(); + } else if (source == this.menuItemAddProj) { + ProjectionHandler dialog = new ProjectionHandler(ProjectionType.ADD); + dialog.pack(); + dialog.setVisible(true); + } else if (source == this.menuItemEditProj) { + ProjectionHandler dialog = new ProjectionHandler(ProjectionType.EDIT); + dialog.pack(); + dialog.setVisible(true); + } else if (source == this.menuItemRemoveProj) { + ProjectionHandler dialog = new ProjectionHandler(ProjectionType.REMOVE); + dialog.pack(); + dialog.setVisible(true); } } } diff --git a/src/main/java/GUI/ProjectionHandler.form b/src/main/java/GUI/ProjectionHandler.form new file mode 100644 index 0000000..8f19d6a --- /dev/null +++ b/src/main/java/GUI/ProjectionHandler.form @@ -0,0 +1,125 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/GUI/ProjectionHandler.java b/src/main/java/GUI/ProjectionHandler.java new file mode 100644 index 0000000..8d83116 --- /dev/null +++ b/src/main/java/GUI/ProjectionHandler.java @@ -0,0 +1,61 @@ +package GUI; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +public class ProjectionHandler extends JDialog { + private JPanel contentPane; + private JButton cancelButton; + private JButton confirmButton; + private JComboBox competitionComboBox; + private JComboBox dayComboBox; + private JComboBox slotComboBox; + private JPanel competitionPanel; + private JPanel slotPanel; + private JPanel dayPanel; + private JLabel competitionLabel; + private JLabel slotLabel; + private JLabel dayLabel; + private JPanel filmPanel; + private JLabel filmLabel; + private JComboBox filmComboBox; + private ProjectionType projectionType; + + public ProjectionHandler(ProjectionType projectionType) { + this.projectionType = projectionType; + setContentPane(contentPane); + setModal(true); + setPreferredSize(new Dimension(500, 300)); + handleDialogName(); + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + } + + private void handleDialogName() { + switch (this.projectionType) { + case ADD: { + setTitle("Add projection"); + confirmButton.setText("Add"); + break; + } + case EDIT: { + setTitle("Edit projection"); + confirmButton.setText("Edit"); + break; + } + case REMOVE: { + setTitle("Remove projection"); + confirmButton.setText("remove"); + break; + } + default: + break; + } + } +} diff --git a/src/main/java/GUI/ProjectionType.java b/src/main/java/GUI/ProjectionType.java new file mode 100644 index 0000000..ceccf0f --- /dev/null +++ b/src/main/java/GUI/ProjectionType.java @@ -0,0 +1,5 @@ +package GUI; + +public enum ProjectionType { + ADD, EDIT, REMOVE +} \ No newline at end of file diff --git a/src/main/java/GUI/MyTableModel.java b/src/main/java/GUI/TableModel.java similarity index 66% rename from src/main/java/GUI/MyTableModel.java rename to src/main/java/GUI/TableModel.java index f5a81d9..eda7239 100644 --- a/src/main/java/GUI/MyTableModel.java +++ b/src/main/java/GUI/TableModel.java @@ -3,21 +3,22 @@ package GUI; import javax.swing.table.AbstractTableModel; import java.util.Arrays; -public class MyTableModel extends AbstractTableModel { +public class TableModel extends AbstractTableModel { private String[] columnNames; private Object[][] data; + private int headerSize; private int day; - public MyTableModel(int day, int currentPage) { + + public TableModel(int day, int currentPage, int headerSize) { this.day = day; columnNames = new String[this.day]; data = new Object[5][this.day]; for (int i = 0; i < this.day; i++) { - this.columnNames[i] = "Jour " + ((i+1)+(5*(currentPage))); + this.columnNames[i] = "Jour " + ((i + 1) + (5 * (currentPage))); } - for (int i = 0; i < 5 ; i++) { + for (int i = 0; i < 5; i++) { Arrays.fill(data[i], ""); } - System.out.println(Arrays.toString(this.columnNames)); } @Override public int getRowCount() { @@ -39,4 +40,8 @@ public class MyTableModel extends AbstractTableModel { return data[rowIndex][columnIndex]; } + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + data[rowIndex][columnIndex] = aValue; + } }