Swing repaint, repaint, repaint

J

javamacher

Gast
Hallo,
ich habe ein (in meinen Augen) gewaltiges Problem mit der Methode repaint().
Ich mache ein Image und füge es derzeit einem JFrame hinzu.
Im Grunde klappt alles auch ganz fein und nett, solange man sich ja nicht ans Minimieren oder verschieben des Fensters macht, denn durch das verschieben oder minimieren zeichnet er mir imme rwieder das nächste BIld. Also im grunde handelt es sich um eine reihe von bildern welche ich nur über
einen button repainten möchte.
Also habe ich gegooglet und bin auf jdialog gestoßen. dieser umgeht nun das problem mit dem minimieren, was auch wunderbar so ist, aber das problem mit dem repaint beim verschieben bleibt und lässt sich vermutlich auch nicht verhindern, wenn ich das fenster immer zurück an den ursprung stellen lasse.
Entschuldigt die grausame Rechtsschreibung, es ist spät :oops:

Würde mich über Vorschläge oder Ideen sehr freuen.
 
S

Spacerat

Gast
Wir würden uns über ein bissl' Code sehr freuen... insbesondere die Bereiche mit den paint-Methoden. Ich wette fast, dass dort ein Zähler für die einzelnen Bilder hochgezählt wird. Zumindest wird dort dafür gesorgt, dass das Bild getauscht wird. Fenster öffnen, vergrössern, verkleinern oder verschieben haben nunmal ein repaint zur Folge, den man nicht verhindern kann. Deswegen wohl auch dieses Verhalten.
 
J

javamacher

Gast
hier die klasse die beim repaint neu aufgerufen wird du hast recht mit dem index, der ist aber leider auch dringend nötig ich habe überall wos ging abkürzungen reingebaut, denn es geht ja nicht ums laden der bilder...

Java:
public class Painting extends JPanel {
	
	private static int index = 0;

	public void paintComponent(Graphics g) {
		
		g.setColor(Color.black);
		g.fillRect(0, 0, this.getWidth(), this.getHeight());
		
		
		Image 1 = new ImageIcon("1").getImage();
		Image 2= new ImageIcon("2").getImage();
		Image 3= new ImageIcon("3").getImage();
		Image 4= new ImageIcon("4").getImage();
		
		switch (index) {
		case 0: Main.getFrame().repaint(); break;
		case 1:
			g.drawImage(1, 10, 10, 450, 500, this);
			break;
		case 2:
			g.drawImage(2, 10, 10, 400, 550, this);
			break;
		case 3:
			g.drawImage(3, 10, 10, 400, 550, this);
			break;
		case 4:
			g.drawImage(4, 10, 10, 400, 550, this);
			break;

		default: g.drawImage(1, 10, 10, 400, 400, this);
			break;
			
			
		}
		
		index++;
	
	}
	public static int getIndex() {
		return index;
	}
}



und hier der code zum button der als allereinzigster den repaint aufrufen sollte.


Java:
	public class bildwechsel implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
		
			Main.getFrame().repaint();
	
			Main.getA().setText("");
}


ich habe auch einen repaint ignore versuch in der main gestartet und nur im actionlistener um die im letzten codestück genannte Main.getFrame().repaint(); eine auflösung dieses repaint ignores aber es funzt nicht

hier noch der entscheidende part in der main

Java:
	bildpanel = new Painting();
		bildpanel.setPreferredSize(new Dimension(600, 600));
		bildpanel.setBackground(Color.black);
		frame.add(BorderLayout.CENTER,bildpanel);
		bildpanel.setVisible(true);
 

jgh

Top Contributor
[java=11] Image 1 = new ImageIcon("1").getImage();
Image 2= new ImageIcon("2").getImage();
Image 3= new ImageIcon("3").getImage();
Image 4= new ImageIcon("4").getImage();[/code]

in Java dürfen Variablennamen NICHT mit einer Zahl beginnen...!!!

Sowas dürftest du nie kompiliert bekommen...wenn du ein KSKB zustande bekommst, zeige ich dir gerne wie das funktionieren könnte.
 
J

javamacher

Gast
ist korrekt... aber es sind ja auch nur abkürzungen... für den text der da stand.
ich wünschte mir nur eine idee wie man ein image in einem jpanel durch methodenaufruf ausgeben kann und nicht durch repaint... dann könnte ich die methode selbstständig aufrufen und wäre nicht vom repaint abhängig was erhebliche vorteile bergen würde....
 

bERt0r

Top Contributor
In deiner Paint methode sollst du nichts anderes machen als zeichnen. Sämtliche logik oder initialisierung (bilder laden, zähler hochzählen, index verändern) hat dort nichts zu suchen und ein repaint im paintComponent schon gar nicht. Wenn du willst dass sich alle x millisekunden die anzeige ändert, brauchst du einen Thread, der dir den index verändert und dann x ms schläft.

Edit, vielleicht so anschaulicher:
Java:
class BildKomponente extends JComponent
{
BufferdImage[] bilder;
int index=0;
BildKomponente()
{
ladeBilder();
}

public nächstesBild()
{
index=(index+1)%bilder.length;
}

public void paintComponent(Graphics g)
{
g.drawImage(bilder[index],0,0,null);
}
}
Und dein Thread ruft jetzt in einer Schleife nächstesBilde(), repaint() und sleep(x) auf.
 
Zuletzt bearbeitet:

jgh

Top Contributor
and don´t forget to call the super.methodnameCall() at first...

Java:
public void paintComponent(Graphics g){ 
                     super.paintComponent(g);
 
S

Spacerat

Gast
Na also... da ist es doch schon... "index++" gehört nicht in die "paintComponent()"! Mach da 'nen Member von und pack's in den ActionListener.
[EDIT]Oh... hab' bei den ganzen Beschwerden der anderen um bERt0r's Beitrag drumherum gelesen...[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
P 2D-Grafik repaint(); steigender RAM Verbauch AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
D Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
J repaint() nicht richtig? AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
V Swing Bei repaint() tut sich nichts AWT, Swing, JavaFX & SWT 7
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
D Swing Actionlistener verhindert repaint?! AWT, Swing, JavaFX & SWT 2
S JLabel repaint AWT, Swing, JavaFX & SWT 8
C Swing Linux mag mein Swing-repaint() nicht... AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
O Girdbag Formatierung nach repaint verloren AWT, Swing, JavaFX & SWT 2
E Swing - repaint() AWT, Swing, JavaFX & SWT 6
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
A Swing Infinite repaint loop unterbrechen AWT, Swing, JavaFX & SWT 7
hdi Swing EDT macht kein repaint() AWT, Swing, JavaFX & SWT 2
F "Verrutschen" von Komponenten bei repaint() AWT, Swing, JavaFX & SWT 9
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
T Fenster wird trotz repaint() und revalidate() nicht sofort neu gezeichnet AWT, Swing, JavaFX & SWT 6
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
J Swing Verständnis-Problem repaint(int x,int y,int width,int height) AWT, Swing, JavaFX & SWT 3
C Frame repaint hat keine Wirkung AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben