2009-10-11 7 views
0

Mon programme compte 3 classes. 1) principal, 2) cadre, 3) dessinBoard. La logique de mon programme est que, un nouveau dessin sera affiché à chaque fois que l'utilisateur clique sur Nouveau bouton (et cela fonctionne bien).Placer un dessin sur JPanel

1ère classe - principale méthode

public class mainPage { 
    public static void main(String[]args){ 
    JFrame appFrame = new Frame(); 
    appFrame.setVisible(true); 
    appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/ 
    } 
} 

2e classe - décrire la mise en page (j'utiliser la mise en page Sac Grille)

public class Frame extends JFrame implements ActionListener { 
    public Frame(){ 
    GridBagLayout m = new GridBagLayout(); 
    Container c = (Container)getContentPane(); 
    c.setLayout (m); 
    GridBagConstraints con; 

    JButton bPattern = new JButton("New Pattern"); 
    .... 
    bPattern.addActionListener(this); 

    JPanel pDraw = new JPanel();   
    ..... 
    pDraw.add(new drawingBoard()); //drawing will be placed in this panel 
} 

public void actionPerformed(ActionEvent e) { 
    repaint();   
} 

}

3e classe - les fonctions de dessin par exemple l'exécution paintComponent(), etc.

public class drawingBoard extends JPanel { 
    public drawingBoard(){} 
    public void paintComponent(Graphic g){} 
    .... 
    } 

Le problème est que, quand je regarde sur la console, il semble que même si l'utilisateur n'a pas cliqué sur le bouton, le programme appelle la classe « DrawingBoard » et repeindre. Le composant de peinture est dans la 3ème classe (drawingBoard). Bien que cela ne semble pas poser de problème (par exemple, aucun dessin affiché sur le panneau à moins que l'utilisateur ne clique sur le bouton), je suis juste curieux de savoir comment cela est arrivé. est-ce parce que j'ai écrit ce code à FRAME class(). Mon intention d'écrire ce code est de m'assurer que le dessin devrait être placé dans ce panneau spécifique (j'ai 3 panneaux) mais de ne pas appeler la 3ème classe à moins que le bouton ait été cliqué.

JPanel pDraw = new JPanel();   
pDraw.add(new drawingBoard()); //place drawing here 

Répondre

0

La méthode repaint (et par la suite, la méthode paintComponent) est non seulement appelé par le JFrame mais aussi par Swing lui-même et, quand il faut une repeindre du contenu du JPanel.

L'article Painting in AWT and Swing est un bon point de départ pour obtenir des informations sur le fonctionnement de la peinture.

Dans ce cas, la méthode repaint est appelée par les événements qui l'article appelle déclenché System-Peinture:

du système demande Dans le fonctionnement du système déclenché par la peinture , un composant rendre son contenu, généralement pour l'une des raisons suivantes:

  • le composant est d'abord rendu visible à l'écran.
  • Le composant est redimensionné.
  • Le composant présente des dommages qui doivent être réparés. (Par exemple, quelque chose qui précédemment obscurci le composant a été déplacé, et une partie précédemment masquée du composant a été exposée ).