Aktualisierung eines Bildes innerhalb einer Komponente

Status
Nicht offen für weitere Antworten.

adouzi

Mitglied
Hallo,

nachdem ich lange im Netz gesucht habe, habe ich mich entschieden, mein Problem in diesem Forum darzustellen.
Ich erzeuge ein Frame. Dieser Frame soll einen Container enthalten. Der soll ebenfalls ein Button und ein JScrollPane enthalten. In diesem (JScrollPane) möchte ich gerne ein Bild zeigen lassen. Nachdem klicken auf das Button wird eine Barbeitung des Bildes durchgeführt und das Bild wird gespeichert unter dem gleichen Namen. Am Ende soll das Bild im JScollPane neu gezeigt werden. Mein Problem besteht darin, dass das alte Bild nach der Bearbeitung (ich meine das Bild mit dem alten inhalt) angezeigt wird und nicht das neue. Und ich weiß nicht warum.
Ich brauche wirklich eure Hilfe!!! und Danke im Vorraus!!
PS: der Code ist eine starke Vereinfachung von meinem Code. Ich möchte euch ja nicht mit zu viel Code nerven:lol:
hier ist der Code:
Code:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.*;
import javax.swing.border.TitledBorder;


public class Bild extends JFrame  {
	Container container;
	JScrollPane scrollPaneBild;
	
	public Bild(){
		container = new Container();
		scrollPaneBild= new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		
		setBild();
		setMeineAction();
	}
	
	public void setBild(){
		String bildURLEE= "C:\\cygwin\\bild1.jpg";
		JPanel bildPanelEE;
		bildPanelEE= new JPanel();
		bildPanelEE.setLayout(new GridLayout(1,1));
		bildPanelEE.setBorder(new TitledBorder("Bild"));
		bildPanelEE.add(new JLabel(new ImageIcon(bildURLEE))	);
		scrollPaneBild.setViewportView(bildPanelEE);
		
		scrollPaneBild.setViewportView(new JLabel(new ImageIcon("C:\\cygwin\\bild1.jpg")));
	}
	
	public void setMeineAction(){
		JButton button= new JButton("update Bild");
		
		container.setLayout(new BorderLayout());
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent dp){
				setAenderungAmBild();	                                         // das Bild wird hier neu erzeugt
				
	  			updateDasBild(dp);		                                 // ich möchte, das neu erzeugte Bild zeigen lassen
	  									                         // hier wird nur das alte Bild (ich meine das Bild mit dem alten inhalt) gezeigt
	  		}
		});
		container.add(button,BorderLayout.EAST);
		container.add(scrollPaneBild,BorderLayout.CENTER);
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(container,BorderLayout.NORTH);
		
	}
	
	public void updateDasBild(ActionEvent e){
		String bildURLEE= "C:\\cygwin\\bild1.jpg";
		JPanel bildPanelEE;
		bildPanelEE= new JPanel();
		bildPanelEE.setLayout(new GridLayout(1,1));
		bildPanelEE.setBorder(new TitledBorder("Bild"));
		bildPanelEE.add(new JLabel(new ImageIcon(bildURLEE))	);
		scrollPaneBild.setViewportView(bildPanelEE);
	}
	
	// das Bild wird hier neu erzeugt
	public void setAenderungAmBild(){}
	
	public static void main(String[] args){
		Bild bild= new Bild();
		bild.setSize(400,300);
		bild.setVisible(true);
	}
}
 

WieselAc

Top Contributor
Also entweder speicherst du das Bild nicht richtig, wo ich mal nicht von ausgehe, da du das ja bestimmt sschon geprüft hast oder es liegt am deinem Update.

Probier mal repaint() oder um rauszufinden ob es überhaupt ein Problem des view update ist nimm den Holzhammer: setVisible(false) / setVisible(true);

Du kannst auch mal ein removeAll() probieren bevor du das neue Bild setzt.
 

adouzi

Mitglied
Danke für die Antwort. Aber irgendwie hat das ganze nicht geholfen. Es ist immer wie vorher. Das blöde Bild kann nicht upgedatet werden. Wer noch einen Tipp hat, zügere bitte nicht, ihn mir zu sagen!!!
Danke im Vorraus!!!
 

Marco13

Top Contributor
Hm. Hab das gerade mal gestartet, mit zwei fertigen (!) verschiedenen Bildern, und das funzt. HAST du schon überprüft, ob das Bild richtig gespeichert wird? ???:L
 

adouzi

Mitglied
Marco13 hat gesagt.:
Hm. Hab das gerade mal gestartet, mit zwei fertigen (!) verschiedenen Bildern, und das funzt. HAST du schon überprüft, ob das Bild richtig gespeichert wird? ???:L

wenn ich das mit zwei verschiedenen Bildern probiere, dann klappt es. Aber wenn ich das mit einem Bild ausprobiere (ich update das Bild mittendrin), dann klappt es nicht. Du kannst das so machen, das programm starten mit dem Bild (sagen wir bild1.gif). Dann änderst du bild2.gif zu bild1.gif und klickst du auf Button==> dann wirst du sehen, dass das erste Bild (bild1.gif vor dem Ändern) angezeigt wird und nicht das zweite. Es ist wirklich komisch!!!
 

adouzi

Mitglied
Marco13 hat gesagt.:
Hm. Hab das gerade mal gestartet, mit zwei fertigen (!) verschiedenen Bildern, und das funzt. HAST du schon überprüft, ob das Bild richtig gespeichert wird? ???:L

Bezüglich der Speicherung, das Bild wird richtig gespeichert!
 

Marco13

Top Contributor
Aha!
Das kann man nicht wissen: Wenn man ein ImageIcon auf diese Weise erstellt, wird das angegebene Bild mit
Toolkit.getImage(...)
geladen. Dort steht in der Doku

The underlying toolkit attempts to resolve multiple requests
with the same filename to the same returned Image.
Since the mechanism required to facilitate this sharing of
Image objects may continue to hold onto images that are no
longer of use for an indefinite period of time, developers
are encouraged to implement their own caching of images by
using the createImage variant wherever available.

Dann kann man das ja tun.

Ist nur eine minimale Änderung in der updateDasBild-Methode.

Code:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.*;
import javax.swing.border.TitledBorder;


public class Bild extends JFrame  {
   Container container;
   JScrollPane scrollPaneBild;

   public Bild(){
      container = new Container();
      scrollPaneBild= new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

      setBild();
      setMeineAction();
   }

   public void setBild(){
      String bildURLEE= "bild1.jpg";
      JPanel bildPanelEE;
      bildPanelEE= new JPanel();
      bildPanelEE.setLayout(new GridLayout(1,1));
      bildPanelEE.setBorder(new TitledBorder("Bild"));
      bildPanelEE.add(new JLabel(new ImageIcon(bildURLEE))   );
      scrollPaneBild.setViewportView(bildPanelEE);

      scrollPaneBild.setViewportView(new JLabel(new ImageIcon("bild1.jpg")));
   }

   public void setMeineAction(){
      JButton button= new JButton("update Bild");

      container.setLayout(new BorderLayout());
      button.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent dp){
            setAenderungAmBild();                                            // das Bild wird hier neu erzeugt

              updateDasBild(dp);                                       // ich möchte, das neu erzeugte Bild zeigen lassen
                                                         // hier wird nur das alte Bild (ich meine das Bild mit dem alten inhalt) gezeigt
           }
      });
      container.add(button,BorderLayout.EAST);
      container.add(scrollPaneBild,BorderLayout.CENTER);
      getContentPane().setLayout(new BorderLayout());
      getContentPane().add(container,BorderLayout.NORTH);

   }


   public void updateDasBild(ActionEvent e){
      String bildURLEE= "bild1.jpg";
      JPanel bildPanelEE;
      bildPanelEE= new JPanel();
      bildPanelEE.setLayout(new GridLayout(1,1));
      bildPanelEE.setBorder(new TitledBorder("Bild"));

      //--------------------------------------------------------------------------------------------------- hier
      Image image = Toolkit.getDefaultToolkit().createImage(bildURLEE);
      bildPanelEE.add(new JLabel(new ImageIcon(image)));
      //--------------------------------------------------------------------------------------------------- hier
      scrollPaneBild.setViewportView(bildPanelEE);
   }

   // das Bild wird hier neu erzeugt
   public void setAenderungAmBild(){}

   public static void main(String[] args){
      Bild bild= new Bild();
      bild.setSize(400,300);
      bild.setVisible(true);
   }
}
 

adouzi

Mitglied
Marco13 hat gesagt.:
Das kann man nicht wissen: Wenn man ein ImageIcon auf diese Weise erstellt, wird das angegebene Bild mit
Toolkit.getImage(...)
geladen. Dort steht in der Doku

ich danke dir ganz sehr. Du hast mir wirklich geholfen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
D JTable Aktualisierung nach hinzufügen eines Datensatzes AWT, Swing, JavaFX & SWT 7
G Bessere Aktualisierung eines Frames AWT, Swing, JavaFX & SWT 5
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
M TableView + Datenbank Aktualisierung AWT, Swing, JavaFX & SWT 4
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
O JavaFX Aktualisierung der Scene AWT, Swing, JavaFX & SWT 1
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
F Textfeld Währungszahlen und automatische Aktualisierung AWT, Swing, JavaFX & SWT 14
S JTable nach aktualisierung - neue Zeile nicht "klickbar" AWT, Swing, JavaFX & SWT 0
T Tetris - Gui Aktualisierung AWT, Swing, JavaFX & SWT 2
Y JFormattedTextfield - Aktualisierung und Beschränkung AWT, Swing, JavaFX & SWT 4
dzim TableView - keine Aktualisierung geänderter Items AWT, Swing, JavaFX & SWT 5
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
B Problem bei der Aktualisierung des Frames AWT, Swing, JavaFX & SWT 6
lumo SWT Resize und aktualisierung der gui AWT, Swing, JavaFX & SWT 6
B GUI Aktualisierung aus/und eventListener AWT, Swing, JavaFX & SWT 3
S Swing Aktualisierung Fensters AWT, Swing, JavaFX & SWT 7
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
W Swing Aktualisierung des Bildes AWT, Swing, JavaFX & SWT 4
C JTable-Aktualisierung leidiges Thema AWT, Swing, JavaFX & SWT 18
Plastagen JTextArea CaretPosition Aktualisierung AWT, Swing, JavaFX & SWT 10
C permanente aktualisierung der Koordinaten der Maus auf einem Panel AWT, Swing, JavaFX & SWT 8
U JComboBox: (Vor)auswahl nach Aktualisierung AWT, Swing, JavaFX & SWT 2
kodela Swing Problem mit sofortiger Aktualisierung eine Textfeldes AWT, Swing, JavaFX & SWT 8
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
T Aktualisierung einer JComboBox -> RepaintProblem! AWT, Swing, JavaFX & SWT 3
H Aktualisierung Gui AWT, Swing, JavaFX & SWT 5
S Aktualisierung der GUI AWT, Swing, JavaFX & SWT 6
S Aktualisierung in regelmäßigen Abständen AWT, Swing, JavaFX & SWT 2
L Problem mit der aktualisierung von JTree und Text Area AWT, Swing, JavaFX & SWT 22
F Aktualisierung während MOUSE_PRESSED AWT, Swing, JavaFX & SWT 4
M swt - problem mit aktualisierung des tableeditors AWT, Swing, JavaFX & SWT 3
G Aktualisierung der Ausgabe in SWT AWT, Swing, JavaFX & SWT 2
A JTable - Aktualisierung und Spaltenbreite AWT, Swing, JavaFX & SWT 5
D Aktualisierung von GUI AWT, Swing, JavaFX & SWT 11
W JTextArea als Logausgabe und Aktualisierung AWT, Swing, JavaFX & SWT 3
C zu späte aktualisierung/repaint AWT, Swing, JavaFX & SWT 3
X Probleme mit aktualisierung durch Repaint() Methode AWT, Swing, JavaFX & SWT 3
R Thread-Problem (Aktualisierung von JLabel-Komponente) AWT, Swing, JavaFX & SWT 9
M problem mit textfield-aktualisierung AWT, Swing, JavaFX & SWT 4
G JScrollPane problem mit aktualisierung der daten AWT, Swing, JavaFX & SWT 3
L Aktualisierung bei JTabbedPane AWT, Swing, JavaFX & SWT 3
T Swing bei Realtime-Aktualisierung zu langsam? AWT, Swing, JavaFX & SWT 10
M JCombobox aktualisierung, beim wecheseln des Tab JTabbedPane AWT, Swing, JavaFX & SWT 3
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben