forked from menault/TD3_DEV51_Qualite_Algo
Compare commits
2 Commits
ba7e16dc64
...
06daa4e478
| Author | SHA1 | Date | |
|---|---|---|---|
| 06daa4e478 | |||
| 35c9fcd873 |
@@ -5,18 +5,17 @@ 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 {
|
|
||||||
@Override protected void paintComponent(Graphics g) {
|
|
||||||
super.paintComponent(g);
|
|
||||||
Graphics2D g2 = (Graphics2D) g;
|
|
||||||
g2.setStroke(new BasicStroke(2f));
|
|
||||||
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) {
|
public static void main(String[] args) {
|
||||||
Fenetre f = new Fenetre();
|
Fenetre f = new Fenetre();
|
||||||
f.setWordDisplay("_ _ _ _ _"); // placeholder
|
f.setWordDisplay("_ _ _ _ _"); // placeholder
|
||||||
f.setDrawPanel(new Dessin()); // dessin
|
f.setOnLetterSubmitted(ch ->
|
||||||
f.setOnLetterSubmitted(ch -> JOptionPane.showMessageDialog(null,"Lettre reçue : " + ch + " (sans logique de jeu)"));
|
JOptionPane.showMessageDialog(null, "Lettre reçue : " + ch + " (sans logique de jeu)")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user