Pourquoi le centrage dans JFrame ne fonctionne pas?

Résolu/Fermé
Pulsar360 Messages postés 114 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 29 août 2018 - Modifié par Pulsar360 le 6/05/2013 à 15:53
Pulsar360 Messages postés 114 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 29 août 2018 - 6 mai 2013 à 16:31
Bonjour,
J'essaye de centrer un carrer dans une JFrame mais je ne comprend pas pourquoi ça ne fonctionne pas. Pourquoi les calcules sont bon.

Voici mon code:
import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class TestCentrage { 
  
 public static void main(String[] args) { 
   
  JFrame fen = new JFrame(); 
  Pan pan = new Pan(); 
   
  fen.setTitle("Test le Centrage"); 
  fen.setSize(600,600); 
  fen.setVisible(true); 
  fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  fen.setContentPane(pan); 
  } 
 } 


class Pan extends JPanel { 
  
 public void paintComponent (Graphics g) { 
   
  g.setColor(Color.black); 
  g.fillRect((600/2)-(500/2), (600/2)-(500/2), 500,500); 
  } 
 }


Voici ce que ça donne: http://hpics.li/081c77f
Quelqu'un aurait une explication?

1 réponse

Pulsar360 Messages postés 114 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 29 août 2018 10
6 mai 2013 à 16:31
Pour ceux que ça intéresse en réalité j'ai bien une fenêtre de 600 x 600 mais dans la quel sont ajouter les bordures et le titre donc au final il n'y à que 584 x 562 de pixel util.

La solution :
Utiliser setPreferredSize

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestCentrage {
	
	public static void main(String[] args) {
		
		JFrame fen = new JFrame();
		Pan pan = new Pan();
		int hauteur = 600;
		int largeur = 600;
		
		fen.setTitle("Test le Centrage");
		pan.setPreferredSize(new Dimension(600,600));
		fen.add(pan);
		fen.pack();
		fen.setVisible(true);
		fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fen.setContentPane(pan);
		}
	}


class Pan extends JPanel {
	
	public void paintComponent (Graphics g) {
		
		g.setColor(Color.black);
		g.fillRect((600/2)-(500/2), (600/2)-(500/2), 500,500);
		System.out.println("Largeur = " + getWidth() + " Hauteur = " + getHeight());
		}
	}


Et la nous avons bien 600x600 de pixel utile pour une fenêtre qui au final fait 638 x 616 ( et oui y'a les bordures en plus).
0