2011-05-13 4 views
0

Bonne journée.Java. Problème avec les formes de dessin par bouton cliquer

Je développe un programme qui doit montrer quelques formes lorsque l'utilisateur clique sur le bouton. Au moins, ça ne le montre pas. Qu'est-ce qui ne va pas? code est:

public class ShowFrame extends JFrame 
{ 
    public ShowFrame() 
    { 
     this.setTitle("Show data");            //Title 
     this.setSize(DEF_WIDTH, DEF_HEIGHT);         //Size of frame 
     this.setResizable(false); 

    //...          

    JButton testButton = new JButton("Test"); 
    buttonPanel.add(testButton); 
    this.add(buttonPanel, BorderLayout.SOUTH); 


    testButton.addActionListener(new ActionListener() {     //Add listener 
     public void actionPerformed(ActionEvent e) {    
      DrawStuff stuff = new DrawStuff();        //Create class which draws shapes 
      add(stuff, BorderLayout.CENTER); 
      System.out.println("Test Button"); 
     } 
    }); 
    } 

public static final int DEF_WIDTH = 600;         
public static final int DEF_HEIGHT = 400;         

private JPanel buttonPanel = new JPanel(); 
} 

classe qui dessine des formes:

public class DrawStuff extends JComponent 
{ 
    public void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D) g; 
     //... 
     Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height); 
     Line2D line  = new Line2D.Double(leftX, topY, 0, 0); 
     //... 
     g2.draw(rect); 
     g2.draw(line); 
     //... 
    } 

} 

Répondre

1

Lorsque vous ajoutez/supprimer des composants sur une interface graphique visible le code doit être:

panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

Votre conception d'ajouter un nouveau panneau chaque fois que vous cliquez sur un bouton n'est pas très bon. A la place, vous devez créer un panneau de peinture personnalisé et remplacer la méthode paintComponent(). Ensuite, lorsque vous cliquez sur un bouton, vous invoquez une méthode dans votre composant personnalisé pour définir la forme que vous voulez dessiner. La méthode paintComponent() doit être suffisamment intelligente pour peindre la forme. Ensuite, vous invoquez repaint() sur le panneau.

Lisez la section du tutoriel Swing sur Custom Painting pour plus d'informations et des exemples de travail.