integration du responsive dans l'affichage de la grille

This commit is contained in:
ROGER
2025-05-16 16:17:58 +02:00
parent 9896013173
commit 2fec9fc96e
6 changed files with 220 additions and 26 deletions

View File

@@ -1,11 +1,8 @@
package org.Views;
import javax.swing.JPanel;
import javax.swing.*;
import org.Models.Grille;
import org.Models.Jeu;
import org.Models.Ordonnanceur;
import org.Models.PieceCourante;
import org.Models.*;
import java.awt.BorderLayout;
import java.awt.Color;
@@ -25,19 +22,41 @@ public class VueGrille extends JPanel implements Observer, Runnable {
private boolean afficherFenetreFinPartie = false;
private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private double tailleJFrameX = screenSize.getHeight() / 2;
private double tailleJFrameY = screenSize.getHeight();
private int nbLignes;
private int nbColonnes;
private JPanel[][] casesGrille;
//private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
//private double tailleJFrameX = screenSize.getHeight() / 2;
//private double tailleJFrameY = screenSize.getHeight();
public VueGrille(Grille grille, Jeu jeu) {
this.grille = grille;
this.jeu = jeu;
this.nbLignes = grille.getNbLignes();
this.nbColonnes = grille.getNbColonnes();
setLayout(new BorderLayout());
grillePanel = new JPanel(new GridLayout(grille.getNbLignes(), grille.getNbColonnes()));
setSize((int) tailleJFrameX, (int) tailleJFrameY);
System.err.println("taille " + tailleJFrameX + " " + tailleJFrameY);
add(this.grillePanel, BorderLayout.CENTER);
initialiserVueGrille();
grillePanel = new JPanel(new GridLayoutCarre(nbLignes,nbColonnes));
add(grillePanel, BorderLayout.CENTER);
//setSize((int) tailleJFrameX, (int) tailleJFrameY);
//System.err.println("taille " + tailleJFrameX + " " + tailleJFrameY);
//add(this.grillePanel, BorderLayout.CENTER);
//initialiserVueGrille();
casesGrille = new JPanel[nbLignes][nbColonnes];
for (int i = 0; i < nbLignes; i++) {
for (int j = 0; j < nbColonnes; j++) {
JPanel caseG = new JPanel(){
@Override
public Dimension getPreferredSize(){
return super.getPreferredSize();
}
};
caseG.setBackground(Color.WHITE);
caseG.setBorder(BorderFactory.createLineBorder(Color.GRAY));
casesGrille[i][j] = caseG;
grillePanel.add(caseG);
}
}
grille.addObserver(this);
jeu.addObserver(this);
@@ -46,6 +65,30 @@ public class VueGrille extends JPanel implements Observer, Runnable {
ordonnanceur.start();
}
public void resizeCases() {
int largeurPanel = grillePanel.getWidth();
int hauteurPanel = grillePanel.getHeight();
if (largeurPanel==0||hauteurPanel==0) {
return;
}
int taille = Math.min(largeurPanel, hauteurPanel);
grillePanel.setPreferredSize(new Dimension(taille, taille));
grillePanel.setMaximumSize(new Dimension(taille, taille));
grillePanel.setMinimumSize(new Dimension(taille, taille));
grillePanel.setSize(new Dimension(taille, taille));
int tailleCaseX = largeurPanel / nbColonnes;
int tailleCaseY = hauteurPanel / nbLignes;
int tailleCase = Math.min(tailleCaseX, tailleCaseY);
Dimension taillePreferee=new Dimension(tailleCase, tailleCase);
for (int i = 0; i < nbLignes; i++) {
for (int j = 0; j < nbColonnes; j++) {
casesGrille[i][j].setPreferredSize(taillePreferee);
}
}
grillePanel.revalidate();
grillePanel.repaint();
}
private void initialiserVueGrille() {
for (int i = 0; i < grille.getNbLignes(); i++) {
for (int j = 0; j < grille.getNbColonnes(); j++) {
@@ -57,9 +100,9 @@ public class VueGrille extends JPanel implements Observer, Runnable {
}
public synchronized void updateGrille() {
for (int i = 0; i < grille.getNbLignes(); i++) {
for (int j = 0; j < grille.getNbColonnes(); j++) {
JPanel caseG = (JPanel) grillePanel.getComponent(i * grille.getNbColonnes() + j);
for (int i = 0; i < nbLignes; i++) {
for (int j = 0; j < nbColonnes; j++) {
JPanel caseG = casesGrille[i][j];
if (grille.getGrille()[i][j]) {
caseG.setBackground(Color.BLUE);
} else {
@@ -70,9 +113,9 @@ public class VueGrille extends JPanel implements Observer, Runnable {
// dessiner la pièce courante
if (jeu != null) {
PieceCourante piece = this.grille.getPieceCourante();
int posX = this.grille.getPieceCouranteX();
int posY = this.grille.getPieceCouranteY();
PieceCourante piece = grille.getPieceCourante();
int posX = grille.getPieceCouranteX();
int posY = grille.getPieceCouranteY();
boolean[][] motif = piece.getMotif();
for (int i = 0; i < motif.length; i++) {
@@ -83,17 +126,15 @@ public class VueGrille extends JPanel implements Observer, Runnable {
int grilleX = posX + j;
int grilleY = posY + i;
if (grilleY >= 0 && grilleY < grille.getNbLignes() &&
grilleX >= 0 && grilleX < grille.getNbColonnes()) {
JPanel caseG = (JPanel) grillePanel
.getComponent(grilleY * grille.getNbColonnes() + grilleX);
if (grilleY >= 0 && grilleY < nbLignes &&
grilleX >= 0 && grilleX < nbColonnes) {
JPanel caseG = casesGrille[grilleY][grilleX];
caseG.setBackground(Color.RED);
}
}
}
}
}
repaint();
}