2012-04-14 5 views
1

aufgerufen wurde Ich versuche, einen PaintBrush mit Swings zu erstellen. Ich wollte das Freihandzeichnen auf einem der JPanels machen, also habe ich seine PaintComponent überschrieben und etwas gezeichnet, es ist in Ordnung. Aber ich bekomme keinen Hintergrund, ich brauchte weißen Hintergrund, also habe ich die super.paintComponent (g) in paintComponent() aufgerufen, jetzt kann ich den Hintergrund bekommen, aber jedes Mal, wenn mein repaint() auf mouseDragged-Ereignis aufgerufen wird, d verliere meine vorherige Zeichnung auf dem JPanel. Gibt es eine Möglichkeit, mit der ich eine Hintergrundfarbe bekommen kann, und auch meine vorherige Zeichnung ist nicht verloren?Vorherige Zeichnung ist verloren, nachdem super.paintComponent (g) in JPanel

Jede Hilfe wäre appreciated.THANKS

JPanel paintcomponent()

public void paintComponent(Graphics g) { 
     // super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(xpos, ypos, 5, 5); 

    } 

mouseDragged() zufällig

public void mouseDragged(MouseEvent arg0) { 
     xpos= arg0.getX(); 
     ypos= arg0.getY(); 
     repaint(); 
      } 
+0

@HovercraftFullOfEels hey, ich habe den Code hinzugefügt, alle Malerei nur in paintcomponent gemacht wird. – Nikhar

Antwort

2

Diese oft, wenn man mit einem Graphics-Objekt durch Aufruf getGraphics() an einer Komponente seit erhalten Das so erhaltene Graphics-Objekt ist nicht von langer Dauer. Alle Zeichnungen sollten innerhalb von paintComponent oder einer von paintComponent aufgerufenen Methode erstellt werden.

Bearbeiten
OK, danke für das Posten eines Codes. So sehe ich, dass du nur ein einziges Oval in deinem Code zeichnest, also ist es nicht überraschend, dass Super dich daran hindert, eine Linie zu zeichnen.

Mögliche Lösungen:

  • In Ihrer mouseDragged(...) Methode, fügen Sie Punkte zu einem List<Point> und in Ihrer paintComponent(...) Methode, durchlaufen diese Liste Linienzeichnung (die Graphics2D Stroke Einstellung Linienstärke ändern)
  • oder Zeichnen Sie zu einem BufferedImage und zeigen Sie das BufferedImage in Ihrer Methode PaintComponent (...) an.

Zum Beispiel bitte einen Blick auf meine Stackoverflow Antwort auf diese Frage: Changing JPanel Graphics g color drawing line

+0

Ich habe getGraphic() nirgends verwendet. Mein mouseDragged() gibt mir neue Koordinaten, ich nenne es einfach Repaint. – Nikhar

+0

@Nikhar: siehe bearbeiten, um zu antworten. Siehe auch meinen Code in dem Link, den ich zur Verfügung gestellt habe, um ein Beispiel für meinen zweiten Vorschlag zu sehen. –

+0

Danke Mann, aber kannst du mir sagen warum, wenn ich Ovale gezeichnet habe, wurde es nicht mit super.PaintComponent (g) gezeichnet? – Nikhar