Pourquoi le centrage dans JFrame ne fonctionne pas?

Résolu
Pulsar360 Messages postés 133 Statut Membre -  
Pulsar360 Messages postés 133 Statut Membre -
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

  1. Pulsar360 Messages postés 133 Statut Membre 10
     
    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