S
SuperSeppel13
Gast
Ich bin bei einer Schulaufgabe auf folgendes Problem gestoßen, bei dem mir bis jetzt
weder eigene Überlegungen noch Google weiter helfen konnten:
Ich habe ein JFrame erstellt, das mir ein relativ grobes Raster auf ein als Zeichenfläche vorgesehenes JPanel zeichnet. Auf diese zeichenfläche kann man mit je zwei Mausklicks eine Linie zeichnen lassen, wobei jedes Kästchen des Rasters einem Pixel entspricht.
(Ziel der Arbeit ist es, anschaulich zu machen, wie der Computer Linien und Kreise zeichnet.)
Zusätzlich kann man mittels eines Schiebereglers die Größe der "Pixel", also die dichte des Rasters verändern.
Soweit funktioniert alles bestens.
Nun möchte ich aber, dass die gezeichneten Linien nach der Veränderung des Rasters neu gezeichnet werden, und dann entsprechend gröber oder feiner aufgelöst sind.
Ich habe zum zeichnen des Rasters die "paintComponent"-Methode meiner von JPanel abgeleiteten Klasse "DrawingPanel" überschrieben. Diese löscht bei jedem Aufruf den gesamten Inhalt des Panels und zeichnet das Raster neu. Aufgerufen wird sie bei jeder Veränderung des Schiebereglers. Jetzt habe ich diese Methode noch um 2 Zeilen erweitert, damit am Ende noch die vorher vorhandenen Linien wieder neu gezeichnet werden. Die Methode sieht nun folgendermaßen aus:
Wenn ich diese Methode jetzt aufrufe, wird zwar das Raster korrekt gezeichnet, die Linien verschwinden aber.
Ab und an kann man sie zwar kurz aufblitzen sehen (während des Zeichnens), sie bleiben aber nie sichtbar.
Da auch die letzten beiden Zeilen definitiv ausgeführt werden, bleibt mir nur der Schluss, dass die Methoden nicht nach der Reihe ausgeführt werden. Offensichtlich werden erst die Linien gezeichnet, dann der Bereich gelöscht und anschließend das Ratser gezeichnet. :bahnhof:
Ich habe es auch schon mit Thread-Synchronisation per "synchronized" versucht (obwohl ich davon nichts verstehe :roll: ), habe jedoch nichts erreicht.
Wie kann ich also Java dazu bringen die Methoden von oben nach unten abzuarbeiten, sodass meine Linien wieder auftauchen? [/code]
weder eigene Überlegungen noch Google weiter helfen konnten:
Ich habe ein JFrame erstellt, das mir ein relativ grobes Raster auf ein als Zeichenfläche vorgesehenes JPanel zeichnet. Auf diese zeichenfläche kann man mit je zwei Mausklicks eine Linie zeichnen lassen, wobei jedes Kästchen des Rasters einem Pixel entspricht.
(Ziel der Arbeit ist es, anschaulich zu machen, wie der Computer Linien und Kreise zeichnet.)
Zusätzlich kann man mittels eines Schiebereglers die Größe der "Pixel", also die dichte des Rasters verändern.
Soweit funktioniert alles bestens.
Nun möchte ich aber, dass die gezeichneten Linien nach der Veränderung des Rasters neu gezeichnet werden, und dann entsprechend gröber oder feiner aufgelöst sind.
Ich habe zum zeichnen des Rasters die "paintComponent"-Methode meiner von JPanel abgeleiteten Klasse "DrawingPanel" überschrieben. Diese löscht bei jedem Aufruf den gesamten Inhalt des Panels und zeichnet das Raster neu. Aufgerufen wird sie bei jeder Veränderung des Schiebereglers. Jetzt habe ich diese Methode noch um 2 Zeilen erweitert, damit am Ende noch die vorher vorhandenen Linien wieder neu gezeichnet werden. Die Methode sieht nun folgendermaßen aus:
Code:
protected void paintComponent(Graphics g){
g.clearRect(0, 0, this.getWidth(), this.getHeight()); //löscht die Zeichenfläche
//grid________________________
int x = 0;
int y = 0;
g.setColor(new Color(gridColor, gridColor, gridColor)); //für das Problem irrelevant
//hier wird das Raster gezeichnet
while(x <= this.getWidth()){
g.drawLine(x, 0, x, this.getHeight());
x += pixelSize;
}
while(y <= this.getHeight()){
g.drawLine(0, y, this.getWidth(), y);
y += pixelSize;
}
//lines_____________________
for(int i=0; i<lines.size(); i++){ //hier sollen die Linien gezeichnet werden
drawLine(lines.get(i)[0], lines.get(i)[1], false); //"drawLine" ist hier meine eigene Methode
// "lines" ist eine ArrayList, in der die Endpunkte der Geraden gespeichert sind (als Point[])
}
}
Wenn ich diese Methode jetzt aufrufe, wird zwar das Raster korrekt gezeichnet, die Linien verschwinden aber.
Ab und an kann man sie zwar kurz aufblitzen sehen (während des Zeichnens), sie bleiben aber nie sichtbar.
Da auch die letzten beiden Zeilen definitiv ausgeführt werden, bleibt mir nur der Schluss, dass die Methoden nicht nach der Reihe ausgeführt werden. Offensichtlich werden erst die Linien gezeichnet, dann der Bereich gelöscht und anschließend das Ratser gezeichnet. :bahnhof:
Ich habe es auch schon mit Thread-Synchronisation per "synchronized" versucht (obwohl ich davon nichts verstehe :roll: ), habe jedoch nichts erreicht.
Wie kann ich also Java dazu bringen die Methoden von oben nach unten abzuarbeiten, sodass meine Linien wieder auftauchen? [/code]