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é).
private JMenuItem newFile = new JMenuItem("New..." );
private JMenuItem saveFile = new JMenuItem("Save" );
//Variables de type Panel
//private JPanel mainPanel = new JPanel();
private JPanel starPanel = new JPanel();
private JPanel topButtons = new JPanel();
private JPanel rightButtons = new JPanel();
//Initialisation du nom de l'image
private String filename1 = "images/system3.jpg";
//Panels pour les systèmes
private SystemPanel system1a1 = new SystemPanel(filename1);
private SystemPanel system2a1 = new SystemPanel(filename1);
private SystemPanel system3a1 = new SystemPanel(filename1);
private SystemPanel system1a2 = new SystemPanel(filename1);
private SystemPanel system2a2 = new SystemPanel(filename1);
private SystemPanel system3a2 = new SystemPanel(filename1);
private SystemPanel system1a3 = new SystemPanel(filename1);
private SystemPanel system2a3 = new SystemPanel(filename1);
private SystemPanel system3a3 = new SystemPanel(filename1);
private JLabel label1 = new JLabel("Juste un testa asdfasdfasdf" );
private JButton b1 = new JButton("test" );
public MapEditorFrame(){
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
//Container principal et son layout
Container mainContainer = this.getContentPane();
mainContainer.setLayout(new GridBagLayout());
//Création des GBC pour les éléments à ajouter au panel principal
mainContainer.add(topButtons, new GBC(1,1,1,1));
mainContainer.add(starPanel, new GBC(1,2,1,1));
mainContainer.add(rightButtons, new GBC(2,2,1,1));
//Mise des couleurs pour les panels en fond
topButtons.setBackground(Color.RED);
rightButtons.setBackground(Color.GRAY);
starPanel.setLayout(new GridBagLayout());
starPanel.add(system1a1, new GBC(1,1,1,1));
starPanel.add(system2a1, new GBC(2,1,1,1));
starPanel.add(system3a1, new GBC(3,1,1,1));
starPanel.add(system1a2, new GBC(1,2,1,1));
starPanel.add(system2a2, new GBC(2,2,1,1));
starPanel.add(system3a2, new GBC(3,2,1,1));
starPanel.add(system1a3, new GBC(1,3,1,1));
starPanel.add(system2a3, new GBC(2,3,1,1));
starPanel.add(system3a3, new GBC(3,3,1,1));
*/
}
}
Et finalement mes classes GBC et SystemPanel, la première n'a pas grande importance car elle est plutot... standard je dirais.
Code :
class SystemPanel extends JPanel {
private Image myImage;
public SystemPanel(String filename){
try {
myImage = ImageIO.read(new File(filename));
}
catch (IOException e){
//System.out.println("Impossible de charger l'image : " + filename);
}
}
publicvoid paintComponent(Graphics g){
super.paintComponent(g);
if (myImage == null) return;
g.drawImage(myImage, 0, 0, null);
}
}
Code :
publicclass GBC extends GridBagConstraints {
/**
* Construit un GBC avec une position gridx et gridy donnée.
* @param gridx La position gridx
* @param gridy La position gridy
*/
public GBC (int gridx, int gridy){
this.gridx = gridx;
this.gridy = gridy;
}
/**
* Construit GBC avec gridx, gridy, gridwidth et gridheight donnés.
* @param gridx La position gridx
* @param gridy La position gridy
* @param gridWidth Le nombre de cellules horizontales
* @param gridHeight Le nombre de cellules verticales
*/
public GBC (int gridx, int gridy, int gridWidth, int gridHeight){
this.gridx = gridx;
this.gridy = gridy;
this.gridheight = gridHeight;
this.gridwidth = gridWidth;
}
/**
* Définit le positionnement dans la cellule
* @param anchor Le positionnement de la cellule
* @return this Récupération de l'objet en cas de modification future
*/
public GBC setAnchor (int anchor){
this.anchor = anchor;
returnthis;
}
/**
* Définit si l'objet peut s'étendre dans sa cellule.
* @param fill La direction dans laquelle peut s'étendre l'objet
* @return this Récupération de l'objet en cas de modification future
*/
public GBC setFill (int fill){
this.fill = fill;
returnthis;
}
/**
* Définit le poid de chaque cellule
* @param weightx Le poid de la ligne de la cellule
* @param weighty Le poid de la colonne de la cellule
* @return this Récupération de l'objet en cas de modification future
*/
public GBC setWeight (double weightx, double weighty){
this.weightx = weightx;
this.weighty = weighty;
returnthis;
}
/**
* Définit la marge externe
* @param distance La marge à appliquer aux 4 cotés
* @return this Récupération de l'objet en cas de modification future
*/
public GBC setInsets (int distance){
this.insets = new Insets(distance, distance, distance, distance);
returnthis;
}
/**
* Définit la marge externe
* @param top La marge du haut
* @param left La marge de gauche
* @param bottom La marge d'en bas
* @param right La marge de droite
* @return this Récupération de l'objet en cas de modification future
*/
public GBC setInsets (int top, int left, int bottom, int right){
this.insets = new Insets(top, left, bottom, right);
returnthis;
}
/**
* Définit la marge interne
* @param ipadx La marge horizontale
* @param ipady La marge verticale
* @return this Récupération de l'objet en cas de modification future
*/
public GBC setIpad (int ipadx, int ipady){
this.ipadx = ipadx;
this.ipady = ipady;
returnthis;
}
}
Je souhaite avoir quelque chose du genre lorsque je lance mon programme :
Vous l'aurez compris, l'image de base à afficher dans les 3x3 panels est :
Au lieu de ça j'obtiens ça :
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 Lordsephiroth le 04-11-2005 à 23:33:40