Image wird nicht (immer) in paintComponent gezeichnet?

Soahc

Aktives Mitglied
Hallo,

ich arbeite gerade an einer Swing-Anwendung für Touchscreens. Hierfür habe ich unter anderem einen JButton erweitert, webei ich die paintComponent Methode überschreibe:

Java:
private Image img;
private String caption;
private Font font;

...

@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		if (img!=null){
			g2.drawImage(img, 0, 0, getWidth(), getHeight(), null);
		}else{
			g2.setColor(Color.WHITE);
			g2.fillRect(0, 0, getWidth(), getHeight());
		}
		g2.setFont(font);
		int captionwidth = g2.getFontMetrics().stringWidth(caption);
		g2.setColor(Color.BLACK);
		g2.drawString(caption, getWidth()/2-(captionwidth/2), getHeight()-7);
	}

Falls die Image-Variable nicht null ist, soll das Image auf die gesammte Button-Oberfläche gezeichnet werden. Nun habe ich auf dem ContentPane des ersten JFrames, das angezeigt wird mehrere solcher Buttons hinzugefügt und absolut positioniert und es zeigt sich das merkwürdige Verhalten, dass die Images nicht immer überall sofort gezeichnet werden -> bei manchen Buttons sind sie erst sichtbar, wenn ich mit dem Mauszeiger über den Button fahre, also die Anzeige der Componente refreshed wird. Ich habe nun schon allerhand ausprobiert, aber konnte den Bug bisher nicht beheben. Merkwürdiger weise scheint das Problem auch irgendwie mit der absoluten Position der Buttons auf dem Frame zu tun zu haben. Umso weiter rechts der Button, desto eher wird das Bild anfangs nicht gezeichnet. Auch ein updateUI() des ContentPains verändert nichts.

Hat jemand vielleicht einen Tip, woran das liegen kann?

liebe Grüße, Soahc
 
B

Beni

Gast
Wieso benutzt du nicht JButton.setIcon? Dann musst du nichtmal neuen Code schreiben.

Vielleicht hilft ein "repaint()" nachem das Bild gesetzt wurde? Ein "updateUI" initialisiert das LookAndFeel neu... das hilft dir garnichts.
 
T

Tomate_Salat

Gast
wie/wann setzt du das Image? Wenn es über den Setter geschieht, solltest du dort ein repaint-Aufruf haben:
[java=103]
public void setImage(BufferedImage img) {
this.img=img;
repaint();
}
[/code]
 

Soahc

Aktives Mitglied
Wieso benutzt du nicht JButton.setIcon?

Weil ich einen Button haben möchte, der ein ganz eigenes Aussehen hat, auch der Text soll an einer anderen Stelle als der Default-Stelle sein.

wie/wann setzt du das Image?
Das image wird im Konstruktor gesetzt. Ein repaint hilft hier leider nicht weiter, da die Komponente ja noch gar nicht auf dem Panel liegt und somit auch nicht gezeichnet werden kann.
 

Soahc

Aktives Mitglied
@Beni: Eigentlich hast Du doch recht. Ich kann ja das Bild über setIcon einbinden und den Text bei paintComponent so positionieren, wie ich es will.

Danke für den Gedankenanstoß!
 

Soahc

Aktives Mitglied
Ich habe mir eine eigene Ressource-Manager Klasse geschrieben, die bei Programmstart alle Bilder einliest und diese per Hashmap (dateiname als Schlüssel) zur verfügung stellt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
A image wird nicht geladen in frame AWT, Swing, JavaFX & SWT 2
G Der Inhalt eines Image wird nicht vollständig angezeigt AWT, Swing, JavaFX & SWT 4
I image wird nicht gezeichnet AWT, Swing, JavaFX & SWT 4
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
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
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
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
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
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
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
L Swing Image zur Laufzeit verändern 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

Ähnliche Java Themen

Neue Themen


Oben