Fenetre fix dessin temp

This commit is contained in:
2025-10-08 14:08:10 +02:00
parent ba7e16dc64
commit 35c9fcd873
8 changed files with 25 additions and 64 deletions
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
+25 -64
View File
@@ -4,19 +4,18 @@ import java.awt.event.*;
import java.util.function.Consumer; import java.util.function.Consumer;
/** /**
* La classe <code>Fenetre</code> gère uniquement l'interface graphique : * La classe <code>Fenetre</code> gère uniquement l'interface graphique :
* - zone de dessin (remplaçable par la classe Dessin) * - zone de dessin (assurée par la classe Dessin)
* - affichage du mot masqué * - affichage du mot masqué
* - saisie d'une lettre (événement remonté via un handler) * - saisie d'une lettre (événement remonté via un handler)
* *
* Aucune logique de jeu (choix/vérification du mot) n'est ici. * Aucune logique de jeu (choix/vérification du mot) n'est ici.
* *
* * @version 0.3 * @version 1.0
* @author Adrien * @author Adrien
* Date : 08-10-25 * Date : 08-10-25
* Licence : * Licence :
*/ */
public class Fenetre { public class Fenetre {
// --- Composants de l'interface (UI only) --- // --- Composants de l'interface (UI only) ---
@@ -24,18 +23,18 @@ public class Fenetre {
private JLabel wordLabel; private JLabel wordLabel;
private JTextField letterInput; private JTextField letterInput;
private JButton sendButton; private JButton sendButton;
private JPanel drawZone; // remplaçable par la classe Dessin private JPanel drawZone; // instance de Dessin
// Handler externe pour la lettre soumise (fourni par la classe Partie / contrôleur) // Handler externe pour la lettre soumise (fourni par la classe Partie / contrôleur)
private Consumer<Character> onLetterSubmitted; private Consumer<Character> onLetterSubmitted;
// --- Constructeur (courte orchestration uniquement) --- // --- Constructeur (orchestration courte) ---
public Fenetre() { public Fenetre() {
setupWindow(); setupWindow();
JPanel root = createRoot(); JPanel root = createRoot();
window.setContentPane(root); window.setContentPane(root);
drawZone = createDrawZone(); drawZone = createDrawZone(); // -> new Dessin()
root.add(drawZone); root.add(drawZone);
wordLabel = createWordLabel(); wordLabel = createWordLabel();
@@ -65,12 +64,9 @@ public class Fenetre {
} }
// --- Sous-composants UI --- // --- Sous-composants UI ---
/** Crée la zone de dessin placeholder (à remplacer par Dessin). */ /** Crée la zone de dessin via la classe Dessin. */
private JPanel createDrawZone() { private JPanel createDrawZone() {
JPanel panel = new PlaceholderDrawPanel(); return new Dessin();
panel.setPreferredSize(new Dimension(600, 350));
panel.setBackground(new Color(245, 245, 245));
return panel;
} }
/** Crée le label d'affichage du mot (placeholder jusqu'à injection par Partie). */ /** Crée le label d'affichage du mot (placeholder jusqu'à injection par Partie). */
@@ -113,38 +109,19 @@ public class Fenetre {
return inputPanel; return inputPanel;
} }
// --- Partie et Dessin --- // --- Partie <-> UI ---
/** Définit le texte du mot affiché (ex: "_ _ A _ _") fourni par la classe Partie. */ /** Définit le texte du mot affiché (ex: "_ _ A _ _") fourni par la classe Partie. */
public void setWordDisplay(String maskedWord) { public void setWordDisplay(String maskedWord) {
wordLabel.setText(maskedWord != null ? maskedWord : ""); wordLabel.setText(maskedWord != null ? maskedWord : "");
} }
/** Définit le panneau de dessin (remplace le placeholder par la classe Dessin). */
public void setDrawPanel(JPanel dessinPanel) {
if (dessinPanel == null) return;
Container parent = drawZone.getParent();
int index = -1;
for (int i = 0; i < parent.getComponentCount(); i++) {
if (parent.getComponent(i) == drawZone) { index = i; break; }
}
if (index != -1) {
parent.remove(index);
drawZone = dessinPanel;
drawZone.setPreferredSize(new Dimension(600, 350));
parent.add(drawZone, index);
parent.revalidate();
parent.repaint();
}
}
/** Définit le handler appelé quand l'utilisateur soumet une lettre. */ /** Définit le handler appelé quand l'utilisateur soumet une lettre. */
public void setOnLetterSubmitted(Consumer<Character> handler) { public void setOnLetterSubmitted(Consumer<Character> handler) {
this.onLetterSubmitted = handler; this.onLetterSubmitted = handler;
} }
// --- Méthodes privées UI --- // --- Méthodes privées UI ---
/** Récupère la lettre et notifie le handler externe (aucune logique de jeu ici). */ /** Récupère la lettre et notifie le handler externe (aucune logique de jeu ici). */
private void submitLetter() { private void submitLetter() {
String text = letterInput.getText().trim().toUpperCase(); String text = letterInput.getText().trim().toUpperCase();
@@ -157,28 +134,12 @@ public class Fenetre {
else JOptionPane.showMessageDialog(window, "Lettre soumise (placeholder) : " + text); else JOptionPane.showMessageDialog(window, "Lettre soumise (placeholder) : " + text);
} }
// --- Placeholder de dessin (pour tester la fenêtre seule) --- // --- Méthode principale de test ---
private static class PlaceholderDrawPanel extends JPanel { public static void main(String[] args) {
@Override protected void paintComponent(Graphics g) { Fenetre f = new Fenetre();
super.paintComponent(g); f.setWordDisplay("_ _ _ _ _"); // placeholder
Graphics2D g2 = (Graphics2D) g; f.setOnLetterSubmitted(ch ->
g2.setStroke(new BasicStroke(2f)); JOptionPane.showMessageDialog(null, "Lettre reçue : " + ch + " (sans logique de jeu)")
g2.drawRect(10, 10, getWidth() - 20, getHeight() - 20); );
g2.setFont(getFont().deriveFont(Font.BOLD, 16f));
String txt = "Zone de dessin (remplacer par Dessin)";
FontMetrics fm = g2.getFontMetrics();
int x = (getWidth() - fm.stringWidth(txt)) / 2;
int y = (getHeight() + fm.getAscent()) / 2;
g2.drawString(txt, x, y);
}
} }
// --- Méthode principale de test : exécuter Fenetre seule (sans Partie/Dessin) ---
public static void main(String[] args) {
Fenetre f = new Fenetre();
f.setWordDisplay("_ _ _ _ _"); // placeholder
f.setDrawPanel(new Dessin()); // dessin
f.setOnLetterSubmitted(ch -> JOptionPane.showMessageDialog(null,"Lettre reçue : " + ch + " (sans logique de jeu)"));
}
} }
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.