ajout des boutons non ergo au menu

This commit is contained in:
2024-11-13 16:48:43 +01:00
parent 5fc7b5f37d
commit 8a27da6bd1
7 changed files with 279 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
package Controller; // Spécifie que cette classe fait partie du package Controller
import Model.MenuModel; // Importer la classe MenuModel
import View.MenuView;
import javax.swing.*;
public class MenuController {
private MenuModel model;
private MenuView view;
public MenuController(MenuModel model, MenuView view) {
this.model = model;
this.view = view;
}
public void run() {
view.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// Initialiser le modèle avec le chemin de l'image
MenuModel model = new MenuModel("../res/fond-ecran.jpg");
// Créer la vue en lui passant l'image de fond
MenuView view = new MenuView(model);
// Démarrer le contrôleur
new MenuController(model, view).run();
}
});
}
}

62
TestV1/src/Makefile Normal file
View File

@@ -0,0 +1,62 @@
### VARIABLES ###
JC = javac
JCFLAGS = -encoding UTF-8 -implicit:none
JVM = java
JVMFLAGS =
# Chemins des dossiers
SRC_CONTROLLER = Controller
SRC_MODEL = Model
SRC_VIEW = View
# Cibles pour chaque fichier .class avec leurs chemins respectifs
CONTROLLER_CLASS = $(SRC_CONTROLLER)/MenuController.class
MODEL_CLASS = $(SRC_MODEL)/MenuModel.class
VIEW_CLASS = $(SRC_VIEW)/MenuView.class
PANEL_CLASS = $(SRC_VIEW)/PanneauImage.class
TITRE_CLASS = $(SRC_VIEW)/TitreView.class
BOUTON_CLASS = $(SRC_VIEW)/BoutonView.class
### REGLES ESSENTIELLES ###
# Règle pour compiler MenuController
$(CONTROLLER_CLASS): $(SRC_CONTROLLER)/MenuController.java $(MODEL_CLASS) $(VIEW_CLASS) $(PANEL_CLASS) $(TITRE_CLASS) $(BOUTON_CLASS)
${JC} ${JCFLAGS} -d . $(SRC_CONTROLLER)/MenuController.java
# Règle pour compiler MenuModel
$(MODEL_CLASS): $(SRC_MODEL)/MenuModel.java
${JC} ${JCFLAGS} -d . $(SRC_MODEL)/MenuModel.java
# Règle pour compiler MenuView
$(VIEW_CLASS): $(SRC_VIEW)/MenuView.java $(PANEL_CLASS) $(TITRE_CLASS) $(BOUTON_CLASS)
${JC} ${JCFLAGS} -d . $(SRC_VIEW)/MenuView.java
# Règle pour compiler PanneauImage
$(PANEL_CLASS): $(SRC_VIEW)/PanneauImage.java
${JC} ${JCFLAGS} -d . $(SRC_VIEW)/PanneauImage.java
# Règle pour compiler TitreView
$(TITRE_CLASS): $(SRC_VIEW)/TitreView.java # Règle pour compiler TitreView
${JC} ${JCFLAGS} -d . $(SRC_VIEW)/TitreView.java
# Règle pour compiler BoutonView
$(TITRE_CLASS): $(SRC_VIEW)/BoutonView.java # Règle pour compiler TitreView
${JC} ${JCFLAGS} -d . $(SRC_VIEW)/BoutonView.java
### REGLES OPTIONNELLES ###
# Règle pour exécuter l'application
run: $(CONTROLLER_CLASS)
${JVM} ${JVMFLAGS} Controller.MenuController
# Règle pour nettoyer les fichiers .class
clean:
-rm -f $(SRC_CONTROLLER)/*.class $(SRC_MODEL)/*.class $(SRC_VIEW)/*.class
# Règle pour tout nettoyer et recompiler
mrproper: clean $(CONTROLLER_CLASS)
### BUTS FACTICES ###
.PHONY: run clean mrproper

View File

@@ -0,0 +1,23 @@
package Model;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class MenuModel {
private Image imageDeFond;
public MenuModel(String imagePath) {
// Charger l'image de fond
try {
imageDeFond = ImageIO.read(new File("../res/fond-ecran.jpg!d"));
} catch (IOException e) {
e.printStackTrace();
}
}
public Image getImageDeFond() {
return imageDeFond;
}
}

View File

@@ -0,0 +1,19 @@
package View;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class BoutonView extends JButton {
public BoutonView(String texte) {
super(texte);
setFont(new Font("Arial", Font.BOLD, 40));
setForeground(Color.WHITE); // Couleur du texte blanc
setFocusPainted(false); // Enlever le focus sur le bouton
setBorderPainted(false); // Enlever la bordure par défaut
setContentAreaFilled(false); // Fond transparent
setOpaque(false); // Ne dessine pas le fond par défaut
}
}

View File

@@ -0,0 +1,51 @@
package View;
import javax.swing.*;
import java.awt.*;
import Model.MenuModel;
public class MenuView extends JFrame {
private PanneauImage panneauImage;
private TitreView titreView;
private BoutonView boutonJouer;
private BoutonView boutonCommentJouer;
private BoutonView boutonQuitter;
public MenuView(MenuModel model) {
setTitle("Dorfromantik");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
panneauImage = new PanneauImage(model.getImageDeFond());
setContentPane(panneauImage);
titreView = new TitreView();
JPanel panelTitre = new JPanel(new FlowLayout(FlowLayout.CENTER));
panelTitre.setOpaque(false);
panelTitre.add(titreView.getTitre());
setLayout(new BorderLayout());
add(panelTitre, BorderLayout.NORTH);
JPanel panelBouton = new JPanel();
panelBouton.setOpaque(false); // Panneau transparent pour ne pas couvrir l'image de fond
panelBouton.setLayout(new BoxLayout(panelBouton, BoxLayout.Y_AXIS)); // Disposition verticale
// Initialisation des boutons
boutonJouer = new BoutonView("Jouer");
boutonCommentJouer = new BoutonView("Comment Jouer ?");
boutonQuitter = new BoutonView("Quitter");
panelBouton.add(boutonJouer);
panelBouton.add(Box.createVerticalStrut(10)); // Espace entre les boutons
panelBouton.add(boutonCommentJouer);
panelBouton.add(Box.createVerticalStrut(10)); // Espace entre les boutons
panelBouton.add(boutonQuitter);
add(panelBouton, BorderLayout.SOUTH);
setVisible(true);
}
}

View File

@@ -0,0 +1,20 @@
package View;
import javax.swing.*;
import java.awt.*;
public class PanneauImage extends JPanel {
private Image imageDeFond;
public PanneauImage(Image image) {
this.imageDeFond = image;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (imageDeFond != null) {
g.drawImage(imageDeFond, 0, 0, getWidth(), getHeight(), this);
}
}
}

View File

@@ -0,0 +1,68 @@
package View;
import javax.swing.*;
import java.awt.*;
public class TitreView {
private ContourLabel titre;
public TitreView() {
// Créer une instance de ContourLabel avec le texte souhaité
titre = new ContourLabel("Dorfromantik");
// Définir la police et les couleurs
titre.setFont(new Font("Algerian", Font.BOLD, 70));
titre.setForeground(Color.WHITE); // Couleur du texte principal
titre.setContourColor(Color.BLACK); // Couleur du contour
titre.setContourThickness(4); // Épaisseur du contour
}
public JLabel getTitre() {
return titre;
}
// Classe interne pour gérer le contour autour du texte
private static class ContourLabel extends JLabel {
private Color contourColor = Color.BLACK;
private int contourThickness = 2;
public ContourLabel(String text) {
super(text);
}
public void setContourColor(Color contourColor) {
this.contourColor = contourColor;
}
public void setContourThickness(int contourThickness) {
this.contourThickness = contourThickness;
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
// Activer l'anti-aliasing
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// Dessiner le contour
g2d.setFont(getFont());
g2d.setColor(contourColor);
g2d.setStroke(new BasicStroke(contourThickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
FontMetrics fm = g2d.getFontMetrics();
int x = 0;
int y = fm.getAscent();
g2d.draw(getTextShape(g2d, getText(), x, y));
// Dessiner le texte principal
g2d.setColor(getForeground());
g2d.fill(getTextShape(g2d, getText(), x, y));
g2d.dispose();
}
private Shape getTextShape(Graphics2D g2d, String text, int x, int y) {
return getFont().createGlyphVector(g2d.getFontRenderContext(), text).getOutline(x, y);
}
}
}