Frage

Ich bin versucht, ein Java-Applet zu machen, den ich erlaubt, eine Grafik Datenstruktur in einer Leinwand zu ziehen. Ich werde dies tun, indem Sie auf, wo ich Knoten erstellen möchten, und klicken Sie die Knoten um sie zu verbinden. Das Problem ist, ich kann nicht die paint() Methode richtig zu verhalten bekommen. Ich füge neuen Knoten das Graphen (und Quadrate auf der Leinwand) innerhalb der mousePressed(MouseEvent e) Methode verwenden,

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

Alles funktioniert gut, bis ich die Größe des Fensters, und dann werden alle gefüllten Rechtecke verschwinden. Ich overrided die Farbe Methode nur eine leere Methode, aber das gleiche passiert immer noch. Ich kann nicht fügen Sie die fillRect innerhalb Farbe Befehle (), weil ich weiß nicht, welche Rechtecke existieren, bis der Benutzer mit ihr interagiert mit der Maus.

Wie kann ich g.fillRect() innerhalb der Maus-Listener-Methoden verwenden, und sie halten?

War es hilfreich?

Lösung

Das Problem ist der Ort, den Sie sind Zeichnung ist nicht persistieren. Zu jeder Zeit können Sie alles verlieren Sie es gezeichnet haben. Die Farbe (Graphics) -Methode wird aufgerufen, wenn dies geschieht. Verringern Sie entweder das gesamte Bild dies geschieht jedes Mal neu zu zeichnen, oder Sie werden beiseite eine Leinwand setzen müssen, um zu ziehen und den Inhalt in Ihr Applet Graphics kopieren nach Bedarf.

Hier ist, wie ein Bild erstellen und zeichnen:
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

Dann in Ihrer Farbe Methode, verwenden Sie Graphics drawImage (...) Methode um das Bild anzuzeigen Sie erstellt haben.

Andere Tipps

Ich weiß nicht, ob ich das richtig zu lesen bin, aber warum speichere nicht nur die Position des letzten Klick in einer Variablen später lackiert werden, wenn die Farbe () -Methode aufgerufen wird?

scroll top