Eigene JComponent Image zeichnen

sMau90

Aktives Mitglied
Hey,
Ich habe die Klasse JComponent erweitert und würde gerne in dieser eigenen Komponente ein Bild zeichnen lassen. Ich habe mich an folgendem Beispiel aus der Insel orientiert:
Java ist auch eine Insel – 14.9 Bilder anzeigen und Grafiken verwalten

Java:
public class PreviewThemeslideComponent extends JComponent {

	private static final long serialVersionUID = -4411192008897145428L;
	private Image image;

	public void setThemeBackground(File file) {
		System.out.println("setthembg reached: " + file.getAbsolutePath());
		image = Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath());
		System.out.println(image);
		if (image != null)
			System.out.println("setthemebg if reached");
			repaint();
	}

	@Override
	protected void paintComponent(Graphics g) {
		System.out.println("paintcomp reached.");
		if (image != null)
			g.drawImage(image, 0, 0, this);
	}
}

Die Komponente wird folgendermaßen einem ScrollPane hinzugefügt
Java:
jScrollPane2 = new javax.swing.JScrollPane();
viewComponent = new PreviewThemeslideComponent();
viewComponent.setEnabled(true);
viewComponent.setVisible(true);
viewComponent.setIgnoreRepaint(false);
jScrollPane2.add(viewComponent);

Die Methode
Java:
setThemeBackground(File file)
wird von einem JComboBoxListener aufgerufen. Das scheint auch zu funktionieren, da bei Benachrichtigung des Listeners folgende System.outs ausgegeben werden (oben im Code ist zu sehen welche wo ausgegeben werden).
Java:
combobox listener reached
setthembg reached: /home/samu/Pictures/neue bilder/P1809_15-05-11.JPG
sun.awt.image.ToolkitImage@2ffb8c83
setthemebg if reached

Allerdings wird aus einem Grund der repaint nicht ausgeführt. Ich hab keine Idee woran es liegt. Das Beispiel aus der Insel funktioniert.

Hat jemand eine Idee woran es liegt?
Vielen Dank schonmal.

Grüße,
sMau
 
Hey,
Ich füge sie nicht direkt dem JFrame hinzu, sondern dem jScrollPane2 (Zeile 2 und 6)
Das ScrollPane wird natürlich einem Frame hinzugefügt, ich wollte aber nicht den Code der gesamten GUI posten, da es ziemlich viel ist.

Java:
jScrollPane2 = new javax.swing.JScrollPane();
viewComponent = new PreviewThemeslideComponent();
viewComponent.setEnabled(true);
viewComponent.setVisible(true);
viewComponent.setIgnoreRepaint(false);
jScrollPane2.add(viewComponent);

Oder ist hier schon ein Fehler?

Grüße,
sMau
 
Ich hab es lösen können.
Aus irgendeinem Grund hilft es bei der JComponent eine "preferredSize" zu setzen.
Dann funktioniert alles tadellos.

Grüße,
sMau
 

Neue Themen


Zurück
Oben