Files
archived-L3-racing-game/src/visual/GameView.java

63 lines
2.0 KiB
Java

package visual;
import java.awt.BorderLayout;
import java.awt.GraphicsEnvironment;
import javax.swing.JComponent;
import javax.swing.JFrame;
import model.Game;
/**
* Classe abstraite représentant une vue graphique du jeu.
* Chaque GameView est associée à une fenêtre JFrame et s'inscrit dans
* la liste globale des vues pour permettre des mises à jour centralisées.
*/
public abstract class GameView extends JComponent implements Game.Observer {
/** Fenêtre associée à cette vue */
protected final JFrame frame;
protected final Game game;
/**
* Bloc statique exécuté au chargement de la classe pour vérifier
* si le programme dispose d'un environnement graphique.
*/
static {
if (GraphicsEnvironment.isHeadless()) {
System.err.println("Aucun serveur d'affichage trouvé");
System.exit(1);
}
}
/**
* Construit une nouvelle GameView avec une fenêtre JFrame.
*
* @param title Titre de la fenêtre
* @param width Largeur de la fenêtre
* @param height Hauteur de la fenêtre
* @param x Position horizontale de la fenêtre à l'écran
* @param y Position verticale de la fenêtre à l'écran
*/
protected GameView(Game game, String title, int width, int height, int x, int y) {
this.game = game;
// la fenetre
this.frame = new JFrame(title);
// position fenetre
frame.setLocation(x, y);
// taille fenetre
frame.setSize(width, height);
// bool pour resize la fenetre
frame.setResizable(true);
// le bouton close par defaut
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// acceder a l'interieur de la fenetre
frame.setContentPane(this);
// visibilité de la fenetre
frame.setVisible(true);
// mettre un layout (la disposition des elements de la fenetre)
frame.setLayout(new BorderLayout());
game.addObserver(this);
}
}