Swing Icons von JLabel zur Laufzeit ändern

guitarflow

Mitglied
Hallo liebe Community,

bin neu in Java und möchte gern für ein Projekt im Studium ein Java Blackjack realisieren.

Die Logik sollte nicht das Problem sein, bloss die Grafikprogrammierung ist mir überhaupt nicht klar.

Zum Problem :
Ich arbeite mit Eclipse und Jigloo.

Ich habe 3 Sourceordner :

card : hierin befinden sich 2 Klassen Card und Cardset ( der Name ist Programm )
main : hier befindet sich die eine Main-Klasse und meine JFrame Klasse
pics : hier befinden sich die .jpgs für die Karten

Schon gleich hierzu mal ne Frage : Sollte man die main-methode in die JFrame klasse mit reinpacken oder eine eigene Main-Klasse machen, in der man dann eine Instanz der JFrame Klasse erzeugt?

Was ist denn der Unterschied, ob meine Bilder in einem Folder, einem Source-Folder oder im Buildpath liegen? Versteh da noch nicht ganz, worin sich die unterscheiden.

Jetz zu dem eigentlichen Problem :

Ich habe ein JPanel mit einem GridBagLayout drin. Darin liegen dann insgesamt 10 JLabels für die Bilder. Jetzt wollte ich gerne aus meiner Main-Funktion auf die Methode setIcon() der JLabels zugreifen.
Im Jigloo erzeugten Code sieht das folgendermassen aus :
Java:
card1 = new JLabel();
card1.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/Herz_koenig.jpg")));
Das passiert innerhalb der Funktion initGui(), die im Konstrutor aufgerufen wird.
Die Variablen selbst sind als private deklariert.

Nun dachte ich mir, dass ich innerhalb meiner Main-Methode, die sich momentan in der JFrame Klasse befindet, dieselbe Syntax verwenden kann.
Allerdings bekomme ich immer wieder die selbe Fehlermeldung :
"Cannot make static reference from non-static method getClass() in java.lang.Object"

Habe wirklich schon alles probiert, die Variablen als static deklarieren auch schon ... dann gibts halt zur Abwechslung mal ne Null-Pointer-Exception ...;(

Ich hoffe ihr könnt mir ein wenig Nachhilfe geben ....

Bei Fragen zum Problem einfach melden!

Danke schon mal im Voraus,

guitarflow
 

eRaaaa

Top Contributor
Naja, getClass() ist eine Objektmethode. D.h. entweder musst du das auf dem Exemplar der JFrame-Klasse aufrufen (wenn es dieses überhaupt schon gibt) oder anstelle von getClass() so etwas wie DeineKlasse.class schreiben !
 

guitarflow

Mitglied
hmm, erstmal Danke für deine Antwort.
hier mal der Code :

Java:
package main;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

public class JFrameGUI extends javax.swing.JFrame {
	private JLabel DealerLabel;
	private JLabel dealerCard1;
	private JLabel dealerCard2;
	private JLabel dealerCard3;
	private JLabel dealerCard4;
	private JLabel PlayerLabel;
	private JLabel playerCard5;
	private JLabel playerCard4;
	private JLabel playerCard3;
	private JLabel playerCard2;
	private JLabel playerCard1;
	private JLabel dealerCard5;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrameGUI inst = new JFrameGUI();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
		
	}
	
	public JFrameGUI() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			this.setPreferredSize(new java.awt.Dimension(800, 550));
			{
				DealerLabel = new JLabel();
				getContentPane().add(DealerLabel);
				DealerLabel.setText("Dealer");
				DealerLabel.setBounds(34, 12, 38, 15);
			}
			{
				dealerCard1 = new JLabel();
				getContentPane().add(dealerCard1);
				dealerCard1.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				dealerCard1.setBounds(49, 38, 120, 173);
			}
			{
				dealerCard2 = new JLabel();
				getContentPane().add(dealerCard2);
				dealerCard2.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				dealerCard2.setBounds(193, 38, 120, 173);
			}
			{
				dealerCard3 = new JLabel();
				getContentPane().add(dealerCard3);
				dealerCard3.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				dealerCard3.setBounds(338, 38, 120, 173);
			}
			{
				dealerCard4 = new JLabel();
				getContentPane().add(dealerCard4);
				dealerCard4.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				dealerCard4.setBounds(484, 38, 120, 173);
			}
			{
				dealerCard5 = new JLabel();
				getContentPane().add(dealerCard5);
				dealerCard5.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				dealerCard5.setBounds(628, 38, 120, 173);
			}
			{
				playerCard1 = new JLabel();
				getContentPane().add(playerCard1);
				playerCard1.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				playerCard1.setBounds(46, 272, 120, 173);
			}
			{
				playerCard2 = new JLabel();
				getContentPane().add(playerCard2);
				playerCard2.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				playerCard2.setBounds(193, 272, 120, 173);
			}
			{
				playerCard3 = new JLabel();
				getContentPane().add(playerCard3);
				playerCard3.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				playerCard3.setBounds(338, 272, 120, 173);
			}
			{
				playerCard4 = new JLabel();
				getContentPane().add(playerCard4);
				playerCard4.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				playerCard4.setBounds(484, 272, 120, 173);
			}
			{
				playerCard5 = new JLabel();
				getContentPane().add(playerCard5);
				playerCard5.setIcon(new ImageIcon(getClass().getClassLoader().getResource("pics/placeholder.jpg")));
				playerCard5.setBounds(628, 272, 120, 173);
			}
			{
				PlayerLabel = new JLabel();
				getContentPane().add(PlayerLabel);
				PlayerLabel.setText("Player");
				PlayerLabel.setBounds(46, 240, 35, 15);
			}
			pack();
			this.setSize(800, 550);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Wenn ich jetzt in der Main schreibe :
Java:
dealerCard1.setIcon(getClass().getClassLoader().getResource("pics/Herz_dame.jpg"));

bekomme ich die o.g. Fehlermeldung.
Ich versteh das nicht, weil mir meine InitGui()-Methode ja eine Instanz des JLabels erstellt und genau so das erste Icon vorbesetzt.

Jemand ne Erklärung?

mfg,

guitarflow
 

Michael...

Top Contributor
siehe Post von eRaaaa, er hat doch schon die zwei möglichen Optionen genannt.
Du kannst in einer statischen Methoden nicht einfach getClass() aufrufen. getClass() ist eine "Instanz" Methode (nicht statisch) und kann nur an einer Instanz aufgerufen werden.
Innerhalb einer statischen Methode kannst Du nicht davon ausgehen, dass es eine Instanz der Klasse gibt bzw. solche Methode werden ja nicht an einer Instanz aufgerufen.
Also entweder:
inst.getClass().get...
oder
JFrameGUI.class.get...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A JLabel, Icons und GridLayout AWT, Swing, JavaFX & SWT 3
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
thor_norsk Icons laden nicht in GUI AWT, Swing, JavaFX & SWT 15
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
ProggersWorld JavaFX Icons im TreeView werden nicht angezeigt AWT, Swing, JavaFX & SWT 1
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
F Icons neben Text in Listview setzen AWT, Swing, JavaFX & SWT 2
A Jtabbed ein Reiter mit zwei icons AWT, Swing, JavaFX & SWT 4
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
JavaInBrain Swing JButton: Zuordnen von Icons AWT, Swing, JavaFX & SWT 4
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
P Liste mit Icons und mehreren Spalten AWT, Swing, JavaFX & SWT 7
NR_EIGHT Swing JButton zeigt Icons nicht an AWT, Swing, JavaFX & SWT 3
B "Alte" Swing ICONs gesucht AWT, Swing, JavaFX & SWT 2
X Icons in einer Spalte darstellen AWT, Swing, JavaFX & SWT 6
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
B Standard Icons wo findet man diese? AWT, Swing, JavaFX & SWT 20
N Button soll die Größ eines Icons haben AWT, Swing, JavaFX & SWT 5
sylo Position des Icons bei JMenuItem AWT, Swing, JavaFX & SWT 11
L Swing Bilder im Icons-Ordner AWT, Swing, JavaFX & SWT 4
T Swing Icons mit Transparentz... AWT, Swing, JavaFX & SWT 12
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
L Wieso werden die Icons nicht dargestellt? AWT, Swing, JavaFX & SWT 2
M Icons in Jar AWT, Swing, JavaFX & SWT 3
M Mehrere Icons in einer JComponent AWT, Swing, JavaFX & SWT 5
T Icons in jar AWT, Swing, JavaFX & SWT 17
S JTree rendern der Knoten [+] und [-], nicht der Node Icons AWT, Swing, JavaFX & SWT 2
G Icons verkleinern AWT, Swing, JavaFX & SWT 4
M icons für die java.swing components wie jbutton etc AWT, Swing, JavaFX & SWT 5
G Verhindern, das AbstractAction Text und Icons überschreibt? AWT, Swing, JavaFX & SWT 3
DeeDee0815 SWT-Buttons, Icons und die Win32-API AWT, Swing, JavaFX & SWT 3
T Standard Icons AWT, Swing, JavaFX & SWT 7
G Wo finde ich Icons zum runterladen AWT, Swing, JavaFX & SWT 3
S JTable mit Icons in DB speichern AWT, Swing, JavaFX & SWT 10
S Hochauflösende ICONS für Lebensmittel? AWT, Swing, JavaFX & SWT 7
J Icons ueber getRessource lesen AWT, Swing, JavaFX & SWT 5
S JButton auf verkleiner auf größe eines Icons AWT, Swing, JavaFX & SWT 5
A Icons von Kontextmenüeinträgen verschwinden (SWT) AWT, Swing, JavaFX & SWT 2
D Komponenten mit zusätzlichen Icons AWT, Swing, JavaFX & SWT 2
F 2 icons in jtabbedpane, links und rechts von label AWT, Swing, JavaFX & SWT 2
P JMenu / JMenuItem durch Rekursion Icons entfernen AWT, Swing, JavaFX & SWT 4
B PNG-Icons in Toolbar einbinden AWT, Swing, JavaFX & SWT 3
C Icons und Bilder in der JAR AWT, Swing, JavaFX & SWT 9
S Multiselektieren von Icons AWT, Swing, JavaFX & SWT 5
R JTree ohne visible Root aber mit Icons ? AWT, Swing, JavaFX & SWT 2
F Icons des JTrees austauschen AWT, Swing, JavaFX & SWT 2
G JTabel und Icons AWT, Swing, JavaFX & SWT 9
Q CloseAndMaxTabbedPane Icons werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Java Datei Icons AWT, Swing, JavaFX & SWT 2
M Windows file icons in Java verwenden AWT, Swing, JavaFX & SWT 2
S JAR -> Icons werden nicht mehr angezeigt AWT, Swing, JavaFX & SWT 11
K icons sauber anzeigen (an hintergrund angepasst) AWT, Swing, JavaFX & SWT 4
Z Problem mit Icons in JTable AWT, Swing, JavaFX & SWT 3
R SWT: Icons im Table vor den Einträgen AWT, Swing, JavaFX & SWT 3
D Auf System-Icons wie die aus JOptionPane zugreifen? AWT, Swing, JavaFX & SWT 6
Hotkey Freie Icons für Anwendung mit Java Look&Feel AWT, Swing, JavaFX & SWT 4
S JTree // Icons AWT, Swing, JavaFX & SWT 2
S [JTree] Icons ohne DefaultTreeCellRenderer AWT, Swing, JavaFX & SWT 6
J Icons mit Text als Menü AWT, Swing, JavaFX & SWT 2
F SkinLF - GTK Icons werden nicht genutz - KDE schon - why? AWT, Swing, JavaFX & SWT 8
F JTree mit anderen Icons AWT, Swing, JavaFX & SWT 7
W Websites mit freien Icons AWT, Swing, JavaFX & SWT 4
G Warum gehen meine Icons/Images nicht weg? AWT, Swing, JavaFX & SWT 2
I Icons in JLists AWT, Swing, JavaFX & SWT 2
G Icons in CTabFolder AWT, Swing, JavaFX & SWT 3
L Buttons und Icons AWT, Swing, JavaFX & SWT 2
W JRadioButtonMenuItem (Icons) AWT, Swing, JavaFX & SWT 13
Z Problemen mit Icons? AWT, Swing, JavaFX & SWT 5
G Overlay-Icons über JTextField AWT, Swing, JavaFX & SWT 5
A Icons und Bilder bei EXE-Datei nicht da AWT, Swing, JavaFX & SWT 5
S JTree Datei Icons ? AWT, Swing, JavaFX & SWT 28
M icons im menubar ? AWT, Swing, JavaFX & SWT 5
G standard system icons AWT, Swing, JavaFX & SWT 1
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben