From 7a50d0ef19a02d19eae936b5433f5f7b3e7257fc Mon Sep 17 00:00:00 2001 From: Lenny FOULOU Date: Sat, 16 Nov 2024 01:51:41 +0100 Subject: [PATCH] Modification du style --- TestV2/ressources/images/Icone/ExitIcon.png | Bin 0 -> 16441 bytes TestV2/ressources/images/Icone/ExitIcon2.png | Bin 0 -> 15745 bytes .../src/fr/monkhanny/dorfromantik/Main.java | 11 +- .../controller/TutorialController.java | 11 +- .../dorfromantik/gui/SettingsPanel.java | 118 ++++++++++-------- .../dorfromantik/gui/TutorialPanel.java | 92 ++++++++++++-- 6 files changed, 161 insertions(+), 71 deletions(-) create mode 100644 TestV2/ressources/images/Icone/ExitIcon.png create mode 100644 TestV2/ressources/images/Icone/ExitIcon2.png diff --git a/TestV2/ressources/images/Icone/ExitIcon.png b/TestV2/ressources/images/Icone/ExitIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..693b92a880ee1d18f0083af30aa7e2a1286917f2 GIT binary patch literal 16441 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 literal 0 HcmV?d00001 diff --git a/TestV2/src/fr/monkhanny/dorfromantik/Main.java b/TestV2/src/fr/monkhanny/dorfromantik/Main.java index b60f67c..4ecb435 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/Main.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/Main.java @@ -27,6 +27,9 @@ public class Main { * @param args Tableau de String contenant les arguments passé en paramètre au programme */ public static void main(String[] args) { + // Créer la fenêtre des modes de jeu + JFrame gameModeFrame = new JFrame("Choix des modes de jeu - Dorfromantik"); + // Créer la fenêtre du jeu JFrame gameFrame = new JFrame("Jeu - Dorfromantik"); @@ -41,7 +44,7 @@ public class Main { MusicPlayer.playMusic(); MainMenu mainMenu = new MainMenu(); MainMenuResizeController MainMenuResizeController = new MainMenuResizeController(mainMenu); - MainMenuButtonController MainMenuButtonController = new MainMenuButtonController(mainMenu,settingsFrame,howToPlayFrame,gameFrame); + MainMenuButtonController MainMenuButtonController = new MainMenuButtonController(mainMenu,settingsFrame,howToPlayFrame,gameModeFrame); // Fenêtre des paramètres @@ -52,14 +55,16 @@ public class Main { // Fenêtre du tutoriel CloseWindowListener howToPlayWindowListener = new CloseWindowListener(mainMenu, howToPlayFrame); - TutorialController tutorialController = new TutorialController(); + TutorialController tutorialController = new TutorialController(mainMenu, howToPlayFrame); howToPlayFrame.addWindowListener(howToPlayWindowListener); howToPlayFrame.add(tutorialController.getTutorialPanel()); // Fenêtre du choix des modes de jeu + CloseWindowListener gameModeWindowListener = new CloseWindowListener(mainMenu, gameModeFrame); GameModeController gameModeController = new GameModeController(); GameModeSelectionPanel gameModeSelectionPanel = new GameModeSelectionPanel(gameModeController); + gameModeFrame.addWindowListener(gameModeWindowListener); gameModeController.setGameModeSelectionPanel(gameModeSelectionPanel); - gameFrame.add(gameModeSelectionPanel); + gameModeFrame.add(gameModeSelectionPanel); } } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java b/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java index 5cdfd79..0ae71e2 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java @@ -3,6 +3,7 @@ package fr.monkhanny.dorfromantik.controller; import fr.monkhanny.dorfromantik.gui.TutorialPanel; import fr.monkhanny.dorfromantik.gui.Step; import fr.monkhanny.dorfromantik.enums.Images; +import fr.monkhanny.dorfromantik.gui.MainMenu; import javax.swing.*; import java.util.ArrayList; @@ -11,14 +12,20 @@ import java.util.List; public class TutorialController { private TutorialPanel tutorialPanel; - public TutorialController() { + private MainMenu mainMenu; + private JFrame tutorialFrame; + + public TutorialController(MainMenu mainMenu, JFrame tutorialFrame) { + this.mainMenu = mainMenu; + this.tutorialFrame = tutorialFrame; + List steps = new ArrayList<>(); steps.add(new Step("Étape n°1", "Explication de la première étape ici.", Images.TUTORIAL_GIF1.getImagePath())); steps.add(new Step("Étape n°2", "Explication de la deuxième étape ici.", Images.TUTORIAL_GIF2.getImagePath())); steps.add(new Step("Étape n°3", "Explication de la troisième étape ici.", Images.TUTORIAL_GIF3.getImagePath())); steps.add(new Step("Étape n°4", "Explication de la quatrième étape ici.", Images.TUTORIAL_GIF4.getImagePath())); - tutorialPanel = new TutorialPanel(steps); + tutorialPanel = new TutorialPanel(steps, mainMenu, tutorialFrame); } public JPanel getTutorialPanel() { diff --git a/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java b/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java index 3b78b06..c138182 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java @@ -4,6 +4,7 @@ import fr.monkhanny.dorfromantik.Options; import fr.monkhanny.dorfromantik.components.Title; import fr.monkhanny.dorfromantik.listeners.*; import fr.monkhanny.dorfromantik.utils.MusicPlayer; +import fr.monkhanny.dorfromantik.enums.Images; import javax.swing.*; import java.awt.*; @@ -18,9 +19,11 @@ public class SettingsPanel extends JPanel { this.mainMenu = mainMenu; this.settingsFrame = settingsFrame; + setLayout(new BorderLayout()); initializeSettingsFrame(); setupBackground(); - setupMainPanel(); + setupTopPanel(); // Nouveau panneau pour le titre et le bouton de retour + setupMainPanel(); // Configuration du panneau principal pour les sliders et boutons } private void initializeSettingsFrame() { @@ -30,56 +33,47 @@ public class SettingsPanel extends JPanel { private void setupBackground() { JLabel background = new JLabel(new ImageIcon("./ressources/images/MainMenu/backgroundBlured.jpg")); background.setLayout(new GridBagLayout()); - this.setLayout(new BorderLayout()); - this.add(background); + this.add(background, BorderLayout.CENTER); // Déplacer l'ajout du fond au centre + } + + private void setupTopPanel() { + JPanel topPanel = new JPanel(new BorderLayout()); + topPanel.setOpaque(false); + + Title title = new Title("Paramètres", 70, Color.WHITE); + title.setHorizontalAlignment(JLabel.CENTER); + topPanel.add(title, BorderLayout.CENTER); + + JButton returnButton = createReturnButtonWithIcon(); + JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + leftPanel.setOpaque(false); + leftPanel.add(returnButton); + topPanel.add(leftPanel, BorderLayout.WEST); + + this.add(topPanel, BorderLayout.NORTH); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + ImageIcon backgroundImage = new ImageIcon("./ressources/images/MainMenu/backgroundBlured.jpg"); + g.drawImage(backgroundImage.getImage(), 0, 0, getWidth(), getHeight(), this); } private void setupMainPanel() { - JPanel mainPanel = createMainPanel(); - JLabel title = createTitle(); - - mainPanel.add(title, createGridBagConstraints(0, 0, 2)); - mainPanel.add(Box.createVerticalStrut(30), createGridBagConstraints(0, 1, 1)); - - // Musique Panel - JSlider musicSlider = new JSlider(0, 100, Options.MUSIC_MUTED ? 0 : Options.MUSIC_VOLUME); - JPanel musicPanel = createSoundPanel("Musique", musicSlider, new MusicVolumeChangeListener(musicSlider), new MuteCheckBoxListener("Musique")); - mainPanel.add(musicPanel, createGridBagConstraints(0, 2, 1)); - - mainPanel.add(Box.createVerticalStrut(30), createGridBagConstraints(0, 3, 1)); - - // SFX Panel - JSlider sfxSlider = new JSlider(0, 100, Options.SOUNDS_MUTED ? 0 : Options.SOUNDS_VOLUME); - JPanel sfxPanel = createSoundPanel("SFX", sfxSlider, new SoundsVolumeChangeListener(sfxSlider), new MuteCheckBoxListener("SFX")); - mainPanel.add(sfxPanel, createGridBagConstraints(0, 4, 1)); - - // Close Button - JButton closeButton = createCloseButton(); - mainPanel.add(closeButton, createGridBagConstraints(0, 5, 1)); - - // Add to background - ((JLabel) this.getComponent(0)).add(mainPanel); - } - - private JPanel createMainPanel() { JPanel mainPanel = new JPanel(new GridBagLayout()); mainPanel.setOpaque(false); - return mainPanel; - } - private Title createTitle() { - Title title = new Title("Paramètres", 70, Color.WHITE); - return title; - } + JSlider musicSlider = new JSlider(0, 100, Options.MUSIC_MUTED ? 0 : Options.MUSIC_VOLUME); + JPanel musicPanel = createSoundPanel("Musique", musicSlider, new MusicVolumeChangeListener(musicSlider), new MuteCheckBoxListener("Musique")); + mainPanel.add(musicPanel, createGridBagConstraints(0, 0, 1)); - private GridBagConstraints createGridBagConstraints(int x, int y, int gridWidth) { - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = x; - gbc.gridy = y; - gbc.gridwidth = gridWidth; - gbc.fill = GridBagConstraints.HORIZONTAL; - gbc.insets = new Insets(20, 30, 20, 30); - return gbc; + JSlider sfxSlider = new JSlider(0, 100, Options.SOUNDS_MUTED ? 0 : Options.SOUNDS_VOLUME); + JPanel sfxPanel = createSoundPanel("SFX", sfxSlider, new SoundsVolumeChangeListener(sfxSlider), new MuteCheckBoxListener("SFX")); + mainPanel.add(sfxPanel, createGridBagConstraints(0, 1, 1)); + + mainPanel.add(Box.createVerticalStrut(30), createGridBagConstraints(0, 2, 1)); + this.add(mainPanel, BorderLayout.CENTER); } private JPanel createSoundPanel(String labelText, JSlider volumeSlider, ChangeListener sliderChangeListener, MuteCheckBoxListener muteCheckBoxListener) { @@ -128,15 +122,31 @@ public class SettingsPanel extends JPanel { return sliderPanel; } - private JButton createCloseButton() { - JButton closeButton = new JButton("Retour"); - closeButton.setFont(new Font("Roboto", Font.BOLD, 24)); - closeButton.setForeground(Color.BLACK); - closeButton.setBackground(Color.WHITE); - closeButton.setOpaque(true); - closeButton.setPreferredSize(new Dimension(75, 50)); - closeButton.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - closeButton.addActionListener(new CloseButtonListener(mainMenu, settingsFrame)); - return closeButton; + private GridBagConstraints createGridBagConstraints(int x, int y, int gridWidth) { + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = x; + gbc.gridy = y; + gbc.gridwidth = gridWidth; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.insets = new Insets(20, 30, 20, 30); + return gbc; + } + + + private JButton createReturnButtonWithIcon() { + ImageIcon originalIcon = new ImageIcon(Images.EXIT_ICON.getImagePath()); + + // Redimensionner l'image à la taille du bouton + Image scaledImage = originalIcon.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaledImage); + + JButton returnButton = new JButton(resizedIcon); + returnButton.setPreferredSize(new Dimension(50, 50)); // Ajuster la taille du bouton selon l'icône + returnButton.setContentAreaFilled(false); // Bouton transparent + returnButton.setBorderPainted(false); // Pas de bordure + returnButton.setFocusPainted(false); // Pas de focus + returnButton.addActionListener(new CloseButtonListener(mainMenu, settingsFrame)); + + return returnButton; } } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java b/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java index c1214e9..66b2eb1 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java @@ -2,6 +2,9 @@ package fr.monkhanny.dorfromantik.gui; import fr.monkhanny.dorfromantik.components.Title; import fr.monkhanny.dorfromantik.gui.Step; +import fr.monkhanny.dorfromantik.listeners.CloseButtonListener; +import fr.monkhanny.dorfromantik.gui.MainMenu; +import fr.monkhanny.dorfromantik.enums.Images; import javax.swing.*; import java.awt.*; @@ -11,16 +14,19 @@ public class TutorialPanel extends JPanel { private List steps; private int currentStepIndex; - private Title title; private JLabel stepText; private JLabel stepImage; private JButton nextButton; private JButton prevButton; + private MainMenu mainMenu; + private JFrame tutorialFrame; - public TutorialPanel(List steps) { + public TutorialPanel(List steps, MainMenu mainMenu, JFrame tutorialFrame) { this.steps = steps; this.currentStepIndex = 0; + this.mainMenu = mainMenu; + this.tutorialFrame = tutorialFrame; // Utiliser BorderLayout pour la disposition principale setLayout(new BorderLayout()); @@ -29,12 +35,25 @@ public class TutorialPanel extends JPanel { title = new Title("Comment jouer ?", 70f, Color.WHITE); title.setHorizontalAlignment(JLabel.CENTER); title.setOpaque(false); - add(title, BorderLayout.NORTH); + + // Panneau contenant le titre et le bouton de retour + JPanel northPanel = new JPanel(new BorderLayout()); + northPanel.setOpaque(false); + northPanel.add(title, BorderLayout.CENTER); + + // Ajouter l'icône de retour à droite du panneau nord + JButton returnButton = createReturnButtonWithIcon(); + JPanel topRightPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + topRightPanel.setOpaque(false); + topRightPanel.add(returnButton); + northPanel.add(topRightPanel, BorderLayout.WEST); + + add(northPanel, BorderLayout.NORTH); // Conteneur principal pour les étapes, centré JPanel centerPanel = new JPanel(); centerPanel.setLayout(new GridBagLayout()); - centerPanel.setOpaque(false); // Rendre le conteneur transparent + centerPanel.setOpaque(false); // Rendre le conteneur transparent // Utiliser GridBagConstraints pour centrer le contenu verticalement GridBagConstraints gbc = new GridBagConstraints(); @@ -46,19 +65,19 @@ public class TutorialPanel extends JPanel { // Conteneur pour le texte et l'image JPanel stepContainer = new JPanel(); stepContainer.setLayout(new BoxLayout(stepContainer, BoxLayout.Y_AXIS)); - stepContainer.setOpaque(false); // Transparent + stepContainer.setOpaque(false); // Transparent stepText = new JLabel(); stepText.setFont(new Font("Arial", Font.BOLD, 28)); stepText.setForeground(Color.WHITE); - stepText.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer le texte horizontalement + stepText.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer le texte horizontalement stepImage = new JLabel(); - stepImage.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer l'image horizontalement + stepImage.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer l'image horizontalement // Ajouter les composants au conteneur d'étapes stepContainer.add(stepText); - stepContainer.add(Box.createVerticalStrut(10)); // Espace entre texte et image + stepContainer.add(Box.createVerticalStrut(10)); // Espace entre texte et image stepContainer.add(stepImage); // Ajouter le conteneur d'étapes au centre du panel @@ -67,13 +86,19 @@ public class TutorialPanel extends JPanel { // Panneau pour les boutons de navigation JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); // Centrer les boutons - buttonPanel.setOpaque(false); // Transparent + buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); // Centrer les boutons + buttonPanel.setOpaque(false); // Transparent prevButton = new JButton("Précédent"); nextButton = new JButton("Suivant"); + + // Personnalisation des boutons + styleButton(prevButton); + styleButton(nextButton); + prevButton.addActionListener(e -> showPreviousStep()); nextButton.addActionListener(e -> showNextStep()); + buttonPanel.add(prevButton); buttonPanel.add(nextButton); @@ -86,12 +111,12 @@ public class TutorialPanel extends JPanel { @Override protected void paintComponent(Graphics g) { - super.paintComponent(g); // Appel à super pour s'assurer que le panneau est dessiné + super.paintComponent(g); // Appel à super pour s'assurer que le panneau est dessiné // Dessin de l'image de fond pour couvrir tout le panneau ImageIcon backgroundImage = new ImageIcon("./ressources/images/MainMenu/backgroundBlured.jpg"); Image image = backgroundImage.getImage(); - g.drawImage(image, 0, 0, getWidth(), getHeight(), this); // Dessiner l'image pour couvrir tout le panneau + g.drawImage(image, 0, 0, getWidth(), getHeight(), this); // Dessiner l'image pour couvrir tout le panneau } private void updateStepDisplay() { @@ -104,6 +129,32 @@ public class TutorialPanel extends JPanel { nextButton.setEnabled(currentStepIndex < steps.size() - 1); } + private void styleButton(JButton button) { + // Police et taille + button.setFont(new Font("Arial", Font.BOLD, 18)); + button.setForeground(Color.WHITE); + + // Taille et forme des boutons + button.setPreferredSize(new Dimension(150, 50)); // Ajuster la taille des boutons + button.setBackground(new Color(34, 34, 34)); // Couleur de fond sombre + button.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2)); // Bordure blanche + + // Effet au survol + button.setRolloverEnabled(true); + button.setContentAreaFilled(true); + button.setFocusPainted(false); // Pas de focus visible + + // Ajout de l'effet de survol + button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseEntered(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(60, 60, 60)); // Couleur plus claire au survol + } + public void mouseExited(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(34, 34, 34)); // Retour à la couleur originale + } + }); + } + private void showPreviousStep() { if (currentStepIndex > 0) { currentStepIndex--; @@ -117,4 +168,21 @@ public class TutorialPanel extends JPanel { updateStepDisplay(); } } + + private JButton createReturnButtonWithIcon() { + ImageIcon originalIcon = new ImageIcon(Images.EXIT_ICON.getImagePath()); + + // Redimensionnement de l'image à la taille du bouton + Image scaledImage = originalIcon.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaledImage); + + JButton returnButton = new JButton(resizedIcon); + returnButton.setPreferredSize(new Dimension(50, 50)); // Ajuste la taille du bouton selon l'icône + returnButton.setContentAreaFilled(false); // Bouton transparent + returnButton.setBorderPainted(false); // Pas de bordure + returnButton.setFocusPainted(false); // Pas de focus + returnButton.addActionListener(new CloseButtonListener(mainMenu, tutorialFrame)); + + return returnButton; + } }