ajout javadoc pour game et gui
This commit is contained in:
@@ -5,19 +5,59 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* Un composant graphique Swing pour afficher un histogramme représentant les scores moyens des groupes.
|
||||
* Chaque barre représente un groupe et est colorée différemment en fonction de s'il est mis en surbrillance.
|
||||
*
|
||||
* Les barres sont ombrées et incluent des labels pour indiquer les scores moyens, ainsi que les noms des groupes.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Moncef STITI
|
||||
*/
|
||||
public class BarChartPanel extends JPanel {
|
||||
|
||||
/** Liste des scores moyens des groupes. */
|
||||
private final List<Integer> groupAverages;
|
||||
|
||||
/** Indice du groupe mis en surbrillance. */
|
||||
private final int highlightedGroup;
|
||||
|
||||
/** Couleur de la barre pour le groupe du joueur. */
|
||||
private static final Color PLAYER_GROUP_COLOR = new Color(204, 0, 0);
|
||||
|
||||
/** Couleur des barres pour les autres groupes. */
|
||||
private static final Color OTHER_GROUP_COLOR = new Color(0, 0, 204);
|
||||
|
||||
/** Couleur de l'ombre projetée par les barres. */
|
||||
private static final Color SHADOW_COLOR = new Color(0, 0, 0, 60);
|
||||
|
||||
/** Couleur du texte affiché sur les barres. */
|
||||
private static final Color TEXT_COLOR = Color.BLACK;
|
||||
|
||||
/** Police pour le label "Score moyen". */
|
||||
private static final Font AVERAGE_FONT = new Font("Arial", Font.ITALIC, 12);
|
||||
|
||||
/** Police pour les labels des groupes. */
|
||||
private static final Font GROUP_LABEL_FONT = new Font("Arial", Font.BOLD, 16);
|
||||
|
||||
/** Police pour afficher les scores des groupes. */
|
||||
private static final Font SCORE_FONT = new Font("Arial", Font.BOLD, 14);
|
||||
|
||||
/** Marge autour de l'histogramme. */
|
||||
private static final int PADDING = 30;
|
||||
|
||||
/** Décalage de l'ombre en pixels. */
|
||||
private static final int SHADOW_OFFSET = 2;
|
||||
|
||||
/**
|
||||
* Construit un nouveau panneau d'histogramme.
|
||||
*
|
||||
* @param groupAverages Liste des scores moyens des groupes.
|
||||
* La taille de cette liste détermine le nombre de barres dans l'histogramme.
|
||||
* @param highlightedGroup Indice du groupe à mettre en surbrillance.
|
||||
* Si cet indice ne correspond à aucun groupe, aucune barre ne sera mise en surbrillance.
|
||||
* @throws NullPointerException si {@code groupAverages} est {@code null}.
|
||||
*/
|
||||
public BarChartPanel(List<Integer> groupAverages, int highlightedGroup) {
|
||||
this.groupAverages = Objects.requireNonNull(groupAverages, "Group averages cannot be null");
|
||||
this.highlightedGroup = highlightedGroup;
|
||||
@@ -28,6 +68,11 @@ public class BarChartPanel extends JPanel {
|
||||
setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dessine le composant graphique, incluant les barres, les labels et les scores.
|
||||
*
|
||||
* @param g Le contexte graphique.
|
||||
*/
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
|
@@ -6,19 +6,49 @@ import fr.monkhanny.dorfromantik.controller.ButtonHoverAnimationListener;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Classe gérant les animations de survol pour les boutons (JButton).
|
||||
* Permet d'effectuer des transitions douces sur les propriétés du bouton, telles que
|
||||
* la couleur du texte et la taille de la police, lors du survol ou du départ de la souris.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Khalid CHENOUNA
|
||||
*/
|
||||
public class ButtonHoverAnimator {
|
||||
|
||||
/** Le bouton pour lequel les animations sont appliquées. */
|
||||
private final JButton button;
|
||||
|
||||
/** La couleur d'origine du texte du bouton. */
|
||||
private final Color originalColor;
|
||||
|
||||
/** La police d'origine du bouton, partagée pour toutes les instances. */
|
||||
private static Font originalFont;
|
||||
|
||||
/** Timer utilisé pour exécuter les animations avec une transition fluide. */
|
||||
private Timer animationTimer;
|
||||
|
||||
|
||||
/**
|
||||
* Constructeur de l'animateur de bouton.
|
||||
* Initialise les propriétés d'origine (couleur, police) et associe l'animation au bouton spécifié.
|
||||
*
|
||||
* @param button Le bouton cible de l'animation.
|
||||
*/
|
||||
public ButtonHoverAnimator(JButton button) {
|
||||
this.button = button;
|
||||
this.originalColor = button.getForeground();
|
||||
ButtonHoverAnimator.originalFont = button.getFont();
|
||||
}
|
||||
|
||||
/**
|
||||
* Lance l'animation de transition sur le bouton, en fonction de l'état du survol.
|
||||
*
|
||||
* @param entering Indique si la souris entre ou quitte le bouton :
|
||||
* <ul>
|
||||
* <li><code>true</code> : la souris entre sur le bouton (animation d'entrée).</li>
|
||||
* <li><code>false</code> : la souris quitte le bouton (animation de sortie).</li>
|
||||
* </ul>
|
||||
*/
|
||||
public void startAnimation(boolean entering) {
|
||||
if (animationTimer != null && animationTimer.isRunning()) {
|
||||
animationTimer.stop();
|
||||
@@ -29,6 +59,13 @@ public class ButtonHoverAnimator {
|
||||
animationTimer.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour la taille de la police originale partagée entre toutes les instances.
|
||||
* Cette méthode est utile pour adapter dynamiquement la police en fonction de
|
||||
* la taille de la fenêtre ou des préférences de l'utilisateur.
|
||||
*
|
||||
* @param newFontSize La nouvelle taille de la police.
|
||||
*/
|
||||
public static void updateOriginalFont(float newFontSize) {
|
||||
originalFont = originalFont.deriveFont(newFontSize);
|
||||
}
|
||||
|
@@ -8,14 +8,32 @@ import javax.swing.*;
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
/**
|
||||
* Représente un panneau contenant les boutons du menu principal du jeu.
|
||||
* Ce panneau dispose d'une disposition verticale et intègre des boutons avec un style personnalisé.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Khalid CHENOUNA
|
||||
*/
|
||||
public class ButtonPanel extends JPanel {
|
||||
|
||||
/** Bouton pour démarrer une nouvelle partie. */
|
||||
private JButton newGameButton;
|
||||
|
||||
/** Bouton pour accéder aux instructions sur comment jouer. */
|
||||
private JButton howToPlayButton;
|
||||
|
||||
/** Bouton pour accéder aux paramètres du jeu. */
|
||||
private JButton settingsButton;
|
||||
|
||||
/** Bouton pour quitter l'application. */
|
||||
private JButton exitButton;
|
||||
|
||||
/**
|
||||
* Constructeur qui initialise le panneau avec des boutons et applique un style personnalisé.
|
||||
*
|
||||
* @param fontSize La taille de police initiale des boutons.
|
||||
*/
|
||||
public ButtonPanel(float fontSize) {
|
||||
// Paramétrage de l'apparence du panneau
|
||||
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
||||
@@ -47,26 +65,58 @@ public class ButtonPanel extends JPanel {
|
||||
MainMenuMouseController gestionSouris = new MainMenuMouseController(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le bouton "Jouer".
|
||||
*
|
||||
* @return Le bouton "Jouer".
|
||||
*/
|
||||
public JButton getNewGameButton() {
|
||||
return newGameButton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le bouton "Comment jouer ?".
|
||||
*
|
||||
* @return Le bouton "Comment jouer ?".
|
||||
*/
|
||||
public JButton getHowToPlayButton() {
|
||||
return howToPlayButton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le bouton "Paramètres".
|
||||
*
|
||||
* @return Le bouton "Paramètres".
|
||||
*/
|
||||
public JButton getSettingsButton() {
|
||||
return settingsButton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le bouton "Quitter".
|
||||
*
|
||||
* @return Le bouton "Quitter".
|
||||
*/
|
||||
public JButton getExitButton() {
|
||||
return exitButton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la liste de tous les boutons contenus dans ce panneau.
|
||||
*
|
||||
* @return Une liste des boutons : "Jouer", "Comment jouer ?", "Paramètres" et "Quitter".
|
||||
*/
|
||||
public List<JButton> getButtons() {
|
||||
return Arrays.asList(newGameButton, howToPlayButton, settingsButton, exitButton);
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour la taille des polices des boutons en fonction de la largeur de la fenêtre.
|
||||
* Cette méthode ajuste dynamiquement la taille des polices pour s'adapter
|
||||
* à différents écrans ou résolutions.
|
||||
*
|
||||
* @param windowWidth La largeur actuelle de la fenêtre.
|
||||
*/
|
||||
public void updateButtonFonts(int windowWidth) {
|
||||
// Mettre à jour la police des boutons avec la taille ajustée
|
||||
float newFontSize = windowWidth / 30f;
|
||||
|
Reference in New Issue
Block a user