2011-03-16 4 views
0

J'écris un programme qui sera juste un simple modeleur, je suis supposé à mon panneau principal, ShapeMakerPanel, avec 2 panneaux sur celui-là, controlPanel (qui contient des boutons pour choisir la forme et effacement, etc) et drawingArea (où les formes sont réellement dessinées), mais peu importe ce que je fais, je ne peux pas faire apparaître la peinture sur drawingArea. Si j'utilise paintComponent et que je commente add (drawingArea) alors le truc de dessin fonctionne, mais sur le calque du bas, comment puis-je peindre sur le drawingArea Jpanel. Aussi, quand je dessine les formes, je ne peux pas avoir un à la fois, parce que chaque fois que je commence un nouveau, le panneau est effacé non polluants Peinture sur JPanels

super.paintComponent(g); 
    g.setColor(penColor); 
    if (p1 != null && p2 != null) 
    { 
     if (shapeChoice.getSelectedItem().equals("Line")) 
     { 
      Line line = new Line(p1.x, p1.y, p2.x, p2.y); 
      line.draw(g); 
     } 
    } 

Je sais que la super.paintComponent (g) me déconner, mais sans cela, lorsque je tire la souris, elle dessine des centaines de lignes.

Si vous vous posiez des questions sur la classe Line, nous devions créer une classe pour chaque forme dessinée, la méthode draw() utilise simplement les coordonnées de la ligne et les place dans drawLine().

Répondre

1

Ne pas surcharger paintComponent() dans ShapeMakerPanel; remplacez-le dans la classe de drawingArea (si drawingArea est un simple JPanel, créez une nouvelle sous-classe de JPanel). En général, vous devez sous-classer le composant sur lequel vous allez peindre.

+0

Remarque: Dans la plupart des cas, JPanel n'apporte rien à la peinture personnalisée qui n'est pas déjà fournie par JComponent. –

0

Aussi, quand je fais dessiner les formes, je ne peux pas avoir un à la fois, parce que chaque fois que je commence un nouveau, le panneau est effacé

non polluants

Voir Custom Painting Approaches pour un couple des moyens de résoudre cela.