FORUM Tom's Hardware » Programmation » C / C++ / Java » Java - Problème d'affichage au GridBagLayout
 

Java - Problème d'affichage au GridBagLayout

Il y a 335 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Java - Problème d'affichage au GridBagLayout
 
Plus d'informations

Bonjour à tous
 
J'essaie de développer une petite application de jeu et j'ai commencé de manière stratégique par l'éditeur de map. J'essaie donc d'afficher des images de terrain de jeu dans une grille que je gère au GridBagLayout (d'ailleurs j'ai essayé au GridLayout simple, l'affichage est strictement pareil et erroné).  
 
Je met ici les parties de code intéressantes :  
 
Tout d'abord ma classe MapEditor :  
 

Code :
  1. public class MapEditor {
  2.     /**
  3.      * @param args
  4.      */
  5.     public static void main(String[] args) {
  6.         MapEditorFrame frame = new MapEditorFrame();
  7.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  8.         frame.setVisible(true);
  9.     }
  10. }


 
Rien de bien compliqué.
 
Ensuite MapEditorFrame :  
 

Code :
  1. public class MapEditorFrame extends JFrame {
  2.     //Paramètres de taille pour la fenêter
  3.     public static final int DEFAULT_WIDTH = 1024;
  4.     public static final int DEFAULT_HEIGHT = 768;
  5.     //Variables du JMenu
  6.     private JMenuBar menuBar = new JMenuBar();
  7.     private JMenu file = new JMenu("File" );
  8.     private JMenu edit = new JMenu("Edit" );
  9.     private JMenuItem newFile = new JMenuItem("New..." );
  10.     private JMenuItem saveFile = new JMenuItem("Save" );
  11.    
  12.     //Variables de type Panel
  13.     //private JPanel mainPanel = new JPanel();
  14.     private JPanel starPanel = new JPanel();
  15.     private JPanel topButtons = new JPanel();
  16.     private JPanel rightButtons = new JPanel();
  17.    
  18.     //Initialisation du nom de l'image
  19.     private String filename1 = "images/system3.jpg";
  20.    
  21.     //Panels pour les systèmes
  22.     private SystemPanel system1a1 = new SystemPanel(filename1);
  23.     private SystemPanel system2a1 = new SystemPanel(filename1);
  24.     private SystemPanel system3a1 = new SystemPanel(filename1);
  25.     private SystemPanel system1a2 = new SystemPanel(filename1);
  26.     private SystemPanel system2a2 = new SystemPanel(filename1);
  27.     private SystemPanel system3a2 = new SystemPanel(filename1);
  28.     private SystemPanel system1a3 = new SystemPanel(filename1);
  29.     private SystemPanel system2a3 = new SystemPanel(filename1);
  30.     private SystemPanel system3a3 = new SystemPanel(filename1);
  31.     private JLabel label1 = new JLabel("Juste un testa asdfasdfasdf" );
  32.     private JButton b1 = new JButton("test" );
  33.     public MapEditorFrame(){
  34.         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  35.         //Container principal et son layout
  36.         Container mainContainer = this.getContentPane();
  37.         mainContainer.setLayout(new GridBagLayout());
  38.         //Création des GBC pour les éléments à ajouter au panel principal
  39.         mainContainer.add(topButtons, new GBC(1,1,1,1));
  40.         mainContainer.add(starPanel, new GBC(1,2,1,1));
  41.         mainContainer.add(rightButtons, new GBC(2,2,1,1));
  42.         //Mise des couleurs pour les panels en fond
  43.         topButtons.setBackground(Color.RED);
  44.         rightButtons.setBackground(Color.GRAY);
  45.         starPanel.setLayout(new GridBagLayout());
  46.         starPanel.add(system1a1, new GBC(1,1,1,1));
  47.         starPanel.add(system2a1, new GBC(2,1,1,1));
  48.         starPanel.add(system3a1, new GBC(3,1,1,1));
  49.         starPanel.add(system1a2, new GBC(1,2,1,1));
  50.         starPanel.add(system2a2, new GBC(2,2,1,1));
  51.         starPanel.add(system3a2, new GBC(3,2,1,1));
  52.         starPanel.add(system1a3, new GBC(1,3,1,1));
  53.         starPanel.add(system2a3, new GBC(2,3,1,1));
  54.         starPanel.add(system3a3, new GBC(3,3,1,1));
  55.          */
  56.        
  57.     }
  58. }


 
Et finalement mes classes GBC et SystemPanel, la première n'a pas grande importance car elle est plutot... standard je dirais.
 

Code :
  1. class SystemPanel extends JPanel {
  2.     private Image myImage;
  3.     public SystemPanel(String filename){
  4.         try {
  5.             myImage = ImageIO.read(new File(filename));
  6.         }
  7.         catch (IOException e){
  8.             //System.out.println("Impossible de charger l'image : " + filename);
  9.         }
  10.     }
  11.     public void paintComponent(Graphics g){
  12.         super.paintComponent(g);
  13.         if (myImage == null) return;
  14.         g.drawImage(myImage, 0, 0, null);
  15.     }
  16. }


Code :
  1. public class GBC extends GridBagConstraints {
  2.     /**
  3.      * Construit un GBC avec une position gridx et gridy donnée.
  4.      * @param gridx La position gridx
  5.      * @param gridy La position gridy
  6.      */
  7.     public GBC (int gridx, int gridy){
  8.         this.gridx = gridx;
  9.         this.gridy = gridy;
  10.     }
  11.     /**
  12.      * Construit GBC avec gridx, gridy, gridwidth et gridheight donnés.
  13.      * @param gridx La position gridx
  14.      * @param gridy La position gridy
  15.      * @param gridWidth Le nombre de cellules horizontales
  16.      * @param gridHeight Le nombre de cellules verticales
  17.      */
  18.     public GBC (int gridx, int gridy, int gridWidth, int gridHeight){
  19.         this.gridx = gridx;
  20.         this.gridy = gridy;
  21.         this.gridheight = gridHeight;
  22.         this.gridwidth = gridWidth;
  23.     }
  24.     /**
  25.      * Définit le positionnement dans la cellule
  26.      * @param anchor Le positionnement de la cellule
  27.      * @return this Récupération de l'objet en cas de modification future
  28.      */
  29.     public GBC setAnchor (int anchor){
  30.         this.anchor = anchor;
  31.         return this;
  32.     }
  33.     /**
  34.      * Définit si l'objet peut s'étendre dans sa cellule.
  35.      * @param fill La direction dans laquelle peut s'étendre l'objet
  36.      * @return this Récupération de l'objet en cas de modification future
  37.      */
  38.     public GBC setFill (int fill){
  39.         this.fill = fill;
  40.         return this;
  41.     }
  42.     /**
  43.      * Définit le poid de chaque cellule
  44.      * @param weightx Le poid de la ligne de la cellule
  45.      * @param weighty Le poid de la colonne de la cellule
  46.      * @return this Récupération de l'objet en cas de modification future
  47.      */
  48.     public GBC setWeight (double weightx, double weighty){
  49.         this.weightx = weightx;
  50.         this.weighty = weighty;
  51.         return this;
  52.     }
  53.     /**
  54.      * Définit la marge externe
  55.      * @param distance La marge à appliquer aux 4 cotés
  56.      * @return this Récupération de l'objet en cas de modification future
  57.      */
  58.     public GBC setInsets (int distance){
  59.         this.insets = new Insets(distance, distance, distance, distance);
  60.         return this;
  61.     }
  62.     /**
  63.      * Définit la marge externe
  64.      * @param top La marge du haut
  65.      * @param left La marge de gauche
  66.      * @param bottom La marge d'en bas
  67.      * @param right La marge de droite
  68.      * @return this Récupération de l'objet en cas de modification future
  69.      */
  70.     public GBC  setInsets (int top, int left, int bottom, int right){
  71.         this.insets = new Insets(top, left, bottom, right);
  72.         return this;
  73.     }
  74.     /**
  75.      * Définit la marge interne
  76.      * @param ipadx La marge horizontale
  77.      * @param ipady La marge verticale
  78.      * @return this Récupération de l'objet en cas de modification future
  79.      */
  80.     public GBC setIpad (int ipadx, int ipady){
  81.         this.ipadx = ipadx;
  82.         this.ipady = ipady;
  83.         return this;
  84.     }
  85. }


 
Je souhaite avoir quelque chose du genre lorsque je lance mon programme :  
 
http://www.final-fantasy.ch/upload/ee1.jpg
 
Vous l'aurez compris, l'image de base à afficher dans les 3x3 panels est :
 
http://www.final-fantasy.ch/upload/ee2.jpg
 
Au lieu de ça j'obtiens ça :  
 
http://www.final-fantasy.ch/upload/ee3.jpg
 
Il ne faut naturellement pas tenir compte des deux carrés de couleurs, c'est les panels topButtons et rightButtons qui sont vide.
 
En gros, je ne sais pas comment donner une taille minimale à une cellule de gridbaglayout, je pensais que ça se mettrais au moins assez grand pour tout afficher, mais à voir ce n'est pas le cas, seul 10x10 pixels de chaque image sont affichés sur les 25x25pixels.
 
merci d'avance si quelqu'un peut me donner une réponse
 
Salutations
 
Edit : Et pour ceux qui ont reconnut d'ou vient l'image de base, je m'excuse vivement pour ce vol de graphisme, mais cette application est destinée à un but strictement personnel...


Message édité par Lordsephir oth le 04-11-2005 à 23:33:40


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » C / C++ / Java » Java - Problème d'affichage au GridBagLayout
 

Annonces Google
Publicité