Th1b4ult
Messages postés6Date d'inscriptionvendredi 1 octobre 2010StatutMembreDernière intervention23 octobre 2010
-
18 oct. 2010 à 14:05
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020
-
18 oct. 2010 à 17:26
Bonjour,
je code depuis peu en Java, et j'essaie une interface graphique. Voila mon problème :
je crée un cadre de taille fixe, et je veux que le JPanel à l'intérieur de mon JFrame prenne toute la place et fasse exactement 600*600 pixels. J'ai donc commencé par créer un JFrame de taille 600*600, en pensant que c'était bon. Mais apparemment, le contenu de mon cadre, à savoir mon JPanel ne fait pas la taille que je voulais.
Donc pour "bidouiller" un peu et récupérer la taille de mon JPanel, j'ai tenté d'afficher la taille de mon JPanel dans un JLabel appelé "info", dans la classe P_aide :
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
//import java.awt.event.ActionEvent;
//import java.awt.event.ActionListener;
//import javax.swing.JFrame;
public class jeu {
public static void main (String[] args) {
cadre nc = new cadre ("Casse-brique",600, 600);
}//fin classe main
}//fin classe jeu
class cadre extends JFrame implements ActionListener {
//Composants Communs
private JButton retour_menu = new JButton("Menu"); //A changer en graphique
private Font police = new Font("Arial", Font.PLAIN, 10);
private JLabel info = new JLabel ();
//Composants du Menu
private ImageIcon nj = new ImageIcon("nj.PNG"); // associe à chaque bouton du
private JButton nouveaujeu = new JButton (nj); // menu un icone, et l'ajoute
private ImageIcon opt = new ImageIcon("opt.PNG"); // dans le panneau menu
private JButton option = new JButton (opt);
private ImageIcon ad = new ImageIcon("ad.PNG");
private JButton aide = new JButton (ad);
private ImageIcon cred = new ImageIcon("cred.PNG");
private JButton crédits = new JButton (cred);
private ImageIcon quit = new ImageIcon("quit.PNG");
private JButton quitter = new JButton (quit);
//Composants de l'Aide
private P_aide panneau_aide = new P_aide();
private P_menu panneau_menu = new P_menu();
//Création du panneau Menu :
class P_menu extends JPanel {
public P_menu () {
this.setLayout(null);
this.setBackground(Color.black);
nouveaujeu.setBounds(new Rectangle(200,100, 200, 50));
this.add(nouveaujeu);
option.setBounds(new Rectangle(200,170, 200, 50));
this.add(option);
aide.setBounds(new Rectangle(200,240, 200, 50));
aide.addActionListener(new AideListener());
this.add(aide);
crédits.setBounds(new Rectangle(200,310, 200, 50));
this.add(crédits);
quitter.setBounds(new Rectangle(200,380, 200, 50));
quitter.addActionListener(new QuitterListener());
this.add(quitter);
}
public void paintComponent (Graphics g) {
super.paintComponent (g);
Image fond = getToolkit().getImage("fond_menu.PNG");
g.drawImage(fond, 0,0, this);
}
}// fin de classe P_menu
//Création du panneau Aide :
class P_aide extends JPanel {
public P_aide() {
this.setLayout(null);
this.setBackground(Color.black);
retour_menu.setBounds(new Rectangle (520, 540, 70, 20));
retour_menu.setFont(police);
this.add(retour_menu);
info.setBounds(20,20,300,200);
info.setText(getPreferredSize().toString() ); // C'est ici que je veux voir la taille de mon JPanel
info.setForeground(Color.white);
this.add(info);
}
}//fin de classe P_aide
public cadre (String nom, int largeur, int hauteur) {
super (nom);
this.setSize (largeur, hauteur);
this.setDefaultCloseOperation (EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
this.getContentPane().add(panneau_menu);
}
class AideListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
getContentPane().setVisible(false);
getContentPane().remove(panneau_menu); // cache le menu, l'enlève et le remplace par l'Aide
getContentPane().add(panneau_aide);
getContentPane().setVisible(true);
}
}
class QuitterListener implements ActionListener {
public void actionPerformed (ActionEvent event) {
int confirm = JOptionPane.showConfirmDialog(getContentPane(), "Voulez vous vraiment quitter ?",
"Fermeture de l'application", JOptionPane.YES_NO_OPTION); //affichage d'un pop-up demandant confirmation de sortie
if (confirm == 0) {System.exit(0);} //quitte le programme si l'option "oui" est choisie
}
}
}//fin classe cadre
Cela m'affiche 0 0, et j'ai vu qu'il fallait utiliser la méthode getPreferredSize().width et .height. Mais cela me donne pourtant le même résultat.
Auriez-vous une solution?
Si il manque quelque chose ou si c'est trop brouillon, n'hésitez pas à me le dire.
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020370 18 oct. 2010 à 17:26
Je pense que le problème vient du Layout de ta JFrame qui n'est pas à null par défaut. Modifie ton code, remplace ton consructeur par ca :
public cadre (String nom, int largeur, int hauteur) {
super (nom);
//Il faut setter ton Layout à null
this.setLayout(null);
this.setSize (largeur, hauteur);
this.setDefaultCloseOperation (EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
this.getContentPane().add(panneau_menu);
}
sinon, tu peux directement écrire this.setContentPane(panel); et il prendra toute la place disponible dans la fenêtre