JButton - Icon(.png) aus resources laden

Hering

Mitglied
Moin,
ich hab mal wieder ne Frage:
Und zwar habe ich momentan mehrere JButtons, denen ich gerne ein Icon zuweisen würde.
Diese Icons liegen allerdings in einem anderen Ordner als das package mit meiner Klasse.
Code:
Klassenpfad: src\main\java\xxx\xxx\xxx\xxx\xxx\xxx\GUI\MainWindow.java
Iconpfad: src\main\resources\xxx\btnBlubb.png

Hier ein Beispiel wie ich momentan versuche zu laden:
Java:
JButton btnBlubb = new JButton("Blubb");
btnBlubb.setBounds(5, 423, 31, 32);
btnBlubb.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("btnBlubb.png"))));
contentPane.add(btnBlubb); //content pane des JFrames

Allerdings erhalte ich immer folgenden Error beim Laden:
Java:
Uncaught error fetching image:
java.lang.NullPointerException
	at sun.awt.image.URLImageSource.getConnection(Unknown Source)
	at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
	at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
	at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
	at sun.awt.image.ImageFetcher.run(Unknown Source)

Woran liegt das und wie kann ich das Icon richtig laden?

mfg
Hering
 
Zuletzt bearbeitet:

Kevin94

Top Contributor
Der Pfad ist falsch. Ist ja auch irgendwie logisch, dass er eine Datei die in einem vollkommen anderen Ordner liegt, als die Klasse, nicht finden kann. Richtig müsste imho folgende Pfadangabe sein:

Code:
/main/resources/xxx/btnBlubb.png
 

Fab1

Top Contributor
Hallo,

schau mal hier: Grafikdateien laden und anzeigen ? Byte-Welt Wiki

du kannst einfach den absoluten Pfad übergeben. Am besten einfach aus dem Explorer kopieren und anschließend Backslash mit Slash ersetzen. Dann sollte es eigentlich gehen. Wenn du eine .jar erzeugst, werden die Bilder auch geladen, wenn du folgende Methode anwendest.

Java:
ImageIcon icon = new ImageIcon(getClass().getResource("demo.jpg"));
JButton button = new JButton("Demo", icon);

Edit:

Du könntest auch mithilfe von den Pfad raus bekommen in dem der Computer sucht. Anschließend kannst du das dann ändern.
Java:
public void test() {

		File f = new File("deinPfad");
		
		System.out.println(f.getAbsolutePath());
	}
 
Zuletzt bearbeitet:

Hering

Mitglied
Moin, danke für die schnelen Antworten :)

Mein Problem besteht leider weiterhin mit genau der gleichen Exception die geworfen wird.
Hier zur Verdeutlichung der Verzeichnisstruktur nochmal ein Bild: (Sorry für die "Zensur", aber die Namen sind nicht öffentlich)
kd5anoqf.jpg


Fixe Pfade gehen leider nicht, da das ganze ein Maven&Git Projekt ist, und auf verschiedenen Rechnern unter verschiedenen Ordnern laufen soll.

Hoffe es kann mir jemand helfen

mfg
Hering
 
B

...ButAlive

Gast
So solltest du z.B. das btnExit.png laden können:
Code:
Icon icon = new ImageIcon(getClass().getResource("GUIElements/btnExit.png");
 

Hering

Mitglied
Nö, funktioniert immer noch nicht :(

Mein Code momentan:
Java:
private void initButtons() {
		//Buttons
		JButton btnOptions = new JButton("Options");
		****
	    //Setting the size of the buttons
		btnOptions.setBounds(5, 423, 31, 32);
		****
		//Setting icons
		try {
			//Normal Icon
			loadIcon(btnOptions, "GUIElements/btnOptions.png", "Normal");
			****	
			//RollOver Icon
			loadIcon(btnOptions, "GUIElements/btnOptions_RollOver.png", "RollOver");
			****
			//Pressed Icon
			loadIcon(btnOptions, "GUIElements/btnOptions_Pressed.png", "Pressed");
			****
		} catch (Exception e) {e.printStackTrace();}
		
		//Adding buttons to contentPane
		contentPane.add(btnOptions);
        ****
	}

	private void loadIcon(JButton button, String path, String mode) {
		Icon icon = new ImageIcon(getClass().getResource(path));
		switch (mode) {
			case ("Normal"): {button.setIcon(icon);}
			case ("RollOver"): {button.setRolloverIcon(icon);}
			case ("Pressed"): {button.setPressedIcon(icon);}
		}
	}
 

Kevin94

Top Contributor
Drei Sachen:
1. Werden die Bilder überhaupt in das bin Verzeichnis kopiert? Unwahrscheinlich das nicht, aber man muss ja aller Fehlerquellen ausschliesen.
2. Aus den Class#getResource hier zu lesenden Gründen, kann es nicht gehen, da immer noch in einem Unterordner von GUI gesucht wird.
3. Hast du meinen Vorschlag schon probiert? (
Code:
/main/resources/GUIElements/btnXXX.png
)
 

Hering

Mitglied
Moin,

Ja die Bilder sind ins richtige Verzeichnis kopiert worden von eclipse "target/classes/GUIElements/..".
Auch den Vorschlag mit "/main/resources/GUIElements/btnXXX.png" hab ich probiert, allerdings funktioniert es dann immer noch nicht, in der Zeile "Icon icon = new ImageIcon(getClass().getResource(path));" der Methode loadIcon() tritt weiterhin eine NullPointerException auf.

mfg
Hering
 

Kevin94

Top Contributor
Unter falschen Annahmen können auch keine richtigen Ergebnisse entstehen. Meine Pfad ist unter folgenden Annahmen entstanden:
  • src/ ist der Root-Odernder des Projekts und somit die unter Ordner auch im Root eines Builds
  • Die Ordner /main/java und /main/resources/ sind "Packages", das sind aber die tatsächlichen Roots
Nachedem sich das als falsch herrausgestelt hat, was bei genauem hinschauen mir auch auffallen hätte können (facepalm), ist mein korigierter Tipp:
Code:
/GUIElements/btnXXX.png
 

Hering

Mitglied
Moin,

OMG manchmal sieht man den Wald vor lauter Bäumen nicht...
Daran lag es wirklich! Allerdings hat sich jetzt ein weiteres Problem ergeben, und zwar wird das Bild versetzt gezeichnet. Wenn ich mit folgender Methode lade:
Java:
	private void loadIcon(JButton button, String path, String mode) {
		Icon icon = new ImageIcon(getClass().getResource(path));		
		switch (mode) {
			case ("Normal"): {button.setIcon(icon);}
			case ("RollOver"): {button.setRolloverIcon(icon);}
			case ("Pressed"): {button.setPressedIcon(icon);}
		}
	}
Wird das Bild nach links versetzt gezeichnet (siehe Bild):
wxmcperq.jpg


Auch wenn ich folgenden Code verwende um den Rand zu entfernen etc funktioniert es nicht:
Java:
	    //Method 1	
        Dimension d = new Dimension(icon.getIconWidth(), icon.getIconHeight());
		button.setPreferredSize(d);

		button.setBackground(null); 
		button.setBorder(null); 
		button.setBorderPainted(false);

        //Method 2
		button.setMargin(new Insets(0,0,0,0));

Was übersehe ich da?

mfg
Hering
 

Fab1

Top Contributor
Versuch mal
Code:
deinButton.setContentAreaFilled(false);

Ich denke mal es liegt an deinem Icon. In welchem Format ist es?
 

Hering

Mitglied
Moin,
dein Vorschlag führt zwar dazu, dass kein Rahmen mehr gezeichnet wird, allerdings ist rechts von dem Button dann ein schwarzer Punkt und das Icon ist immer noch links abgeschnitten.
iklx23ri.jpg

Die Icons liegen im 16Bit/RGB-PNG Format vor. Und sie sind in genau der gleichen Größe wie die Buttons selbst.

mfg
Hering

P.s.: Hier ist mal ein Test-Button zum runterladen: File-Upload.net - btnExit.png
 
Zuletzt bearbeitet:

Hering

Mitglied
... Moin
ich bin echt doof...
Es lag daran, dass noch Text auf dem Button stand, wenn ich den lösche klappts ohne Probleme.
Jetzt muss ich's nur noch hinkriegen, dass mein ImagePanel(erbt von JPanel) in der Lage ist sein Bild anzuzeigen ohne, dass ich erst minimieren/maximieren oder verschieben muss.
Ein einfaches repaint() scheint nicht zu funzen.
Wenn da jemnd grad ne Idee hat wäre ich wirklich dankbar, auch wenns nicht wirklich in diesen Thread gehört.

mfg
Hering
 

noobee

Aktives Mitglied
ich hab das problem, dass meine icons nicht angezeigt werden aufm button. ich habe sie über IMPORT von eclipse importieren lassen. diese sind im ordner workspace/meineprog/bin gelandet, also da wo auch die von eclipse erzeugten klassen liegen. ein einbinden in den button über

Java:
meinBtn.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("test.png")))); // oder
meinBtn.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("bin/test.png")))); // oder
meinBtn.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/bin/test.png"))));
geht nicht. ich bekomme keinen fehler bei zeile 1, nur fehlt eben bei jedem button das bild.
bei den anderen zwei zeilen gibts ne NPE.
wo liegt da der fehler ?
 

L-ectron-X

Gesperrter Benutzer
Java:
meinBtn.setIcon(new ImageIcon(getClass().getResource("bin/test.png")));
So in der Richtung sollte gehen.
Ansonsten schau dir den Link an.
 

noobee

Aktives Mitglied
geht leider nicht :( immer nullpointerexception
nützt auch nix, mal den komplette pfad anzugeben, auch da NPE
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Der Pfad war auch nur als Beispiel gedacht. Du bekommst die NPE, weil das Bild nicht am angegebenen Ort liegt.
Wo liegt dein Bild und wo die Klasse, in der du diesen Code schreibst? Schreibe mal die Pfade auf, oder mach mal ein Bild von den Pfaden, wie das Hering oben gemacht hat.
 

noobee

Aktives Mitglied
es waren die leerzeichen -.- hab die ordner umbenannt und es so gemacht:

Java:
ImageIcon icon = new ImageIcon("xxx/xxx/bin/test.png");
JButton btnNewButton = new JButton("TestButton", icon);

jetzt gehts wunderbar :) DANKÖÖÖ
 

L-ectron-X

Gesperrter Benutzer
Nun müssen die Bilder aber auf jedem Rechner, der dein Programm ausführt an den angegebenen Verzeichnissen liegen.
Normalerweise legt man die Bilder mit in der Jar-Datei ab und referenziert sie, wie ich das oben gezeigt habe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
A jbutton - icon linksbündig, text zentriert Java Basics - Anfänger-Themen 10
Hilde22 Neu Start JButton einfügen Java Basics - Anfänger-Themen 2
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
J Jbutton blinkt Java Basics - Anfänger-Themen 5
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
E JButton und JTextField Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
P JButton -Arrays Java Basics - Anfänger-Themen 4
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
L Erste Schritte JButton reagiert nicht Java Basics - Anfänger-Themen 5
S Bild über JButton legen Java Basics - Anfänger-Themen 3
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
J JButton macht was er will Java Basics - Anfänger-Themen 3
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
N JButton anpassen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A weiter JButton Fehler Java Basics - Anfänger-Themen 3
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
S JButton Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
K JButton alles zurücksetzen Java Basics - Anfänger-Themen 1
U JButton: Beschriftung ueber Variable zuweisen Java Basics - Anfänger-Themen 6
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S JDK installieren JButton BorderPoints?! Java Basics - Anfänger-Themen 7
E Problem mit erben von JButton Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
S Jbutton per Passworteingabe aktivieren Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
M Hintergrundbild für JButton Java Basics - Anfänger-Themen 6
M Input/Output JFrame mit JButton und JTextfield Java Basics - Anfänger-Themen 114
J Hilfe bei JButton Java Basics - Anfänger-Themen 6
A JButton[] und String[] in doppelter For-Schleife Java Basics - Anfänger-Themen 4
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
pg1337 JButton zuschneiden Java Basics - Anfänger-Themen 3
T Modales JDialog schliessen mit JButton Java Basics - Anfänger-Themen 2
D JButton Array setBackground Java Basics - Anfänger-Themen 2
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
G jButton bei Klick String +1 Java Basics - Anfänger-Themen 5
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3
S JButton wird nicht angezeigt Java Basics - Anfänger-Themen 14
C JButton.getIcon() != null Java Basics - Anfänger-Themen 3
E JButton-Text wird in Schleife nicht geändert Java Basics - Anfänger-Themen 4
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
T JButton Text ändern Java Basics - Anfänger-Themen 4
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
E JButton Hintergrund / Rahmen entfernen? Java Basics - Anfänger-Themen 4
L Bild auf einem JButton Java Basics - Anfänger-Themen 4
K JButton.setText Problem Java Basics - Anfänger-Themen 6
M JButton und DisabledIcon Java Basics - Anfänger-Themen 2
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
A GUI - JButton problem! Java Basics - Anfänger-Themen 5
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
A JButton Textrahmen Java Basics - Anfänger-Themen 7
A Platzierung eines JButton Java Basics - Anfänger-Themen 4
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
P JButton identifizieren Java Basics - Anfänger-Themen 8
K Funktion zu einem JButton hinzufügen Java Basics - Anfänger-Themen 27
D HTML Text von jButton disablen Java Basics - Anfänger-Themen 2
E Auf JButton in Arraylist zugreifen Java Basics - Anfänger-Themen 6
E Andere Form eines JButton Java Basics - Anfänger-Themen 17
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
A JButton erscheint nicht (BlueJ) Java Basics - Anfänger-Themen 2
M JButton sieht komisch aus :-) Java Basics - Anfänger-Themen 5
B JPanel über JButton umändern Java Basics - Anfänger-Themen 9
D JButton transparent bekommen? Java Basics - Anfänger-Themen 5
H JButton Unsichtbar Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
J Variable die bei JButton Clicks mitzählt Java Basics - Anfänger-Themen 9
Developer_X JButton removt sich selbst Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben