2D-Grafik paintComponent quetsch alles in Panel

Kenan89

Bekanntes Mitglied
Hallo Leute,

ich bin dabei ein TileEditor zu schreiben und in meiner Klasse DrawTable("Zeichenblatt") existiert die paintComponent Methode. In dieser soll später durch addDirtyRegion eion ausgewähltes Tile gezeichnet werden.
Momentan ist die Methode paintComponent leer, d.h. es steht kein Code darin.

Sobald das Programm aber startet, scheint es so, als wolle er den ganzen JFrame in mein DrawTable-Panel zeichnen. Kennt einer dieses Verhalten und den Weg, es zu umgehen?

Danke im voraus.

Ein Screenshot:
sefgux6x.png
 
Zuletzt bearbeitet:

Kenan89

Bekanntes Mitglied
Stell mal ein KSKB rein, aus dieser Beschreibung lässt nicht kaum etwas vermuten.
Hehe, das Projekt ist schon ziemlich groß.
Ich bin seit 5 Minuten am Erstellen eines kleinen, überschaubaren Projekt, aber irgendwie funktioniert es da mit dem painten. Wenn ich ein überschaubares Projekt mit dem gleichen Fehler habe, poste ich. Wenn ihc denn Fehler dann nicht selber finde.^^
 

XHelp

Top Contributor
Jetzt wäre ein guter Zeitpunkt um selber nach der Fehlerursache zu suchen, in dem du dein funktionierendes KSKB mit dem eigentlich Programm vergleichst um die Unterschiede zu finden.
 

Kenan89

Bekanntes Mitglied
Theoretisch ja...
Aber es geht alles mit meinem Kurzen Ausführbaren Programm wunderbar.

Jetzt habe ich super.paintComponent(g) aufgerufen in der paint Component Methode und jetzt funktioniert es alles wunderbar... Das heisst, die DrawTable JPanel ist leer.

Ich weiss leider nicht wieso das so ist, und ob ich mein Fehler verbessert, oder nur unter den Tisch gekehrt habe...
 

Kenan89

Bekanntes Mitglied
Okay, das hat mein Problem nicht gelöst, denn jetzt kann ich gar nicht mehr auf dem Panel zeichnen. Keiner schon mal mit diesem Problem konfrontiert worden? Bis jemand antwortet suche ich mal weiter den Fehler :D
 

jgh

Top Contributor
rufst du das super.paintComponent(Graphics g) auch als erstes auf und dann machst du deine anderen sachen?
 

Marco13

Top Contributor
Momentan ist die Methode paintComponent leer, d.h. es steht kein Code darin.
Daran liegt's. Schreib zumindest
super.paintComponent(g);
an den Anfang (das kann da auch später noch stehenbleiben)
 

Kenan89

Bekanntes Mitglied
Ja, habe ich...
Irgendetwas bringe ich durcheinander...
Ich habe jetzt eine light-Version davon programmiert, wo alles wunderbar passt...
Ist echt komisch dass die JTextField-Inhalte von anderen JPanels, wo sich gar keine paintComponent Methoden in deren Klassen befinden, in die Klasse DrawTable gezeichnet werden. Eigentlich sollte in DrawTable nur das gezeichnet werden, was auch im JPanel DrawTable sich abspielt. WIe kommen denn da fremde JTextFields rein?
Hier die jar Datei falls es sich jemand ansehen will. Quellcode kann ich nachschicken, ist halt chon sehr viel mittlerweile.
Ladet euch einfach die runnable jar und das Tileset und steckt beide in denselben Ordner, denn ihr müsst das TileSet mit JFileChooser öffnen.

Vielleicht kann einer das Problem durch bloßes zuschauen erkennen.
 

Anhänge

  • loop.jar
    309,9 KB · Aufrufe: 7
  • Tileset.png
    Tileset.png
    63,4 KB · Aufrufe: 39

Kenan89

Bekanntes Mitglied
Jetzt habe ich noch etwas interessantes gesehen. Öffnet man den JFileChooser um eine neue Datei anzulegen, und schließt ihr wieder, ohne eine Datei zu laden, dann wird auch das JFileChooser Fenster
in den DrawTable gezeichnet.

Das könnt ihr im obigen loop.jar ebenfalls sehen. Öffnet den JFileChooser und schließt ihn mal wieder.

Komisch...
 

Marco13

Top Contributor
Zum wie-oft-auch-immer'sten mal: Wenn du hier
Java:
	public void paintComponent(Graphics g){
	
		if(paint & tile!=null){
			g.drawImage(tile, startX, startY, this);
		}

	}
Die Zeile
Java:
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		if(paint & tile!=null){
			g.drawImage(tile, startX, startY, this);
		}

	}
einfügst, tritt das Problem dann immernoch auf?
 

Kenan89

Bekanntes Mitglied
Nein, denn dann wird alles gelöscht.
Wenn man ein Tile auswählt dann kann man über die DrawTable fahren und sieht eine Preview des ausgeählten Tiles auf der Maus Position. Klickt man, dann wird dieser Tile auf DrawTable gezeichnet.
Genau da kann ich super.... nicht gebrauchen, weil er dann auch das bereits gezeichnete löschen würde.
 

Marco13

Top Contributor
Ja, und das ist auch richtig so. Wenn dort irgendwas gezeichnet werden soll (egal ob eine "Preview" oder irgendwas anderes) muss es eben gezeichnet werden. Sich durch das Weglassen von super.paintComponent darauf zu verlassen, dass dort noch irgendwas von einem vorherigen Zeichendurchlauf zu sehen ist... ... ....

... ... sorgt für solche Threads wie diesen hier ;)
 
S

SlaterB

Gast
eine der Standard-Alternative erwähnt:
dauerhaftes Zeichnen auf einem Image-Objekt, in der paint-Methode super-Aufruf + Bild malen,
dann hat man immern noch den dauerhaften Zustand
 

Kenan89

Bekanntes Mitglied
Hä?
Ich verstehe deinen Post nicht ganz. Wie soll ich mit meinem TileEditor etwas zeichnen können, wenn nach jedem Mausklick auf DrawTable die ganze vorher gezeichnete Karte gelöscht wird?
Das kannst du ja nicht gemeint haben.
EDIT: Sagen wir, du zeichnest eine Grasfläche, nach jedem Klick ist das GrasTile vom vorherigen Zeichnen weg.

eine der Standard-Alternative erwähnt:
dauerhaftes Zeichnen auf einem Image-Objekt, in der paint-Methode super-Aufruf + Bild malen,
dann hat man immern noch den dauerhaften Zustand

Das könnte klappen, aber nicht etwas zu umständlich? Ich verstehe nur nicht, ob ich ein Fehler gemacht habe, oder ob es normal ist, dass irgenwie Spuren von anderen Panels in die DrawTable kommt.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> Ich verstehe nur nicht, ob ich ein Fehler gemacht habe, oder ob es normal ist, dass irgenwie Spuren von anderen Panels in die DrawTable kommt.

ich persönlich kann es leider nicht sagen, so komisch ist Swing häufig,
das super würde ich nicht weglassen, deswegen solche Fehler sind meiner Ansicht nach aber nicht ok,
und wenn ich mich gerade entscheiden müsste, dann glaube ich dass das alleine auch nicht die Ursache sein kann,
ist aber nahe 50/50..
 

XHelp

Top Contributor
Wenn Java sich entschließt irgendwas neuzuzeichnen, dann ist das eben so. Du kannst natürlich versuchen da drumherumzukommen und genau das Ergebnis bekommen welches du jetzt hast - es funktioniert nicht so richtig. Oder du nimmst hin und machst es so, wie man es machen sollte.
 

Kenan89

Bekanntes Mitglied
Bevor ich mein TileEditor angefangen habe, habe ich mir ein TileEditor Tutorial angeschaut und der funktionierte auch ohne super.paintComponent(g). Hier der Link dazu:
Karteneditor
 

Marco13

Top Contributor
ich persönlich kann es leider nicht sagen, so komisch ist Swing häufig,
das super würde ich nicht weglassen, deswegen solche Fehler sind meiner Ansicht nach aber nicht ok,

Als Swing-Fan muss ich da intervenieren :D Swing ist nicht "komisch". Es gibt glitches und beliebte Anfängerfehler (getGra****) aber die gibt es bei jedem GUI-Toolkit (was soll man sonst nehmen? SWT? :lol: ). In diesem Fall zeigt er dort wohl nur "irgendwas", was eben zufällig gerade in dem Speicherbereich der Grafikkarte lag, die jetzt diesem Fensterbereich entspricht (das könnte auch etwas Swing-fremdes sein). Und wenn man ihm sagt: "Wenn dieser Bereich des Fensters gezeichnet werden soll, dann mache NICHTS", dann macht er da eben NICHTS - auch nicht das löschen, was evtl. schon dort zu sehen ist...

@Kenan89: Ohne das im Detail nachvollzogen zu haben, sieht es aus, als würde er dort (in Abhängigkeit von getClipBounds, aber das ist hier dann zweitrangig) praktisch jedes mal den kompletten (relevanten) Zeichenbereich füllen. Dann sieht man natürlich nichts altes mehr...
 

Kenan89

Bekanntes Mitglied
Was ich nicht verstehe.
Das JPanel DrawTable wird ja vollgefüllt mit Grafiken, die eigentlich in anderen JComponenten sind. Beim ersten Laden einer Karte kann man das ja mit super.paintComponent(g) umgehen. Wenn ich aber dann auf ein Tile in der Box klicke und damit im Panel zeichnen will, dann werden mit dort in den Koordinaten 0,0 die x,y Bereiche der Maus angezeigt, die eigentlich im Panel "Details" zu sehen sind. Die beiden Panels(DrawTable und Details) haben nichts gemeinsam. Wie kann das passieren? Irgendwo passt der Code nciht.
 

Marco13

Top Contributor
Der Code ist (soweit man das behaupten kann) "richtig", abgesehen vom fehlenden super-Aufruf. Mehr weiß ich dazu jetzt nicht zu sagen :bahnhof:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
H new Operator in paintComponent - Speicherprobleme vorprogrammiert? AWT, Swing, JavaFX & SWT 2
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
G update, paintComponent AWT, Swing, JavaFX & SWT 1
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
C Objekt an paintComponent weitergeben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
D PaintComponent wird nicht aufgerufen AWT, Swing, JavaFX & SWT 3
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I (JPanel) paintComponent mit Zeitverschiebung (Sleep/Wait) AWT, Swing, JavaFX & SWT 1
K Swing paintComponent, JPanel auslagern, ChangeEvents AWT, Swing, JavaFX & SWT 7
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
B AWT paintComponent wird nur 2 mal ausgeführt?! AWT, Swing, JavaFX & SWT 5
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
G Swing Flackern nach Override von paintComponent() AWT, Swing, JavaFX & SWT 3
M Swing paintComponent in rekusivem JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 2
M DefaultTableModel ruft paintComponent auf ! AWT, Swing, JavaFX & SWT 4
T Swing paintComponent(); AWT, Swing, JavaFX & SWT 24
K Swing JButton paintComponent überschreiben AWT, Swing, JavaFX & SWT 5
B 2D-Grafik paintComponent für rechteckigen Bereich? AWT, Swing, JavaFX & SWT 6
P Swing problem mit paintComponent AWT, Swing, JavaFX & SWT 2
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
K paintComponent nicht aufgerufen AWT, Swing, JavaFX & SWT 2
J Mal wieder Probleme mit paintComponent AWT, Swing, JavaFX & SWT 3
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
S auf paintComponent() warten AWT, Swing, JavaFX & SWT 34
W JPanel Überschreiben // paintComponent? AWT, Swing, JavaFX & SWT 4
propra Wieso wird paintComponent() beim Start 2 malausgeführt? AWT, Swing, JavaFX & SWT 4
T BufferedImage bei paintComponent AWT, Swing, JavaFX & SWT 6
P JLabel paintComponent AWT, Swing, JavaFX & SWT 3
Z Swing paintcomponent und menbar Problem AWT, Swing, JavaFX & SWT 3
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
R 2D-Grafik auf JPanel zeichen - ohne @Override paintComponent AWT, Swing, JavaFX & SWT 6
A Probleme mit paintComponent & BorderFactory AWT, Swing, JavaFX & SWT 2
A paintComponent AWT, Swing, JavaFX & SWT 4
T Rechtecke zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 3
R paintComponent direkt bei actionPerformed aufrufen AWT, Swing, JavaFX & SWT 2
P Swing Vom BufferedImage bei paintComponent nur soviel zeichnen, wie nötig AWT, Swing, JavaFX & SWT 3
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
A paintComponent() - Animation AWT, Swing, JavaFX & SWT 2
K JPanel und paintComponent AWT, Swing, JavaFX & SWT 8
E 2D-Grafik Zeichnen außerhalb der "paintComponent"-Methode? AWT, Swing, JavaFX & SWT 5
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Game of Life - PaintComponent-Problem / Timer? AWT, Swing, JavaFX & SWT 8
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
J paintComponent() übergeben AWT, Swing, JavaFX & SWT 4
N paintComponent für Graphics ansprechen AWT, Swing, JavaFX & SWT 2
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
kodela Swing paintComponent() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 19
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
E WARUM wird paintComponent nicht aufgerufen? AWT, Swing, JavaFX & SWT 12
C paintComponent mit Maus verschieben - wie? AWT, Swing, JavaFX & SWT 2
G Swing paintComponent Effizienz? AWT, Swing, JavaFX & SWT 4
R paintComponent Kollision AWT, Swing, JavaFX & SWT 2
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
A Probleme mit paintComponent() AWT, Swing, JavaFX & SWT 2
T Swing paintComponent problem AWT, Swing, JavaFX & SWT 3
MrGe getWidth(); getHeight(); außerhalb von paintComponent AWT, Swing, JavaFX & SWT 4
A paintComponent überdeckt ... AWT, Swing, JavaFX & SWT 13
JFeel-x repaint für Aufruf von paintComponent-Klasse ungeeignet? AWT, Swing, JavaFX & SWT 11
F Wer ruft paintComponent() Methode auf? AWT, Swing, JavaFX & SWT 9
@ JPanel: kein paintComponent() trotz repaint() AWT, Swing, JavaFX & SWT 4
G paintComponent Problem AWT, Swing, JavaFX & SWT 6
T paintComponent() überschreiben: Platz für Border freihalten? AWT, Swing, JavaFX & SWT 6
G paintComponent JPanel im JApplet AWT, Swing, JavaFX & SWT 2
X Speichern in der paintComponent() Methode AWT, Swing, JavaFX & SWT 15
W JLabel + paintComponent AWT, Swing, JavaFX & SWT 2
V Wieviel Logik in paintComponent? AWT, Swing, JavaFX & SWT 7
hdi super.paintComponent(g); soll nicht alles löschen AWT, Swing, JavaFX & SWT 2
G paintComponent() Methode für JPanel in NetBeans überschreibe AWT, Swing, JavaFX & SWT 2
L Problem mit paintComponent() under java < 1.6 under Windo AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
N Probleme mit paintComponent und GradientPaint AWT, Swing, JavaFX & SWT 5
B JPanel#paintComponent(Graphics g) << flackert oO AWT, Swing, JavaFX & SWT 3
D performance problem: paintcomponent, alphacomp, bufferedImag AWT, Swing, JavaFX & SWT 10
A Probelme mit großen BufferedImage in paintComponent AWT, Swing, JavaFX & SWT 7
C Bei Skalierung wird paintComponent() nicht aufgerufen,warum? AWT, Swing, JavaFX & SWT 4
K Problem repaint()->paintComponent AWT, Swing, JavaFX & SWT 9
G paintComponent wird nicht dargestellt AWT, Swing, JavaFX & SWT 5
T Kuchendiagramm - mit paintComponent nach JButton druck zeich AWT, Swing, JavaFX & SWT 4
R paintComponent wird anscheinend nicht aufgerufen AWT, Swing, JavaFX & SWT 2
T JPanel mit paintComponent methode im JInternalFrame AWT, Swing, JavaFX & SWT 3
M super.paintComponent(g); aufrufen oder nicht? AWT, Swing, JavaFX & SWT 8
M Unterschied zwischen paintComponent() und paint()? AWT, Swing, JavaFX & SWT 4
D JTextArea in der paintComponent () hinzufügen? AWT, Swing, JavaFX & SWT 9
raptorrs J2D paintComponent: Nur ganzzahlige (-int) Werte möglich? AWT, Swing, JavaFX & SWT 3
B Schon wieder ein Problem mit paintComponent(). AWT, Swing, JavaFX & SWT 2
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben