package Test; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; public class MainMenu extends JFrame { public static final int MENU = 0, ADMIN = 1, PROF = 2, STUDENT = 3; private static final int FULL = 4, WINDOW = 5; private final static Dimension MINIMUM_SIZE = new Dimension(960, 600); private final CardLayout cards = new CardLayout(), adminCards = new CardLayout(), profCards = new CardLayout(), studentCards = new CardLayout(); private final JPanel adminPanel = new JPanel(), profPanel = new JPanel(), studentPanel = new JPanel(); private final Color adminColor = new Color(255, 2, 2); private final Color profColor = new Color(182, 2, 189); private final Color studentColor = new Color(53, 242, 242); private int screenStatus = WINDOW; private int currentView = MENU; private JMenuBar menuBar; private Controller listener; private AdminView av; private ProfView pv; private StudentView sv; private JTable table; private int cardIndex = 0; private String[] viewName = {"Administrateur", "Professeur", "Etudiant"}; private final CustomJButton[] buttonTab = { new CustomJButton(viewName[0]), new CustomJButton(viewName[1]), new CustomJButton(viewName[2]) }; public MainMenu(Controller listener) { super(); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setExtendedState(MAXIMIZED_BOTH); this.setMinimumSize(MINIMUM_SIZE); init(listener); this.setVisible(true); } public MainMenu(Controller listener, int selectedView, int screenStyle) { super(); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setExtendedState(MAXIMIZED_BOTH); this.setMinimumSize(MINIMUM_SIZE); init(listener); changeView(selectedView); setScreenStyle(screenStyle); this.setVisible(true); } private void setScreenStyle(int screenStyle) { if (screenStyle == FULL) { this.setUndecorated(true); this.screenStatus = FULL; } else if (screenStyle == WINDOW) { this.setUndecorated(false); } } private void init(Controller listener) { this.listener = listener; this.av = this.listener.getAdminView(); this.pv = this.listener.getProfView(); this.sv = this.listener.getStudentView(); this.table = this.listener.initTable(); this.setLayout(cards); this.add(firstCard()); this.add(adminPanel); this.add(profPanel); this.add(studentPanel); cards.first(this.getContentPane()); } private void createJMenuBar() { JMenu menu = new JMenu("Menu"), file = new JMenu("File"), edit = new JMenu("Edit"), view = new JMenu("Affichage"); JMenuItem adminMenuItem = new JMenuItem("Vue "+viewName[0]); adminMenuItem.addActionListener((event) -> changeView(1)); JMenuItem profMenuItem = new JMenuItem("Vue "+viewName[1]); profMenuItem.addActionListener((event) -> changeView(2)); JMenuItem studentMenuItem = new JMenuItem("Vue "+viewName[2]); studentMenuItem.addActionListener((event) -> changeView(3)); JMenuItem mainMenuItem = new JMenuItem("Retourner au menu principal"); mainMenuItem.addActionListener(this::backtoMainMenu); JMenuItem fullScreenMenuItem = new JMenuItem("Plein écran"); fullScreenMenuItem.addActionListener(this::setFullScreen); JMenuItem notFullScreenMenuItem = new JMenuItem("Fenêtré"); notFullScreenMenuItem.addActionListener(this::unsetFullScreen); JMenuItem quitMenuItem = new JMenuItem("Quitter"); quitMenuItem.addActionListener((event) -> System.exit(0)); menu.add(adminMenuItem); menu.add(profMenuItem); menu.add(studentMenuItem); menu.add(mainMenuItem); menu.add(quitMenuItem); file.add(new JMenuItem("")); edit.add(new JMenuItem("")); view.add(fullScreenMenuItem); view.add(notFullScreenMenuItem); menuBar.add(menu); menuBar.add(file); menuBar.add(edit); menuBar.add(view); this.setJMenuBar(menuBar); } private void setFullScreen(ActionEvent e) { this.dispose(); this.listener.setMainMenu(new MainMenu(this.listener, this.currentView, FULL)); } private void unsetFullScreen(ActionEvent e) { this.dispose(); this.listener.setMainMenu(new MainMenu(this.listener, this.currentView, WINDOW)); } private void backtoMainMenu(ActionEvent e) { this.setJMenuBar(null); cards.first(this.getContentPane()); } private JPanel cardWithTable(JPanel sidePanel, String origin) { JPanel panel = new JPanel(); JScrollPane scrollPane = new JScrollPane(); panel.setLayout(new GridLayout(1, 2)); if (origin.equals(viewName[0])){ sidePanel.setBackground(adminColor); System.out.println("admin"); } else if (origin.equals(viewName[1])) { sidePanel.setBackground(profColor); System.out.println("prof"); } else { sidePanel.setBackground(studentColor); System.out.println("student"); } panel.add(sidePanel); panel.add(this.table); panel.add(scrollPane); scrollPane.setViewportView(this.table); return panel; } private void changeView(int index) { table = this.listener.initTable(); System.out.println("change view"); if (index == 1) { this.cardIndex = index; this.setTitle(this.viewName[0]); this.adminPanel.setLayout(this.adminCards); this.adminPanel.add(cardWithTable(adminView(), viewName[0])); this.adminCards.next(this.adminPanel); this.menuBar.setBackground(this.adminColor); System.out.println("Admin view"); } else if (index == 2) { this.cardIndex = index; this.setTitle(this.viewName[1]); this.profPanel.setLayout(this.profCards); this.profPanel.add(cardWithTable(profView(), viewName[1])); this.profCards.next(this.profPanel); this.menuBar.setBackground(this.profColor); System.out.println("prof view"); } else if (index == 3){ this.cardIndex = index; this.setTitle(this.viewName[2]); this.studentPanel.setLayout(this.studentCards); this.studentPanel.add(cardWithTable(studentView(), viewName[2])); this.studentCards.next(this.studentPanel); this.menuBar.setBackground(this.studentColor); System.out.println("student view"); } travelThroughCards(index); } public void updateTable(JTable table) { if (cardIndex == 1) { this.table = table; adminPanel.add(cardWithTable(adminView(), viewName[0])); adminCards.next(adminPanel); } else if (cardIndex == 2) { this.table = table; profPanel.add(cardWithTable(profView(), viewName[1])); profCards.next(profPanel); } else { this.table = table; studentPanel.add(cardWithTable(profView(), viewName[2])); studentCards.next(studentPanel); } } private JPanel firstCard() { JPanel mainPanel = new JPanel(), centerPanel = new JPanel(); Dimension buttonDimension = new Dimension(300, 50); mainPanel.setLayout(new BorderLayout()); centerPanel.setLayout(new GridBagLayout()); Insets insets = new Insets(10, 10, 10, 10); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = insets; gbc.gridwidth = 1; gbc.gridx = 0; for (int i = 0; i < buttonTab.length; i++) { gbc.gridy = i; buttonTab[i].setPreferredSize(buttonDimension); buttonTab[i].addActionListener(this::action); centerPanel.add(buttonTab[i], gbc); } mainPanel.add(centerPanel, BorderLayout.CENTER); return mainPanel; } private JPanel adminView() { JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(this.av, BorderLayout.CENTER); return mainPanel; } private JPanel profView() { JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(this.pv, BorderLayout.CENTER); return mainPanel; } private JPanel studentView() { JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(this.sv, BorderLayout.CENTER); return mainPanel; } private void action(ActionEvent e) { JButton origin = (JButton) e.getSource(); if (menuBar == null) { menuBar = new JMenuBar(); createJMenuBar(); } else { this.setJMenuBar(menuBar); } if (origin.getText().equals(viewName[0])) { this.setTitle(viewName[0]); menuBar.setBackground(this.adminColor); adminPanel.setLayout(adminCards); adminPanel.add(cardWithTable(adminView(), viewName[0])); adminCards.next(adminPanel); cardIndex = 1; } else if (origin.getText().equals(viewName[1])) { this.setTitle(viewName[1]); menuBar.setBackground(this.profColor); profPanel.setLayout(profCards); profPanel.add(cardWithTable(profView(), viewName[1])); profCards.next(profPanel); cardIndex = 2; } else { this.setTitle(viewName[2]); menuBar.setBackground(this.studentColor); studentPanel.setLayout(studentCards); studentPanel.add(cardWithTable(studentView(), viewName[2])); studentCards.next(studentPanel); cardIndex = 3; } travelThroughCards(cardIndex); } private void travelThroughCards(int index) { cards.first(this.getContentPane()); for (int i = 0; i < index; i++) { cards.next(this.getContentPane()); } } }