2016-03-15 4 views
0

Je fais une tâche où je crée une interface graphique qui dessine un cercle ou un visage et donne à l'utilisateur des options pour changer les traits du visage quand ils cliquent sur le bouton, j'ai obtenu le basic mises en page fait, mais maintenant je veux dessiner un cercle dans le panneau principal de mon interface graphique, j'ai créé un autre fichier qui s'étend JPanel et j'ai créé la méthode paintComponent et l'a appelé sur l'application principale, mais il ne sera pas un cercle, mais obtiendrait un peu carré en haut du panneau principal, j'ai joué avec la taille mais me donnerais toujours la même chose peu importe ce que je change, je ne sais pas ce que je manque si je peux obtenir de l'aide je l'apprécierais et quelques conseils .. merci d'avanceEssayer de dessiner un cercle à l'aide de paintComponent

c'est ma JPanel ma en application

public class FaceApp extends JFrame { 

    /** 
    * 
    */ 

    JPanel panel,mainPanel; 
    Graphics graph; 

    public static void main(String[] args) { 
     FaceApp frame = new FaceApp(); 
     frame.setVisible(true); 
     frame.setBackground(Color.BLUE); 
     frame.setSize(1000,1000); 
     frame.setResizable(false); 
    } 

    private FaceApp() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     setTitle("Face"); 

     panel = new JPanel(new GridLayout(16,1,1,1)); 
     panel.setBorder(new EmptyBorder(30,30,100,100)); 

     mainPanel = new JPanel(); 
     JCheckBox eyes = new JCheckBox("Eyes"); 
     JCheckBox noes = new JCheckBox("Nose"); 
     JCheckBox mouth = new JCheckBox("Mouth"); 
     JLabel label = new JLabel(); 

     JButton update = new JButton("update"); 

     label.setText("You choose.."); 

     panel.add(label); 
     panel.add(eyes); 
     panel.add(noes); 
     panel.add(mouth); 
     panel.add(update); 

     Face face = new Face(); 

     mainPanel.setBackground(Color.BLUE); 
     mainPanel.add(face); 

     add(mainPanel,BorderLayout.CENTER); 
     add(panel, BorderLayout.WEST); 

    } 
} 

Et voici la classe Face qui fait le tableau:

public class Face extends JPanel{ 

    /** 
    * 
    */ 

    public Face(){ 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     g.fillOval(20, 30, 150, 150); 
     g.setColor(Color.red);  
    } 
} 

Répondre

2
mainPanel.add(face); 

Vous ajoutez votre composant face à un panneau qui utilise un FlowLayout. FlowLayout respecte la taille préférée de tout composant ajouté. Dans votre cas, la taille préférée est (0, 0), donc le gestionnaire de disposition ne peut pas faire son travail correctement.

Vous devez remplacer la méthode getPreferredSize() de votre classe pour renvoyer la taille préférée de votre composant, ce qui dans votre cas serait probablement (190, 210) afin que l'ovale soit centré dans le panneau.

Vous pouvez lire la section du tutoriel Swing sur Custom Painting pour un exemple de travail qui montre comment implémenter cette méthode. Gardez un lien vers le didacticiel, car il contient des exemples de nombreuses bases de Swing.

+0

hey ça marche j'ai oublié le flowlayout de celui-ci merci beaucoup !! –