Swing Image zur Laufzeit verändern

lala84

Mitglied
Hallo,

ich sitze jetzt Stunden vor einem vermeintlich kleinen Problem :/

Ich habe folgende Ausgangssituation:
Ein Programm mit mehrere Buttons und Textfeldern und ein Bild.
Dieses Bild soll am Anfang normal initialisiert werden, und abhängig von der Nutzereingabe soll das Bild sich entsprechend ändern. Ich habe dieses Problem leider nicht auf Anhieb lösen können ( unter c++ gab es hierfür repaint Methoden).
Ich hab mal ein lauffähige GUI angehängt, und ich hoffe mal, dass ihr mir damit weiterhelfen könnt.

Wichtig ist mir auch die Tatsache, dass man BufferedImage verwendet, da das Bild unter Umständen auch verändert werden soll.

Java:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

public class Gui extends JFrame implements ActionListener {
	private static final long serialVersionUID = 1L;
	JLabel label;
	BufferedImage bufferedimage;
	JButton button;
	String url;

	public Gui() {
		GridBagLayout layout = new GridBagLayout();
		this.setLayout(layout);
		int x, y, breite, hoehe;
		breite = 1000;
		hoehe = 500;
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		x = (screen.width - getPreferredSize().width - breite) / 2;
		y = (screen.height - getPreferredSize().height - hoehe) / 2;
		this.setBounds(x, y, breite, hoehe);
		this.initWindow();
		setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	protected void initWindow() {
		button = new JButton("Do it");
		button.setBounds(300, 0, 30, 30);
		button.addActionListener(this);
		this.getContentPane().add(button);
		this.bild();
		this.pack();
	}

	public void bild() {
		try {
			url = "http://www.java-forum.org/images/misc/java_forum_org.gif";
			bufferedimage = ImageIO.read(new URL(url));
		} catch (IOException e) {
			e.printStackTrace();
		}
		label = new JLabel(new ImageIcon(bufferedimage));
		label.setBounds(0, 0, 256, 256);
		this.getContentPane().add(label);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == button) {
			try {
				url="http://www.java-forum.org/images/buttons/unmarked.gif";
				bufferedimage = ImageIO.read(new URL(url)); //sollte eingentlich nicht nütig sein wenn ich url verändere?!
			} catch (MalformedURLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			System.out.println("Button gedrückt");
			System.out.println("Aktuelle Url ist: " + url);
		}
	}
}

Und hier die Main
Java:
public class main {

	public static void main(String[] args) {
		Gui gui;
		gui = new Gui();
	}
}

Also wie gesagt, das Problem ist das Ändern des Bildes wenn das Programm schon läuft.
Ich würd mich wirklich sehr über Hilfe oder Ratschläge freuen.

Danke im Voraus.
mfg
 

Marco13

Top Contributor
Ja, nicht ganz. Wenn man die URL ändert, bekommt das bufferedImage davon nichts mit, und wenn man das BufferedImage ändert, bekommt das ImageIcon davon nichts mit. Entweder das ImageIcon entfernen und ein neues (mit den neuen BufferedImage) hinzufügen, oder das neue BufferedImage laden und in das alte reinmalen (dann passt sich aber die Größe nicht an).
 

Marco13

Top Contributor
Am einfachsten wäre wohl, nach der
Code:
 bufferedimage = ImageIO.read(new URL(url)); //sollte eingentlich nicht nütig sein wenn ich url verändere?!
sowas zu machen wie
Code:
label.setIcon(new ImageIcon(bufferedImage));
 

lala84

Mitglied
Danke euch beiden für die schnellen Antworten.
So wie es Marco13 beschrieben hat, funktioniert es auch.

Nochmal zum Verständnis: Lege ich dadurch ein neues Objekt im Speicher an ohne das alte zu löschen?
 

Marco13

Top Contributor
Ja, ich hätte auch editieren können :oops:

Durch
bufferedimage = ImageIO.read(new URL(url))
wird ein neues BufferedImage erstellt. Das alte schnappt sich früher oder später der Garbage Collector. Was meinst du genau?
 

lala84

Mitglied
Ja, ich hätte auch editieren können :oops:

Durch
bufferedimage = ImageIO.read(new URL(url))
wird ein neues BufferedImage erstellt. Das alte schnappt sich früher oder später der Garbage Collector. Was meinst du genau?

So hatte ich es mir auch gedacht, jedoch wird das alte BufferedImage anscheinend nicht gelöscht.
Bei größeren/mehreren zu ladenden Bildern dauert es 10-15sek alle Bilder zu laden. Wurden diese aber schon einmal vorher geladen, geht die Prozedur ohne/mit minimaler Wartezeit (getestet mit 100+ url und entsprechend so vielen Bufferedimages)

Und danke nochmal für die Hilfe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F SWT Image: Grösse des Bildes zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
A Skaliertes Image pixelweise bearbeiten AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
D SWT Image Farbtiefe AWT, Swing, JavaFX & SWT 2
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
Kr0e Image schärfen AWT, Swing, JavaFX & SWT 2
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
T Image auf Image zeichnen AWT, Swing, JavaFX & SWT 2
E Warum ist offscreen (mit Image) schneller? AWT, Swing, JavaFX & SWT 11
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
H Image abspeichern AWT, Swing, JavaFX & SWT 4
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
W Image in jar einbauen AWT, Swing, JavaFX & SWT 20
Luk10 AWT Image und die Skalierung! AWT, Swing, JavaFX & SWT 3
L JPanel als Image speichern AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben