J'ai pas bien compris ton dernier probleme.
C'est bien le fond du JPanel que tu viens de définir, alors comment il pourrai recouvrir son propre fond?
J'ai pas bien compris ton dernier probleme.
C'est bien le fond du JPanel que tu viens de définir, alors comment il pourrai recouvrir son propre fond?
bah écoute moi non plus je comprend pas.
j'ai mis le fond d'écran sur le JPanel. quand je lance l'appli, il s'affiche en gris (couleur par defaut). mais quand je clique sur un bouton (que j'ai défini sans bordures, transparents, ...) ça me créé une zone rectangulaire (de la taille du bouton) rempli par le fond d'écran.
je sais pas si c'est bien clair, mais en gros, c'est comme si mon fond d'écran était caché par le JPAnel ce qui est un peu absurde![]()
Je ne suis pas sur que ca vienne de ca mais essaie de remplacer :
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part g.drawImage(img,0,0,null);
Code : Sélectionner tout - Visualiser dans une fenêtre à part g.drawImage(img,0,0,this);
alors en remplaçant ça, quand je clique sur un bouton, ça ne me fait plus le bug. mais l'image n'apparait toujours pas![]()
alors j'ai découvert un truc assez marrant. lorsque j'exécute mon programme, aucun fond d'écran.
je réduit alors ma fenetre dans la barre des taches puis je la fait réapparaitre. et la, mon fond d'écran se met.
je pourrais faire quoi pour qu'il apparaisse sans que j'ai besoin de faire cette manipe :s ?
Je ne c pas trop. Est ce que ca fait la même chose quand tu redimensionne ta fenêtre plutot que de la réduire.
Essai peut etre de placer un repaint() de ton JPanel qqpart dans ton code, je ne vois que ca.
Essaie un refresh(), un repaint() ou un validate() (suivant le type de container que tu as...) sur ta fenêtre principale
essaye d'appeler repaint() sur ton panel
édit : hum j'ai un train de retard moi![]()
si je déplace ma fenetre et qu'elle sort des bordures de mon écran, lorsque je la recentre on voit le fond d'écran sur la partie qui a été déplacée. donc la je teste avec des refresh, des repaints, etc... pour le moment ça ne change rien. alors faut que je trouve a quel endroit faut que je le mette pour que ça marche. en tout cas merci beaucoup pour votre aide depuis le début![]()
bon ba ça me gave parce que j'ai mis des repaint un pêu partout et le probleme reste le meme....![]()
tu as essayé ce que t as dit leminipouce, avec refresh et validate sur la fenetre principale.
alors j'ai testé le validate mais par contre l'instruction refresh() est inconnue... comme ça se fait qu'il ne la trouve pas ?
ma fenetre principale est une JFrame.
peut etre parce que la méthode refresh n'existe pas![]()
bah ça doit etre ça je pense...
ya un truc aussi, je lance l'appli, et le fond d'écran apparait si je clique le bouton d'agrandissement de la fenetre (en haut a gauche).
franchement, c'est un peu bizarre tout ça.....
donne voir un peu de code comme ta méthode paintComponent et la déclartion du JPanel et son insertion dans le layout de la JFrame. Y a forcément qqchose qui cloche à ce niveau.
ok
ensuite mon JFrame
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class myJPanel extends JPanel { int h_f, l_f;//hauteur fenetre, largeur fenetre XYLayout bordure_panel = new XYLayout(); public Image img; myJPanel(int posx,int posy,int largeur, int hauteur, String nomImage) { h_f = hauteur; l_f = largeur; bordure_panel.setHeight(h_f); bordure_panel.setWidth(l_f); setLayout(bordure_panel); File f = new File(nomImage); if (f.exists()) { java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit(); img = toolkit.getImage(nomImage); test = toolkit.getImage("images/creer1.jpg"); } else System.out.println("fond d'écran non trouvé. vérifiez le chemin !"); setSize(l_f, h_f); setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(img,0,0,this); } }
et enfin l'utilisation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class myJFrame extends JFrame { XYLayout bordure_frame = new XYLayout(); Container f = getContentPane();/*fenetre*/ myJPanel interieur; public myJFrame() { new JFrame(); } public void create_fenetreFS(String nomFenetre,int posx, int posy ,int largeur, int hauteur,String nomImage { setTitle(nomFenetre); setUndecorated(false); setLocation(posx,posy); interieur = new myJPanel(posx,posy,largeur, hauteur, nomImage); bordure_frame.setHeight(hauteur); bordure_frame.setWidth(largeur); f.setLayout(bordure_frame); f.setSize(largeur, hauteur); } public void afficher() { setResizable(true); setVisible(true); show(); pack(); } public void paintComponent(Graphics g) { g.drawImage(interieur.img,0,0,this); repaint(); } }
voila. en espérant que ça puisse vous aider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public class menuPrincipal extends myJFrame implements ActionListener { myJButton b_creer; Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); int max_largeur = (int)tailleEcran.getWidth(); int max_hauteur = (int)tailleEcran.getHeight(); public menuPrincipal() { try { InitMenu(); } catch (Exception ex) { ex.printStackTrace(); } } b_creer = new myJButton("CREER UNE ANIMATION"); private void InitMenu() throws Exception { create_fenetreFS("Menu Principal",0,0,max_largeur,max_hauteur,"images/fond1280x1024.jpg"); /*ajout d'écouteurs d'evenements sur les boutons*/ b_creer.addActionListener(this); /*ajout des boutons dans la fenetre*/ interieur.add(b_creer, new XYConstraints(109, 74, 183, 43)); f.add(interieur , new XYConstraints(0,0,max_largeur,max_hauteur)); } public static void main(String[] args) { menuPrincipal mp = new menuPrincipal(); mp.afficher(); } }
Dans ton constructeur de menuPrincipal il te manque un "super();" au début, pareil pour ton constructeur de myJPanel. Je c pas si ca résoudra ton problème. Je n'ai pas l'impression qu'il y ai d'autres erreurs.
Sinon voila un test que j'ai fait et qui marche parfaitement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public class Test1 extends JPanel { Image img; public Test1() { super(null); img = this.getToolkit().createImage("Chemin vers l'image"); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(img,0,0,this); } public static void main(String[] args) { Test1 t = new Test1(); JButton jb = new JButton("clic"); jb.setSize(60,20); jb.setLocation(100,100); t.add(jb); JFrame frame = new JFrame("test"); frame.getContentPane().add(t); frame.setSize(500,500); frame.setLocation(200,200); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
bah je viens de rajouter le super() dans mon constructeur de myJPanel. alors ça corrige un bug. c'est a dire que quand je passe d'une fenetre a une autre en cliquant sur un bouton, le fond d'écran se met automatiquement sur la nouvell fenetre. cependant, le probleme ne veut pas se régler pour ma premiere fenetre![]()
Finalement il y a dautres erreur
C'est pas tres è joli ca :
faire plutot :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Container f = getContentPane();/*fenetre*/ public myJFrame() { new JFrame(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Container f;/*fenetre*/ public myJFrame() { super(); f = getContentPane(); }
ça change rien...
je vais finir par croire que le Java ne veut pas de moi ^^
Partager