2010-05-30 14 views
3

J'ai pour tâche d'afficher des «yeux» peints avec des boutons de menu pour changer leurs couleurs et la couleur de fond. Ensuite, animez les. Mais actuellement je suis coincé à la peinture, sinc dans mon JFrame j'ai créé JPanel contenant des panneaux avec des yeux et des boutons dessinés. Les boutons sont rendus correctement, mais mes yeux ne sont pas montrés. J'ai essayé de changer la peinture en paintComponent, en définissant contentPane différemment mais toujours rien ne fonctionne.Composant de peinture à l'intérieur d'un autre composant

import java.awt.*; 
import javax.swing.*; 

public class Main extends JFrame { 

    public static void main(String[] args) { 
     final JFrame frame = new JFrame("Eyes"); 
     frame.setPreferredSize(new Dimension(600, 450)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel players = new JPanel(new GridLayout(1, 3)); 
       players.add(new JButton("Eyes color")); 
       players.add(new JButton("Eye pupil")); 
       players.add(new JButton("Background color")); 

     JPanel eyes = new JPanel(); 
     Eyes e = new Eyes(); 
     eyes.add(e); 
     eyes.setPreferredSize(new Dimension(600, 400)); 

     JPanel content = new JPanel(); 
     content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); 
     frame.setContentPane(content); 
     content.add(players); 
     content.add(eyes); 

//  frame.getContentPane().add(content); 
     frame.pack(); 
    frame.setVisible(true); 

    } 
} 

class Eyes extends JPanel { 

    public Eyes(){  
    } 

    public void paint(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
     BasicStroke bs = new BasicStroke(3.0f); 
     g2d.setBackground(Color.green); 
     g2d.setStroke(bs); 
     g2d.setColor(Color.yellow); 
     g2d.fillOval(50, 150, 200, 200); 
     g2d.fillOval(350, 150, 200, 200); 
     g2d.setColor(Color.BLACK); 
     g2d.drawOval(49, 149, 201, 201); 
     g2d.drawOval(349, 149, 201, 201); 
     g2d.fillOval(125, 225, 50, 50); 
     g2d.fillOval(425, 225, 50, 50); 
    } 
} 

C'est ce que je reçois: alt text http://img175.imageshack.us/img175/6420/eyes1.jpg C'est ce que j'ai: alt text http://img132.imageshack.us/img132/827/eyes2i.jpg

Quand je l'ai essayé la peinture directement dans JFrame il fonctionne presque parfait, en dehors de l'arrière-plan ne sont pas mis en . Pourquoi setBackgroundColor n'influence en aucun cas mon dessin?

Répondre

3

Eyes La classe est déjà un panneau. Vous n'avez pas besoin de ce panneau supplémentaire: JPanel eyes = new JPanel();

Faire comme ceci:

Eyes eyes = new Eyes(); 
eyes.setPreferredSize(new Dimension(600, 400)); 

JPanel content = new JPanel(); 
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); 
frame.setContentPane(content); 
content.add(players); 
content.add(eyes); 

Vous pouvez aussi le faire fonctionner avec votre panneau supplémentaire. Réglez simplement la taille préférée du panneau e.

JPanel eyes = new JPanel(); 
Eyes e = new Eyes(); 
eyes.add(e); 
e.setPreferredSize(new Dimension(600, 400)); 
eyes.setPreferredSize(new Dimension(600, 400)); 
+0

et savez-vous pourquoi le paramètre d'arrière-plan ne fonctionne pas? –

+0

ok, je l'ai trouvé moi-même dans les docs. –

+0

À partir du document Java: «La définition de la couleur d'arrière-plan dans le contexte Graphics2D n'affecte que les appels clearRect suivants et non la couleur d'arrière-plan du composant.Pour modifier l'arrière-plan du composant, utilisez les méthodes appropriées du composant. –

1

Le code de la peinture dans le panneau des yeux est incorrect:

public void paint(Graphics g) { 
     super.paintComponent(g); 

devrait être:

public void paintComponent(Graphics g) { 
     super.paintComponent(g);