[Java] Zeichenprogramm schreiben

yourhighness

Lt. Junior Grade
Registriert
Feb. 2006
Beiträge
297
hallo!

ich bin gerade an einen projekt beteiligt in dem es darum geht ein kleines zeichenprogramm, ähnlich paint, zu programmieren.
ich habe schon recht viel hinter mir und arbeite mit den Methoden aus java.awt.event.* (MouseEvent, etc...) und hab mittlerweile schon einiges um linien zu zeichnen etc...

nun habe ich aber 2 Probleme:

1. wie schaffe ich es gezeichnetes wieder wegzulöschen? gibt es da bereits vorgefertigtes?

2. wenn ich das fenster in dem ich zeichne minimiere und dann wieder maximiere ist alles weg, weiß jemand wie man das umgehen kann?


hoffe auf eure hilfe
grüße
 
Zeichnest du auf einem JPanel? Dann kann es sein das die paint, paintComponents, paint… Methode aufgerufen wird und dir alles neu zeichnet. Ich empfehle immer ne refresh Methode die kann dann von allen Positionen aus aufgerufen werden.

Zum zeichnen: ich weis nicht ob es was vorgefertigtes gibt aber bei java wird’s mich wundern wenn da nicht schon was vorhanden ist. Wenn nicht wie ich es machen würde, ich würde nicht direkt Linien zeichnen, sondern Pixel (also ein Objekt (Klasse) das einen Pixel zeichnet [vielleicht sogar als extends JPanel anlegen]). Dieses Objekt sollte zwei Eigenschaften besitzen Darstellung true oder false die entweder public zugreifbar sind oder übereine zugriffs Methode.

Darstellung ganz einfach per add() auf der Arbeitsfäche, in einer refresh Methode.
z.B.

Code:
 private Vector pixelList=new Vector();

public void refreshPlatform(){
       removeAll() ;

      // Schleife alle true Objekte darstellen

     //Abfrage ob pixel dargestellt werden soll oder nicht
     if(((objectklasse)pixelList.get…(index der schleife)).visible==true)
          add(pixelList.get…(index der schleife)…);
      else
          //mach nischt    
}
 
Zuletzt bearbeitet:
danke ronny, du hast mich in super wege geleitet, danke vielmals : )

werd das mal ausprobieren :)
 
Hmm also 640x480 = 307200.
Wenn man für jeden Pixel ein Objekt nimmt dann sind das 307200 Objekte. Ich glaub der Garbage Collector mag einen nicht mehr sonderlich wenn man sowas macht. Wenn es nur "True" oder "False" sein soll kann man das auch mit BitSet machen.
Das ist nur ein Objekt und verwendet intern ein Array aus long. Man muss dann blos die Bildkoordinate umwandeln in einen Index.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/BitSet.html
 
Zuletzt bearbeitet:
naja war ne Idee das Objekt sollte ja noch mehr Eigenschaften haben z.B. Farbwerte (Color) u.s.w, andere Idee man könnte je Position (Mauseposition) nen Punkt zeichnen, dazu wäre zum Beispiel ne änderbare Color Variable nötig (um die Strichfarben zu ändern) und dann die Koordinaten speichern (um später die Koordinaten zu prüfen). oder nur zeichnen (Linien und Punkte) und dann beim löschen die Hintergrundfarbe wiederherstellen ohne speichern.
 
Das Löschen von Teilen eines Bildes wird ja darüber gemacht das die Farbewerte auf die Hintergrundfarbe gesetzt werden. Da würde sich ein grosses Array mit den RGB werten eines jeden Pixels besser machen. Und dann manipuliert man halt mit Zeichenoperationen diese RGB Werte und zeichnet das Ergebnis dann auf den Bildschirm.

Wenn man jetzt noch jeweils ein Color Object mit ranhängt dann würde sich die Anzahl der Objekte von 307200 auf 614400 verdoppeln. Für solche sachen muss man mit Arrays aus ürimitiven Datentypen arbeiten sonst kommt man Performancemässig in Teufels Küche.

Auf dieser Website wird eine Auswahl an Java APIs für sowas vorgestellt: http://www.torsten-horn.de/techdocs/java-img.htm
 
Zurück
Oben