honrisse | pilaau a écrit :
Rebonjour,
Je ne souhaitais pas te brancher à nouveau sur mon problème, mais à la lecture d'un post qui ressemblait un peu au mien, je me suis rappelé que je ny étais pas arriver :
Je te propose mon code,
si tu vois quelque chose de notoire, n'hésites pas en me le dire !!!
Code :
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.GridLayout;
- import javax.swing.ImageIcon;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.SwingUtilities;
- public class GridCell extends JPanel {
- public class Main {
- public static void initAndShowGui()
- {
- JFrame f = new JFrame("Chess Game" );
- f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- f.setLayout(new GridLayout(8, 8));
- JPanel[][] gridPanel = new JPanel[8][8];
- for(int i = 0; i<8; i++)
- {
- for(int j = 0; j<8; j++)
- {
- gridPanel[i][j] = new JPanel();
- }
- }
- @Override
- private void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D g2 = (Graphics2D) g;
-
- if(background != null) {
- g2.drawImage(background, 0, 0, getWidth(), getHeight(), this);
- }
- if(image != null) {
- g2.drawImage(image, 80, 80, scaleWidth, scaleHeight, this);
- }
- }
- BufferedImage image = null;
- BufferedImage background = null;
- ImageIcon dameIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Queen-icon.png" );
- ImageIcon dameIconb = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Queenb-icon.png" );
- ImageIcon roiIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-King-icon.png" );
- ImageIcon roiIconb = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Kingb-icon.png" );
- ImageIcon fouIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Bishop-icon.png" );
- ImageIcon fouIconb = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess_Bishopb.png" );
- ImageIcon pionIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Pawn-icon.png" );
- ImageIcon pionIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Pawnb-icon.png" );
- ImageIcon tourIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Rook-icon.png" );
- ImageIcon tourIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Rookb.png" );
- ImageIcon cavalierIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Knight-icon.png" );
- ImageIcon cavalierIcon = new ImageIcon("/Users/agatakozlowska/Documents/INF311/Chess-Knightb-icon.png" );
- gridPanel[0][0].add(new JLabel(tourIcon));
- gridPanel[0][7].add(new JLabel(tourIcon));
- gridPanel[7][0].add(new JLabel(tourIcon));
- gridPanel[7][7].add(new JLabel(tourIcon));
- gridPanel[0][1].add(new JLabel(cavalierIcon));
- gridPanel[0][6].add(new JLabel(cavalierIcon));
- gridPanel[7][1].add(new JLabel(cavalierIcon));
- gridPanel[7][6].add(new JLabel(cavalierIcon));
- gridPanel[0][2].add(new JLabel(fouIcon));
- gridPanel[0][5].add(new JLabel(fouIcon));
- gridPanel[7][2].add(new JLabel(fouIcon));
- gridPanel[7][5].add(new JLabel(fouIcon));
- gridPanel[0][3].add(new JLabel(dameIcon));
- gridPanel[0][4].add(new JLabel(roiIcon));
- gridPanel[7][3].add(new JLabel(dameIcon));
- gridPanel[7][4].add(new JLabel(roiIcon));
- Container c = f.getContentPane();
- for(int i = 0; i<8; i++) {
- for(int j = 0; j<8; j++) {
- c.add(gridPanel[i][j]);
- }
- }
- for(int i = 0; i<8; i++) {
- gridPanel[1][i].add(new JLabel(pionIcon));
- gridPanel[6][i].add(new JLabel(pionIcon));
- }
- f.setMinimumSize(new Dimension(640, 640));
- f.setLocationRelativeTo(null);
- f.setVisible(true);
- }
- public static void main(String[] args) {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- void run() {
- initAndShowGui();
- }
- });
- }}}
|
Peut-être à bientôt, merci !
Pilaau
|
L'agencement des classes n'est pas bon (la classe principale est ici GridCell avec une classe interne Main). Le mieux pour débuter est de garder une classe par fichier.
La méthode statique public static void main(String[] args) est le point d'entrée du programme (s'il y en a plusieurs, Eclipse demande à choisir lequel exécuter), elle ne peut pas être dans une classe interne.
La méthode private void paintComponent(Graphics g) redéfinie le comportement du "dessin" du composant et ne peut pas appartenir à la classe Main mais à GridCell qui hérite ou étend la classe JPanel qui elle-même hérite de la classe JComponent.
Comme on peut le voir ici : http://docs.oracle.com/javase/7/do [...] Panel.html, tout est basé sur le concept d'objet en Java (toutes les classes héritent d'Object, sans exceptions).
Citation :
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
|
J'ai essayé de mettre des commentaires :
Code :
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.net.MalformedURLException;
- import java.net.URL;
- import javax.imageio.ImageIO;
- import javax.swing.BorderFactory;
- import javax.swing.JPanel;
- public class GridCell extends JPanel {
- private BufferedImage image = null;
- private BufferedImage background = null;
- public GridCell(int cellNumber) throws IOException {
- if(cellNumber % 2 == 0) {
- //Case paire
- background = ImageIO.read(new URL("https://upload.wikimedia.org/wikipedia/commons/thumb/3/37/Chess_d45.svg/200px-Chess_d45.svg.png" ));
- } else {
- //Case impaire
- background = ImageIO.read(new URL("https://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Chess_l45.svg/200px-Chess_l45.svg.png" ));
- }
- //Creation de la bordure de la case
- this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
- }
- public void setImageByUrl(String imgUrl) throws MalformedURLException, IOException {
- image = ImageIO.read(new URL(imgUrl));
- }
- public void setImageByFile(String imgPath) throws IOException {
- image = ImageIO.read(new File(imgPath));
- }
- @Override
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D g2 = (Graphics2D) g;
-
- if(background != null) {
- //Dessine le background en position (0,0)
- //de la taille de la case
- g2.drawImage(background, 0, 0, getWidth(), getHeight(), this);
- }
- if(image != null) {
- //Taille fixe des pieces ici
- //Sinon calculer le ratio des pieces
- //en fonction de la taille de la case
- int scaleWidth = 75;
- int scaleHeight = 75;
-
- int width = getWidth() - 1;
- int height = getHeight() - 1;
- //Coordonnee centree de la piece
- int x = (width - scaleWidth) / 2;
- int y = (height - scaleHeight) / 2;
- //Dessine la piece
- g2.drawImage(image, x, y, scaleWidth, scaleHeight, this);
- }
- }
- }
|
Je mets en lien un tutoriel sur Java et les gui : http://jmdoudoux.developpez.com/co [...] /index.php et http://jmdoudoux.developpez.com/co [...] artie2.php
Je ne connais pas Mac OS mais pour Windows, Eclipse est une simple archive à dézipper et il n'y a pas d'installation à faire. Eclipse est vraiment utile pour voir les erreurs de syntaxe, gérer les imports et pour avoir la documentation d'une méthode lorsqu'on laisse le curseur sur le nom d'une méthode du jdk Java par exemple.
Je mets aussi en lien un code qui affiche un jeu d'échec : https://stackoverflow.com/questions [...] -chess-gui en compléments des tutoriels. Message édité par honrisse le 31-05-2014 à 02:00:48
|