Swing Bilder in Swing anzeigen

MEJ131720

Mitglied
Hallo,

ich versuche Bilder im Fenster anzuzeigen. Da mehrere Versuche gescheitert sind, habe den Code eines Tutorials 1 zu 1 als Beispiel übernommen.
Dort wird das Bild und das Icon auf dem Button angezeigt. Bei mir aber nur das Icon auf dem Button.

Kann es andere Gründe als den Code selbst geben, weshalb bei mir die Bilder nicht angezeigt werden?

Vielen Dank.

[CODE lang="java" title="Bilder"]

package Tutorial;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.imageio.ImageIO;

public class Gui {

JButton button;

ImageLoader il;

public Gui() {

il = new ImageLoader();

JFrame frame = new JFrame("Fenstertext");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.requestFocus();

Draw draw = new Draw();
draw.setBounds(0, 0, 800, 600);
draw.setVisible(true);
frame.add(draw);

button = new JButton();
button.setBounds(400, 400, 150, 50);
button.setIcon(il.icon);
button.setVisible(true);
frame.add(button);

frame.setVisible(true);

}

public static void main(String[] args) {

new Gui();

}

public class Draw extends JLabel {

ImageLoader il = new ImageLoader();

public void paintComponents(Graphics g) {

super.paintComponents(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g.drawImage(il.image, 50, 50, 100, 100, null);

repaint();

}
}

public class ImageLoader {

BufferedImage image;

Icon icon;

public ImageLoader() {

try {
image = ImageIO.read(new File("rsc/Fish.png"));
icon = new ImageIcon("rsc/Plant.png");
} catch (IOException e) {
e.printStackTrace();
}

}
}

}[/CODE]
 

Neumi5694

Top Contributor
Erstens: Das stand so im Beispiel?
Java:
    public void paintComponents(Graphics g) {
        super.paintComponents(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.drawImage(il.image, 50, 50, 100, 100, null);
        repaint();
    }
Ein repaint in einer paint-Methode ... ich würd mir ein neues Tutorial suchen.

Zweitens: Das Bild wird auf dem Label gezeichnet. gib dem Label mal einen Border, damit du dessen Maße auf dem Bildschirm siehst (um sicher zu sein, dass es auch groß genug für's Bild ist) und lass zum Zeitpunkt des Zeichnens ausgeben, ob das Bild denn auch geladen wurde.
 

MEJ131720

Mitglied
Hallo,

das Label hat ein Border bekommen und ist groß genug für das Bild.
Java:
draw.setBorder(javax.swing.BorderFactory.createLineBorder(new Color(0, 0, 0)));

Die Ausgabe, ob das Bild überhaupt geladen wurde, habe ich sowohl für das image als auch für das icon eingefügt.
Beide Ausgaben werden aber zweimal ausgegeben:
Konsole:
image wurde geladen ...
icon wurde geladen ...
image wurde geladen ...
icon wurde geladen ...

Überschreibt der Aufruf des icon vielleicht die Anzeige des image???
Java:
try {
            image = ImageIO.read(new File("rsc/Fish.png"));
            System.out.println("image wurde geladen ...");
            icon = new ImageIcon("rsc/Plant.png");
            System.out.println("icon wurde geladen ...");
        } catch (IOException e) {
            e.printStackTrace();
        }
 

Neumi5694

Top Contributor
Ich meinte zu dem Zeitpunkt, wo es gezeichnet werden soll (il.image)
Ist aber ok.

Das Icon liegt auf dem Button, das Image auf dem Label, also nein.

Hast du schon mal das repaint() rausgenommen? In einer paint-Methode hat das nichts zu suchen. Vielleicht macht dir ja das Probleme (dass z.B. der Background nach dem Bild nochmal gezeichnet wird).
 

MEJ131720

Mitglied
Hallo.

Auch ohne repaint() wird kein Bild angezeigt.

Habe den Verdacht, dass es es an Draw() liegt. Denn geladen werden die Bilder wohl (zumindest wird Println aufgerufen).
Weiß Draw vielleicht nicht, was ImageLoader geladen hat? Wie bekomme ich das raus???
 

Neumi5694

Top Contributor
Du kriegst das raus, indem du in der paintComponent Methode ausgeben lässt, was in im.image drinsteht.

Teste auch mal folgendes: Lege ein neues Label an (nicht Draw, sondern Standard) und weise ihm das geladene image zu um zu sehen, ob es überhaupt ein gültiges Bild ist.
 

Blender3D

Top Contributor
Die Ausgabe, ob das Bild überhaupt geladen wurde, habe ich sowohl für das image als auch für das icon eingefügt.
Du musst aufpassen. Der Konstruktor von ImageIcon wirft keinen Fehler wenn der Pfad ungültig ist.
Das bedeutet: Dein Ausgabe "icon wurde geladen ..." bestätigt nicht ob das Icon geladen wurde.
Du könntest Deinen Imagloader etwas anders formulieren, um ein Feedback zu bekommen.
Java:
public class ImageLoader {
    public static final int NO_SCALE = 0;

    public static Image loadImage(String file, int width, int height) {
        Image image = null;       
        try {
            image = ImageIO.read(new File(file));
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
        if (width > NO_SCALE && height > NO_SCALE)
            image = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
        return image;
    }

    public static Icon loadIcon(String file) {
        File tmp = new File(file);
        if (tmp.exists())
            return new ImageIcon(file);
        System.out.println(tmp.getAbsolutePath() + " doesn't exist!");
        return null;
    }
}
 

Neumi5694

Top Contributor
Heh, da hab ich nicht ordentlich hingeschaut. Er hat das ja gar nicht geprüft :)

Dass deine Loader-Klasse 2 Klassenvariablen speichert, will mir nicht ganz in den Sinn, aber ich geh mal davon aus, dass das so beabsichtigt ist.
Du solltest es dann aber auch ordentlich machen und die Variablen von außen nicht zugänglich machen (sondern private), bei der Gelegenheit auch gleich eine kleine Zusatzmethode mit anbringen:

Java:
public Image getImage() {
    return image;
}
/**
 * Prüft ob ein Bild geladen ist
 * @return true, falls getImage() ein Ergebnis ungleich <code>null</code> liefert.
 */
public boolean isImageLoaded() {
    return image != null;
}
Auch elegant wäre, das Ganze über ein Optional zu lösen, aber das ist ein Thema für einen anderen Tag.
 
Zuletzt bearbeitet:
G

Gelöschtes Mitglied 65838

Gast
public boolean isImageLoaded() {
return image != null;
}
Java:
public boolean isLoaded() {

    return image != null;

}
liest sich besser aus der hinsicht
Java:
image.isImageLoaded()
liest sich nicht gut...

verglichen mit dem, da du keine Dopplung mehr drin hast
Java:
if(image.isLoaded)

aber muss ja nich sein
 

Neumi5694

Top Contributor
liest sich nicht gut...
Das soll auch keine Eigenschaft von image sein, sondern der Klasse ImageLoader, in der image gespeichert ist.
il.image.isLoaded() wird nicht klappen, wenn image == null.

Ich hab isImageLoaded() verwendet, weil er 2 Variablen in der Klasse hat: image und icon
Deshalb isImageLoaded() und isIconLoaded()

Würde getImage ein Optional<Image> liefern, wär die Sache noch schöner gelöst.
il.getImage().isPresent() für die Abfrage
il.getImage().get() für das eigentliche Bild

Ja, es wäre besseres Design, wenn die Klasse keine Bilder speichern würde, macht sie aber. Da will ich jetzt nicht drauf rumreiten, das wird er noch lernen. Es ist ja schon viel, dass er überhaupt in verschiedene Klassen aufteilt, die meisten kriegen so früh das nicht mal hin.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
R Bilder als Hintergrund für Swing - Komponenten AWT, Swing, JavaFX & SWT 3
X Swing: Bilder überlagern JMenu AWT, Swing, JavaFX & SWT 4
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
F Bilder zu ausführbarer Jar-Datei hinzufügen AWT, Swing, JavaFX & SWT 5
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
G Bilder in javafx Project AWT, Swing, JavaFX & SWT 11
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Kirby.exe Bilder in GUI einfügen AWT, Swing, JavaFX & SWT 8
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
J Bilder aus dem SceneBuilder werden in der Jar nicht dargestellt AWT, Swing, JavaFX & SWT 4
TheWhiteShadow JavaFX Bilder werden ungewollt Skaliert AWT, Swing, JavaFX & SWT 1
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
J Bilder proportional verkleiner AWT, Swing, JavaFX & SWT 12
E Bilder skalieren AWT, Swing, JavaFX & SWT 4
DaCrazyJavaExpert Swing Bilder überlagern AWT, Swing, JavaFX & SWT 19
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
@SupressWarnings() JavaFX Bilder in executable jar laden AWT, Swing, JavaFX & SWT 5
Sugan JavaFX Bilder drucken AWT, Swing, JavaFX & SWT 0
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
Sugan Java FX Verzeichnisüberwachung -> Bilder auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E AWT Bilder als "Array" abspeichern. AWT, Swing, JavaFX & SWT 4
MrSnake Bilder aus Unterordner einfügen AWT, Swing, JavaFX & SWT 2
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
thet1983 JTable Bilder AWT, Swing, JavaFX & SWT 6
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
F Bilder in jFrame einfügen AWT, Swing, JavaFX & SWT 3
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
I Swing Bilder werden nach Export nicht angezeigt AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Bilder anzeigen AWT, Swing, JavaFX & SWT 4
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
vodkaz JFrame,Bilder und Zeitverzögerung AWT, Swing, JavaFX & SWT 2
A Swing Bilder werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
Xbody 2D-Grafik JavaFX Bilder transformieren AWT, Swing, JavaFX & SWT 2
C 2D-Grafik Steganographie - Verschlüsselung von Dateien in Bildern - Bilder zeigen schwarze Rechtecke AWT, Swing, JavaFX & SWT 13
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
F Bilder werden nicht in's Array geladen AWT, Swing, JavaFX & SWT 4
K Bilder übereinanderlegen AWT, Swing, JavaFX & SWT 11
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
V Fertige Komponente zum Anzeigen mehrerer Bilder AWT, Swing, JavaFX & SWT 5
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
J Bilder in ausführbare jar einbinden AWT, Swing, JavaFX & SWT 7
J Swing Bilder anzeigen in Gridlayout AWT, Swing, JavaFX & SWT 11
H 2D-Grafik Bilder laden ist nicht zuverlässig AWT, Swing, JavaFX & SWT 3
F Bilder ineinander kopieren AWT, Swing, JavaFX & SWT 3
P Bilder verkleinern AWT, Swing, JavaFX & SWT 2
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
Furtano AWT Skalierung mehrerer Bilder / Histogramme im Fenster AWT, Swing, JavaFX & SWT 4
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
C Zwei Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
L [SWT] Daten und Bilder drucken AWT, Swing, JavaFX & SWT 2
S Flickr Bilder in Gui Oberfläche AWT, Swing, JavaFX & SWT 21
K Bilder nacheinander einfügen AWT, Swing, JavaFX & SWT 3
H Bilder auf Buttons per Klick tauschen ( Puzzle ) AWT, Swing, JavaFX & SWT 8
H Bilder in Array zufällig anordnen AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Viele Bilder zu einem Video AWT, Swing, JavaFX & SWT 3
J Vergleicher zweier Bilder AWT, Swing, JavaFX & SWT 2
C zwei Bilder nacheinander anzeigen AWT, Swing, JavaFX & SWT 2
L Swing Bilder über andere Bilder laden AWT, Swing, JavaFX & SWT 3
J Bilder überlappen AWT, Swing, JavaFX & SWT 18
P Bilder werden nach Änderung nicht angezeigt AWT, Swing, JavaFX & SWT 15
3 2D-Grafik Rechtecke auf Bilder legen und auslesen AWT, Swing, JavaFX & SWT 4
M Mehrere Bilder auf einmal anzeigen AWT, Swing, JavaFX & SWT 9
P Swing html mit bilder drin AWT, Swing, JavaFX & SWT 12
F Nicht alle Bilder werden angezeigt AWT, Swing, JavaFX & SWT 2
E Bilder auf JFrame AWT, Swing, JavaFX & SWT 7
R Bilder über URL einfügen AWT, Swing, JavaFX & SWT 4
F Applet zeigt Bilder nicht an AWT, Swing, JavaFX & SWT 5
M FileChooser Bilder auswählen AWT, Swing, JavaFX & SWT 8
G Swing Bilder zeichnen AWT, Swing, JavaFX & SWT 28
L Swing Bilder im Icons-Ordner AWT, Swing, JavaFX & SWT 4
U Bilder in Jar werden nicht gefunden AWT, Swing, JavaFX & SWT 5
S SWT Canvas: Flackernde Bilder AWT, Swing, JavaFX & SWT 3
A Bilder vergleichen AWT, Swing, JavaFX & SWT 4
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
E AWT Bilder und Java AWT, Swing, JavaFX & SWT 11
P Bilder einfügen AWT, Swing, JavaFX & SWT 4
D Swing JEditorPane mit HTML aber ohne Bilder AWT, Swing, JavaFX & SWT 3
S Swing Kleine Bilder in Panel einfügen AWT, Swing, JavaFX & SWT 13
A AWT Bilder als Link verwenden? AWT, Swing, JavaFX & SWT 11
T SWT Wie Bilder aus JAR-Dateien einbinden? AWT, Swing, JavaFX & SWT 12
S Bilder aus der Google Book Search API auslesen AWT, Swing, JavaFX & SWT 3
J Bilder in JScrollPane zentrieren AWT, Swing, JavaFX & SWT 5
M Bilder in einem Textfeld darstellen AWT, Swing, JavaFX & SWT 2
N Bilder aus Infos generieren lassen. Welches Framework? AWT, Swing, JavaFX & SWT 8
A SWT Bilder resizen AWT, Swing, JavaFX & SWT 9
A Swing Bilder in JFrame einfügen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben