Clear im Grafik Editor

Status
Nicht offen für weitere Antworten.
C

chain

Gast
Hallo,

ich habe eine einfachen Grafik editor geschrieben. Er funktioniert auch einwandfrei, nur habe ich ein Problem(bitte nicht lachen :oops: :oops: :roll: :roll: :roll: :roll: )

Also erst einmal: die ganzen Grafikobjekte(wie Kreis, recheck,...) werden in einen Vector gespeichert.
ich habe einen JFrame das die Zeichenoberfläche darstellt.
in der mehode paint werden alle im Vector gespeicherten Grafikobjekte durchlaufen und es wird deren zeichenmethode aufgerufen.

Ich habe eine Funktion Clear eingebaut, die alle Zeichenobjekte von der Zeichenoberfläche löscht(es wird einfach der Vector mit v.clear(); wieder "auf 0 gesetzt". Danach wird die Methode repaint(); aufgerufen, jedoch ändert sich nichts, bis die paint(); methode irgendwie anders aufgerufen wird.

wie mach ich es das sofort nach dem v.clear(); die Zeichenfläche "gerepainted" wird???

Bitte nicht lachen :wink: :wink: :wink: :wink: :wink:


mfg
 

Leroy42

Top Contributor
Sollte eigentlich funktionieren ???:L

Macht deine clear-Methode noch irgendwas, nachdem sie repaint aufruft?
Wird sie überhaupt in einer z.B. actionPerformed-Methode eines Buttons aufgerufen.

GibUnsMalCode
 
C

chain

Gast
public void actionPerformed(ActionEvent event)
{
if(event.getActionCommand().equals("Clear"))
{
v.clear();
this.repaint();
}
}


das ist alles. :bahnhof: :bahnhof:
 

Leroy42

Top Contributor
Der EventDispatchThread wird also sofort wieder verlassen und das Painting sollte erfolgen.

Dann habe ich auch keine Idee, warum das nicht funzt :(
 
C

chain

Gast
hier mal die ganze methode, vielleicht hilft das!

Code:
public void actionPerformed(ActionEvent event)
	{
//das Programm wird beendet
		if(event.getActionCommand().equals("Ende"))
	    {
	    	this.setVisible(false);
	    	this.dispose();
	    	System.exit(0);
	    }
		
//Clear
	    if(event.getActionCommand().equals("Clear"))
	    {
	    	v.clear();
	    	this.repaint();	    	
	    }
//Neue Linie wird am Mauszeiger gezeichnet. Die 2 Koordinaten muss man eingeben
	    if(event.getActionCommand().equals("neue Linie"))
	    {
	    	int x2,y2=0;

                // Hier werden die 2. Koordinaten für Linie ermittelt/eingegeben

	    	x2=this.inXY2(2,'x',m.getMouseX(),m.getMouseY(),"2. X-Koordinate (0=Koordinate des Mauszeigers)","2. Y-Koordinate (0=Koordinate des Mauszeigers)");
	    	y2=this.inXY2(2,'y',m.getMouseX(),m.getMouseY(),"2. X-Koordinate (0=Koordinate des Mauszeigers)","2. Y-Koordinate (0=Koordinate des Mauszeigers)");
	    	
	    	
                //Linie wird zu Vectror hinzugefügt
	    	v.add(new Linie(m.getMouseX(),m.getMouseY(), x2, y2, Color.BLUE, Color.black));
	    	this.repaint(); //hier funktioniert es
	    }
}

alles bis auf das repaint bei clear funzt
BIIIIIIITTTTTTTTTTTTTEEEEEEEEEEE HHHHHHHHHHHHIIIIIIIIIIILLLLLLLLFFFFFFFFFFFFFEEEEEEEEEEE :cry: :cry: :cry: :cry: :cry: :cry:

[Edit by Beni: Codetags]
 
C

chain

Gast
das selbe Problem habe ich wenn ich ein Grafikelement lösche!

Bittel Hilfe. Danke :bahnhof: :bahnhof: :bahnhof: :bahnhof: :( :( :( :bahnhof: :bahnhof: :bahnhof:
 

Leroy42

Top Contributor
Ist es einundderselbe Vector aus dem du zeichnest und indem du löschst?

Zeige doch mal deine repaintComponent-Methode
 
C

chain

Gast
hier mal meine paint methode.
ja es is immer der eine Vector v

Code:
public void paint(Graphics g)
	{
		this.setBackground(Color.WHITE);
		
//Vector durchlaufen		
for(int i=0;i<v.size();i++)
		{
//Rechtecke zeichnen
			if(v.elementAt(i).getClass().getName().equals(Rechteck.class.getName()))		
				((Rechteck)(v.elementAt(i))).zeichne(g);

//Linien zeichnen
			else if(v.elementAt(i).getClass().getName().equals(Linie.class.getName()))
					((Linie)(v.elementAt(i))).zeichne(g);
				
		}
		
	}

[Edit by Beni: Codetags]
 
B

Beni

Gast
Den Hintergrund könntest du noch übermalen:

Code:
g.setColor( Color.WHITE );
g.fillRect( 0, 0, getWidth(), getHeight() );

Sonst kann ein altes Bild dableiben, und du zeichnest ja beim löschen nichts mehr.

P.S. und dann befasse dich mal mit Interfaces, deine Casts sind ja übelst kompliziert (und total unnötig wenn die Klassen alle dasselbe Interface implementieren würden) :cool: (Beispiel)
 
C

chain

Gast
Ich habs jetzt sehr unschön umgangen.
Nach dem nicht funktionierenden repaint, minimiere ich das Fenster einfach und mache es wieder groß!

Aber bitte, falls ihr eine Lösung habt, bitte posten, ich bin am verzweifeln, weil das ist mit minimieren ist echt sch****!

mfg
 
C

chain

Gast
danke für Tipp!

währe aber trotzdem an einer "besseren" Lösing interessiert.
 

Leroy42

Top Contributor
Keine Ahnung. Es sieht alles funktionsfähig aus ???:L

Versuche doch mal einzukreisen wann er überhaupt welchen Code ausführt, indem du
Statusmeldungen via System.out.println (oder Breakpoints falls du eine IDE benutzt) einfügst.

Vielleicht erreicht er aus irgendeinem Grund deine clear-Methode gar nicht:

Aber was ganz anderes:

1) Versuch dir anzugewöhnen Instanzmethoden ohne this. aufzurufen, falls nicht unbedingt nötig.

2)
Code:
//Rechtecke zeichnen
			if(v.elementAt(i).getClass().getName().equals(Rechteck.class.getName()))		
				((Rechteck)(v.elementAt(i))).zeichne(g);

//Linien zeichnen
			else if(v.elementAt(i).getClass().getName().equals(Linie.class.getName()))
					((Linie)(v.elementAt(i))).zeichne(g);

:shock: Gruselig :cool:

Genau hierfür gibt es objektorientierte Sprachen um sein ein Gefriemel zu vermeiden.
Außerdem: Was passiert, wenn du oder andere neue Graphik-Elemente hinzufügst?
Die paintComponent-Methode muß jeweils angepaßt werden.
Ansatz:
Code:
abstract class Figur {
   abstract public void zeichne(Graphics G);
}

class Rechteck extends Figur {
    private int x;
    private int y;
    ...
    public void zeichne(Graphics G) {
        // hier deine Zeichenroutine für Rechtecke
    }
}

class Linie extends Figur {
    ...
    public void zeichne(Graphics G) {
        // hier deine Zeichenroutine für Linien
    }
}

Dann brauchst du in der paintComponent-Methode keine Typabfrage und keine Herumgecaste sondern
schreibst einfach:
Code:
for(int i=0;i<v.size();i++)
    ((Figur) v.elementAt(i)).zeichne(g);
und auch wenn andere neue Figuren hinzufügen, braucht dein Quelltext nicht geändert werden.
 

Leroy42

Top Contributor
Beni's Idee ein Interface zu verwenden, ist natürlich noch besser als meiner.

Dann müssen deine Klassen nicht unbedingt in einer Hierarchie sein.
 
C

chain

Gast
Hey danke das für die hilfe, das ist echt einfacher!
noch ne frage zu abstract:

muss ich da vor dem Konstruktor abstract schreiben???

DANKE @ all[/quote]
 

Leroy42

Top Contributor
Du mußt es nicht nur nicht, du darfst es nicht :cool:

Der Konstruktor hat zwar nichts zu tun aber er kann auch nicht überschrieben werden.

==> Schreib' keinen Konstruktor ==> Es wird der Standard-Konstruktor automatisch eingebunden.

Du brauchst nur die Konstruktoren von Rechteck, Linie, ... zu definieren.

Was anderes ist, wenn alle Figuren noch ein gemeinsames Attribut, z.B. Vornamen, haben.
Dann steht dieses Attribut bereits in der Klasse Figur und ein Konstruktor macht Sinn.

Dennoch: Beni's Vorschlag ist besser. Damit brauchst du überhaupt nichts zu ändern außer
in den 1. Zeilen der Klassendefinitionen.
Code:
interface KannMichZeichnen {public void zeichne(Graphics g);}

class Rechteck implements KannMichZeichnen {...}
 
C

chain

Gast
Nochmals danke,
habe das jetzt geändert, und es ist um welten kürzer geworden!
aber naja, bin halt noch nicht so gut!

Tolles Forum!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F NetBeans Clear and Build löscht Dateien? Java Basics - Anfänger-Themen 5
S problem mit ArrayList.clear Java Basics - Anfänger-Themen 2
B ArrayList.clear - Daten in allen Referenzen weg Java Basics - Anfänger-Themen 2
U Taschenrechner "Clear und Minusbutton" Java Basics - Anfänger-Themen 6
G Java Console clear && Methode erstellen && P Java Basics - Anfänger-Themen 6
H Clear Screen <--? Java Basics - Anfänger-Themen 3
E clear screen? Java Basics - Anfänger-Themen 2
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
D Grafik auf ein JPane ausgeben. Java Basics - Anfänger-Themen 6
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
J "Tetris" - Problem bei der Grafik Java Basics - Anfänger-Themen 5
R Grafik in CSV einbinden Java Basics - Anfänger-Themen 2
S Suche aktuelles 2D Grafik Tutorial Java Basics - Anfänger-Themen 5
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
D aufbauende Grafik Java Basics - Anfänger-Themen 13
8 Grafik erstellen Java Basics - Anfänger-Themen 6
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
L Grafik Kollision Detektierung Java Basics - Anfänger-Themen 4
L OOP Grafik in Circle Objekt füllen Java Basics - Anfänger-Themen 3
S Grafik löschen Java Basics - Anfänger-Themen 10
C Grafik einsperren Java Basics - Anfänger-Themen 2
E Quelltext für Grafik verschwindet Java Basics - Anfänger-Themen 9
S Grafik verschwindet Java Basics - Anfänger-Themen 8
O Java Grafik-Programmierung? Java Basics - Anfänger-Themen 16
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
B Grafik zeichnen Java Basics - Anfänger-Themen 25
S Teilstücke aus einer Grafik extrahieren Java Basics - Anfänger-Themen 2
Maxim6394 Grafik rotieren Java Basics - Anfänger-Themen 11
S Probleme mit JMenü und Grafik Java Basics - Anfänger-Themen 2
0 Grafik eine bestimmte Strecke laufen lassen Java Basics - Anfänger-Themen 6
R Hilfe bei erster Grafik Java Basics - Anfänger-Themen 2
A Gui Grafik Java Basics - Anfänger-Themen 4
maddin86 Grafik in .jar einbetten Java Basics - Anfänger-Themen 3
M import einer Grafik aus .jar funktioniert nicht Java Basics - Anfänger-Themen 6
M Grafik export in ein Jar File Java Basics - Anfänger-Themen 5
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
H Diverse Dinge: Unstabile Grafik, Druckt Grafik nicht,Tooltipp verschwindet hinter Grafik Java Basics - Anfänger-Themen 3
H Grafik auf einem JPanel bewegen. Java Basics - Anfänger-Themen 7
F JLabel mit Grafik füllen Java Basics - Anfänger-Themen 3
K Grafik vergrößern/verkleinern Java Basics - Anfänger-Themen 3
F Zugriffsproblem - Funktion von Grafik trennen Java Basics - Anfänger-Themen 6
H HtmlUnit - Grafik speichern Java Basics - Anfänger-Themen 2
R Taste gedrückt = Grafik zeichen ?!? Java Basics - Anfänger-Themen 8
D PNG-Grafik erzeugen Java Basics - Anfänger-Themen 8
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
T Drucken von Listen bestehend aus Grafik und Text (unter swing) Java Basics - Anfänger-Themen 7
A grafik 2d Objekte mit der Maus bewegen Java Basics - Anfänger-Themen 4
A Grafik 2d Objekte farblich ausfüllen Java Basics - Anfänger-Themen 15
C Grafik einbinden Java Basics - Anfänger-Themen 11
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
M Grafik neuzeichnen Java Basics - Anfänger-Themen 8
M Grafik als Resource laden? Java Basics - Anfänger-Themen 2
G erste Schritte in Fenster und Grafik-Programmierung Java Basics - Anfänger-Themen 2
$ Inhalt von JPanel als Grafik? Java Basics - Anfänger-Themen 2
K Grafik beim JFrame oben Links ändern nur wie ? Java Basics - Anfänger-Themen 8
J Grafik Java Basics - Anfänger-Themen 3
K Grafik abspeichern, X11 Fehlermeldung Java Basics - Anfänger-Themen 15
T Zeigerposition auf Grafik messen? Java Basics - Anfänger-Themen 5
M ausm String eine Grafik erstellen Java Basics - Anfänger-Themen 4
F Grafik auf Button passt nicht Java Basics - Anfänger-Themen 1
E Grafik in bestimmtes frame einbinden . Java Basics - Anfänger-Themen 13
F Teilen einer großen Grafik Java Basics - Anfänger-Themen 2
M Grafik erstellen Java Basics - Anfänger-Themen 8
C Grafik flimmert bzw. flackert bei Bewegung Java Basics - Anfänger-Themen 11
N Grafik formatieren Java Basics - Anfänger-Themen 7
E fehlermeldung bei rekursiver grafik Java Basics - Anfänger-Themen 11
M wie kombiniere ich grafik und swing-komponenten Java Basics - Anfänger-Themen 16
N Java Problem bei Grafik und OoP Java Basics - Anfänger-Themen 7
V Grafik ist nur ganz kurz sichtbar Java Basics - Anfänger-Themen 3
H Streichholzziehen - Grafik? Java Basics - Anfänger-Themen 3
M Grafik auf einem JPanel erneut darstellen Java Basics - Anfänger-Themen 3
S Grafik verschwindet aus JTabbedPane Java Basics - Anfänger-Themen 4
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
Alan6 Java Editor BMI Rechner Java Basics - Anfänger-Themen 7
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
J "travelling salesman problem" mit Java Editor Java Basics - Anfänger-Themen 17
NightmareVirus Java-Editor (G. Röhner): Fehlende Dateinamen Java Basics - Anfänger-Themen 1
P Kann ich Java - Programme auch ohne Editor öffnen? Java Basics - Anfänger-Themen 70
S Fehler: Editor does not contain a main type Java Basics - Anfänger-Themen 3
G Programm wird nicht ausgeführt: Editor does not contain a main type Java Basics - Anfänger-Themen 10
N Eclipse - Editor - zugeklappte Methoden speichern Java Basics - Anfänger-Themen 3
N JDK installieren Probleme mit dem Java Editor Java Basics - Anfänger-Themen 3
L Source Code in Editor kopieren Java Basics - Anfänger-Themen 5
H Interface Problem mit Java Editor Java Basics - Anfänger-Themen 15
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
K Java-Editor: "Starten" bringt Error Java Basics - Anfänger-Themen 15
P OOP Java-Editor OOP Fehlerlösung Java Basics - Anfänger-Themen 6
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
Q Classpath mit Text Editor progammieren (Classpath) Java Basics - Anfänger-Themen 5
D Erste Schritte Problem mit dem Java-Editor Eclipse [Frage] Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
T Problem mit java-editor + Scanner Java Basics - Anfänger-Themen 9
C Java Gui Editor Java Basics - Anfänger-Themen 10
K Fehlermeldung nach editor installation Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben