Bilder in GUI ändern ohne repaint()

bob_sheknowdas

Aktives Mitglied
Hallo,

ich habe mit java3D ein Spiel programmiert und wollte das in eine GUI packen, die mir zusätzlich zum eigentlichen 3D-Spielbildschirm auch ein paar Statuswerte anzeigt.
Dazu gehört unter anderem ein Bild (png) der aktuell gezogenen Waffe.
Nun soll natürlich dieses Bild auch wechseln, wenn die Waffe gewechselt wird.

Bisher habe ich dafür die Methode setIcon() genutzt. Die führte aber zu den unschönen Effekt, dass bei Bildänderung die ganze GUI (also auch mein 3D-Spielbildschirm) kurz flackert (hätte nur das Panel, welches das waffen.png enthällt geflackert wäre das kein Problem).
Ich nehme stark an, das Flackern kommt dadurch zu stande, dass setIcon() auch repaint() aufruft, sicher bin ich mir aber nicht.

Ich habe jetzt nach Alternativlösungen gesucht. Die einzige Idee, die mir soweit gekommen ist, war mehrere Panels von vorneherein mit den Bildern auszustatten und dann während der Laufzeit bei Bedarf einfach das aktuelle Panel aus der GUI zu löschen und durch das mit dem korekkten Bild zu ersetzen.
Das hat aber so richtig auch nciht funktioniert...



Hat von euch vllt jemand eine andere Idee wie ich das umsetzen könnte?
Für jegliche Hilfe wie immer vielen Dank im Vorraus.
 

Fu3L

Top Contributor
setIcon() rufst du wo auf? Auf einem JLabel?
Dann könntest du tatsächlich deine verschiedenen JLabels einem Panel hinzufügen und immer wechseln. Dann rufst du nur panel.repaint() auf. Vllt funktioniert das, bin gespannt^^
 

bob_sheknowdas

Aktives Mitglied
setIcon() rufst du wo auf? Auf einem JLabel?
Dann könntest du tatsächlich deine verschiedenen JLabels einem Panel hinzufügen und immer wechseln. Dann rufst du nur panel.repaint() auf. Vllt funktioniert das, bin gespannt^^

Zu den ersten beiden Fragen - meine Klasse sieht kurz gefasst so aus:

Java:
public class GUI extends JFrame{

	private final Spiel parent;
	private JLabel cw;
	private ImageIcon weapon1;
	private ImageIcon weapon2;

	public GUI(Spiel spiel){
		parent=spiel;
		ladeBilder();
		cw = new JLabel(weapon1);
		add(parent);
		add(cw);
		pack();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}

	private void ladeBilder() {
		    weapon1 = new ImageIcon("src/MainPackage/Weapon1.png");
		    weapon2 = new ImageIcon("src/MainPackage/Weapon2.png");
	}

	private void updateGUI() {
		if(parent.getFlugzeug().getSchussart()==1) cw.setIcon(weapon1);
		else if(parent.getFlugzeug().getSchussart()==2) cw.setIcon(weapon2);
		
	}

Wie gesagt, deinen Vorschlag habe ich schonmal getestet, das hat aber nicht hingehauen.
Vllt könntest du mir in einem kurzem Codebeispiel zeigen wie du das genau meinst?
 

Fu3L

Top Contributor
Pack mal das JLabel auf ein extra Panel. Also du fügst ein Panel zur GUI hinzu anstelle des Labels und dann die Labels immer auf dieses extra Panel. Wenn du nun für dieses Panel repaint() aufrufst könnte es sein, dass der Rest ausgespart wird.
 

Marco13

Top Contributor
Das setIcon müßte wohl auch mit SwingUtilities auf dem EDT gemacht werden, falls das nicht schon durch einen Buttonklick oder so ausgelöst wird. Ansonsten... beschreibe mal das "Flackern" genauer... die Kristallkugel in meinem Bauch sagt: Füg' mal in der main als erste Zeile
System.setProperty("sun.awt.noerasebackground", "true");
ein... aber die irrt sich auch manchmal :D
 

bob_sheknowdas

Aktives Mitglied
Pack mal das JLabel auf ein extra Panel. Also du fügst ein Panel zur GUI hinzu anstelle des Labels und dann die Labels immer auf dieses extra Panel. Wenn du nun für dieses Panel repaint() aufrufst könnte es sein, dass der Rest ausgespart wird.

Das hat leider nicht den gewünschten Erfolg gebracht. In meinem richtigen Programm hatte ich das sogar schon so umgesetzt. Nur für das KKB war ich zu faul das mit aufzunehmen.


Das setIcon müßte wohl auch mit SwingUtilities auf dem EDT gemacht werden, falls das nicht schon durch einen Buttonklick oder so ausgelöst wird. Ansonsten... beschreibe mal das "Flackern" genauer... die Kristallkugel in meinem Bauch sagt: Füg' mal in der main als erste Zeile
System.setProperty("sun.awt.noerasebackground", "true");
ein... aber die irrt sich auch manchmal :D

Schonmal über eine Kariere als professioneller Wahrsager nachgedacht - die richtigen Utensilien scheinst du ja schon zu haben :D
Das System.set... funktioniert wie gewünscht, vielen Dank dafür.
Kannst du mir noch erklären, was der Befehl auslöst?
 

Marco13

Top Contributor
Sooo genau kann ich das auch nicht (und ich bin nicht sicher, ob es überhaupt jemand kann :D ). Man findet im Netzt einiges dazu. Im wesentlichen gilt so diese "Faustregel": Wenn irgendwas mit OpenGL (also auch Java3D) immer mal so grau aufflackert (oder grau bleibt und erst bei einem Neuzeichnen was zu sehen ist) hilft meistens diese magische Zeile ....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Bilder einbinden, bzw. ändern Spiele- und Multimedia-Programmierung 5
M Bilder werden unscharf angezeigt Spiele- und Multimedia-Programmierung 5
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
beatles Minesweeper - keine Bilder Spiele- und Multimedia-Programmierung 3
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
O Bilder senden TV über DLNA? Spiele- und Multimedia-Programmierung 0
T Bilder Elegant darstellen... Spiele- und Multimedia-Programmierung 7
M Bilder effizient speichern/serialisieren Spiele- und Multimedia-Programmierung 10
M Bilder in Java Spiele- und Multimedia-Programmierung 7
D Slick Lib - Bilder einlesen funktioniert nicht Spiele- und Multimedia-Programmierung 2
T Spielautomat bilder vergleichen Spiele- und Multimedia-Programmierung 34
A Bilder werden nicht geladen Spiele- und Multimedia-Programmierung 6
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5
A Bilder (auf JPanels) auf komplette Zellengröße (GridBagLayout) skalieren Spiele- und Multimedia-Programmierung 2
I Bilder aus Quaxli's Tutorial Spiele- und Multimedia-Programmierung 3
A bilder performant und unhässlich skalliert darstellen? Spiele- und Multimedia-Programmierung 10
A 2 Bilder übereinander legen Spiele- und Multimedia-Programmierung 15
J 2D-Bilder in Java3D Spiele- und Multimedia-Programmierung 4
A Bilder(BMP) speichern Spiele- und Multimedia-Programmierung 2
S Bilder zuscheiden - Werte von php übergeben Spiele- und Multimedia-Programmierung 7
D Bilder besser interpolieren Spiele- und Multimedia-Programmierung 4
F Dynamische Bilder erzeugen? Spiele- und Multimedia-Programmierung 7
R Bilder aus animierter .gif extrahieren? Spiele- und Multimedia-Programmierung 4
C jpg.Bilder teilen/bearbeiten für Puzzle Spiele- und Multimedia-Programmierung 7
A Bilder bewegen Spiele- und Multimedia-Programmierung 2
M Bilder verzerren [Rechteck -> Trapez] Spiele- und Multimedia-Programmierung 4
K Bilder drehen Spiele- und Multimedia-Programmierung 5
H Bilder speichern 2 - Methode richten? Spiele- und Multimedia-Programmierung 2
H Bilder speichern Spiele- und Multimedia-Programmierung 3
A Bilder flackern Spiele- und Multimedia-Programmierung 5
T Gekachelte Bilder darstellen Spiele- und Multimedia-Programmierung 2
M Minecraft Minecraft 1.12.2 Plotrand ändern Spiele- und Multimedia-Programmierung 1
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
K FIguranimation bei Laufrichtungen ändern?! Spiele- und Multimedia-Programmierung 12
M Wie kann man die Auflösung eine fertigen Programms ändern? Spiele- und Multimedia-Programmierung 1
J Unicode Font Größe ändern Spiele- und Multimedia-Programmierung 2
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
F Bewegungsrichtung ändern Spiele- und Multimedia-Programmierung 4
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
P Prozess Lautstärke ändern Spiele- und Multimedia-Programmierung 4
H BranchGroup ändern Spiele- und Multimedia-Programmierung 4
U Value in Programm ändern? Spiele- und Multimedia-Programmierung 5
aze Java3d:Helligkeit von Shape3D ändern Spiele- und Multimedia-Programmierung 2
M Variable die eine Klasse enthält ändern Problem Spiele- und Multimedia-Programmierung 16
truesoul Picking und Farbe ändern Spiele- und Multimedia-Programmierung 3
R Nachträgliches ändern von Vertex Arrays. Wie geht das? Spiele- und Multimedia-Programmierung 3
F Farbe ändern bei Überlappung Spiele- und Multimedia-Programmierung 2
U Canvas Ursprung ändern Spiele- und Multimedia-Programmierung 11
E Durch Klick auf den JButton will ich die Farbe ändern? Spiele- und Multimedia-Programmierung 8
DEvent [2D] Farbe bestimmten Pixels eines Bildes ändern Spiele- und Multimedia-Programmierung 3
S Dimensionen/Maßstab des J3D universe ändern Spiele- und Multimedia-Programmierung 8
U JPG in größe ändern und speichern Spiele- und Multimedia-Programmierung 3
N Bild im Panel ändern Spiele- und Multimedia-Programmierung 3
C Text in/auf Text2D ändern Spiele- und Multimedia-Programmierung 4
I Kameraposition in Java3d ändern Spiele- und Multimedia-Programmierung 13
E Programmierung eines 2.5D Point&Click Adventures ohne Spieleengine machbar? Spiele- und Multimedia-Programmierung 14
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
E Rotation um Bildmittelpunkt ohne Affine Transform!!!!! Spiele- und Multimedia-Programmierung 13
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
S Mausklicks innerhalb eines JFrames/SWTBrowser ohne richtige Maus simulieren Spiele- und Multimedia-Programmierung 6
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
Devil0s 2D Stadt Generator/2D Welt speichern OHNE Tiles Spiele- und Multimedia-Programmierung 5
H zwei ints als key in map (ohne long) Spiele- und Multimedia-Programmierung 16
M Multiplayer Game mit Frontend auf HTML5 - ohne ständigen Client Request - Möglich?! Spiele- und Multimedia-Programmierung 12
S Sounds abspielen, ohne sie jedesmal neu zu laden Spiele- und Multimedia-Programmierung 8
C java 3d ohne Java3d Spiele- und Multimedia-Programmierung 28
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
K Java3D als Applet ohne Installation von Java3d Spiele- und Multimedia-Programmierung 6
M Eigene Renderengine ohne Java3D,etc. Spiele- und Multimedia-Programmierung 19
M Aktien-Spiel ohne GUI Spiele- und Multimedia-Programmierung 28
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
A JMF ohne Installation Spiele- und Multimedia-Programmierung 4
Developer_X Sound Lautstärke ohne spezifische API regulieren Spiele- und Multimedia-Programmierung 3
L JMF Player spielt mp3 nur ohne Ton Spiele- und Multimedia-Programmierung 14
M Binärbaum ohne Überlappung zeichnen Spiele- und Multimedia-Programmierung 3
T 3D-Tetris Feld neuzeichnen ohne neue Branchgroup Spiele- und Multimedia-Programmierung 18
O Java3D-Applet ohne Java3D-Runtime ausführen Spiele- und Multimedia-Programmierung 2
L klick auf ComboBox ohne ActionListener --> CPU ausgelaste Spiele- und Multimedia-Programmierung 13
H Tic Tac Toe / 3 Gewinnt OHNE Applet Spiele- und Multimedia-Programmierung 9
S 3D Objekte ohne Java3D darstellen? Spiele- und Multimedia-Programmierung 10
B Sudoku Generator ohne Solerver möglich? Spiele- und Multimedia-Programmierung 20
G Farbig zeichnen ohne java.awt.Color? Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben