Swing JPanel werden nicht angezeigt

sangreal

Neues Mitglied
Ich bin Java Einsteiger und gerade dabei ein Spielfeld zu programmieren. Ich habe ein JFrame gewählt und darauf JPanels gelegt, von denen zur Zeit aber nur eins angezeit wird (BalkenPanel). Alle anderen werden nicht angezeigt.
Habe ich irgendwas vergessen?
Für eure Hilfe wäre ich euch wirklich dankbar!!


Java:
package gui;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class fenster extends JFrame {

	// notwendige Bestandteile für Balken oben links
	private ButtonGroup Balken;
	private JPanel BalkenPanel;
	private JLabel LebenLabel;
	private JLabel XPLabel;
	private JLabel ManaLabel;
	private JProgressBar LebenBar;
	private JProgressBar XPBar;
	private JProgressBar ManaBar;

	// notwendige Bestandteile für ItemLeiste unten links
	private ButtonGroup Itemleiste;
	private JPanel ItemPanel;
	private JButton InventarButton;
	private JButton CharakterButton;
	private JButton QuestsButton;
	private JButton SonstigesButton;
	private JButton OptionenButton;

	// notwendige Bestandteile für Chat unten rechts
	private ButtonGroup Chat;
	private JPanel ChatPanel;
	private JButton FreundeButton;
	private JButton FluesternButton;
	private JButton ChatButton;
	private JPanel ChatText;
	private JPanel Chatleiste;
	private JScrollPane ChatScroll;
	private JTextArea ChatTextArea;
	private JTextField ChatTextField;
	private String t;

	// notwendige Bestandteile für Karte oben rechts
	private JPanel KartePanel;
	private JPanel Kartenleiste;
	private JButton KarteButton;
	private JLabel KarteBild;
	private JButton Kartegross;
	private JButton Karteklein;

	// notwendige Bestandteile für Spielfeld in der Mitte
	private JPanel Spielfeld;
	private JLabel Hintergrund;
	

	//ÜBERGEBENE WERTE!!!!
	int getXPwert = 34;
	int getMPwert = 12;
	int getLPwert = 73;
	private ImageIcon getKarte = new ImageIcon("src/karte.jpg");
	

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				fenster gui = new fenster();
				gui.setLocationRelativeTo(null);
				gui.setVisible(true);
			}
		});
	}

	public fenster() {
		super();
		sangrealgui();
	}

	private void sangrealgui() {
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		int frameWidth = 1024;
		int frameHeight = 800;
		setSize(frameWidth, frameHeight);
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (d.width - getSize().width) / 2;
		int y = (d.height - getSize().height) / 2;
		setLocation(x, y);
		getContentPane().setLayout(null);
		setVisible(true);
		
		//____________________________________________________________________________________
		// BalkenPanel
		BalkenPanel = new JPanel();
		BalkenPanel.setLayout(new BoxLayout(BalkenPanel, BoxLayout.Y_AXIS));
		BalkenPanel.setVisible(true);
		BalkenPanel.setBounds(1, 1, 200, 200);

		// Lebenspunkte
		LebenLabel = new JLabel();
		LebenLabel.setText("LP");
		BalkenPanel.add(LebenLabel);

		LebenBar = new JProgressBar();
		LebenBar.setValue(getLPwert);
		LebenBar.setStringPainted(true);
		if (getLPwert >= 70) {
			LebenBar.setForeground(Color.GREEN);
		} else if (getLPwert < 20) {
			LebenBar.setForeground(Color.RED);
		} else {
			LebenBar.setForeground(Color.YELLOW);
		}
		BalkenPanel.add(LebenBar);
	
		

		// Erfahrungspunkte
		XPLabel = new JLabel();
		XPLabel.setText("XP");
		BalkenPanel.add(XPLabel);

		XPBar = new JProgressBar();
		XPBar.setValue(getXPwert);
		XPBar.setStringPainted(true);
		if (getXPwert >= 70) {
			XPBar.setForeground(Color.GREEN);
		} else if (getXPwert < 20) {
			XPBar.setForeground(Color.RED);
		} else {
			XPBar.setForeground(Color.YELLOW);
		}
		BalkenPanel.add(XPBar);
		

		// Manapunkte
		ManaLabel = new JLabel();
		ManaLabel.setText("MP");
		BalkenPanel.add(ManaLabel);

		ManaBar = new JProgressBar();
		ManaBar.setValue(getMPwert);
		ManaBar.setStringPainted(true);
		if (getMPwert >= 70) {
			ManaBar.setForeground(Color.GREEN);
		} else if (getMPwert < 20) {
			ManaBar.setForeground(Color.RED);
		} else {
			ManaBar.setForeground(Color.YELLOW);
		}
		BalkenPanel.add(ManaBar);
		add(BalkenPanel);
		

		
		//____________________________________________________________________________________
		// ItemPanel
		ItemPanel = new JPanel();
		ItemPanel.setLayout(new BoxLayout(ItemPanel, BoxLayout.Y_AXIS));
		ItemPanel.setBounds(1, 400, 50, 100);
		ItemPanel.setVisible(true);

		// InventarButton
		InventarButton = new JButton();
		InventarButton.setPreferredSize(new Dimension(36, 32));
		InventarButton.setBounds(40,40,2,3);
		ImageIcon inventar = new ImageIcon("src/inventar.png");
		inventar.setImage(inventar.getImage().getScaledInstance(
				InventarButton.getWidth(), InventarButton.getHeight(),
				Image.SCALE_SMOOTH));
		InventarButton.setIcon(inventar);
		InventarButton.setToolTipText("Inventar");
		InventarButton.addComponentListener(new ComponentAdapter() {
		});
		InventarButton.setVisible(true);
		ItemPanel.add(InventarButton);
		

		// CharakterButton
		CharakterButton = new JButton();
		CharakterButton.setPreferredSize(new Dimension(36, 32));
		ImageIcon charakter = new ImageIcon("src/charakter.png");
		charakter.setImage(charakter.getImage().getScaledInstance(
				CharakterButton.getWidth(), CharakterButton.getHeight(),
				Image.SCALE_SMOOTH));
		CharakterButton.setIcon(charakter);
		CharakterButton.setToolTipText("Charakter");
		CharakterButton.addComponentListener(new ComponentAdapter() {
		});
		CharakterButton.setVisible(true);
		ItemPanel.add(CharakterButton);
	

		// QuestsButton
		QuestsButton = new JButton();
		QuestsButton.setPreferredSize(new Dimension(36, 32));
		ImageIcon quest = new ImageIcon("src/quest.gif");
		quest.setImage(quest.getImage().getScaledInstance(
				QuestsButton.getWidth(), QuestsButton.getHeight(),
				Image.SCALE_SMOOTH));
		QuestsButton.setIcon(quest);
		QuestsButton.setToolTipText("Quests");
		QuestsButton.addComponentListener(new ComponentAdapter() {
		});
		QuestsButton.setVisible(true);
		ItemPanel.add(QuestsButton);
		

		// Sonstiges
		SonstigesButton = new JButton();
		SonstigesButton.setPreferredSize(new Dimension(36, 32));
		SonstigesButton.setText("...");
		SonstigesButton.setToolTipText("Sonstiges");
		SonstigesButton.addComponentListener(new ComponentAdapter() {
		});
		SonstigesButton.setVisible(true);
		ItemPanel.add(SonstigesButton);
		

		// Optionen
		OptionenButton = new JButton();
		OptionenButton.setPreferredSize(new Dimension(36, 32));
		ImageIcon optionen = new ImageIcon("src/optionen.png");
		optionen.setImage(optionen.getImage().getScaledInstance(
				OptionenButton.getWidth(), OptionenButton.getHeight(),
				Image.SCALE_SMOOTH));
		OptionenButton.setIcon(optionen);
		OptionenButton.setToolTipText("Optionen");
		OptionenButton.addComponentListener(new ComponentAdapter() {
		});
		OptionenButton.setVisible(true);
		ItemPanel.add(OptionenButton);
		ItemPanel.setVisible(true);
		add(ItemPanel);
		

		
		//___________________________________________________________________________________
		// ChatPanel
		ChatPanel = new JPanel();
		ChatPanel.setLayout(new BorderLayout());
		ChatPanel.setVisible(true);
		ChatPanel.setOpaque(true);
		ChatPanel.setBounds(600, 600, 200, 200);

		// Chatleiste
		Chatleiste = new JPanel();
		Chatleiste.setLayout(new FlowLayout());
		Chatleiste.setVisible(true);

		// ChatButton
		ChatButton = new JButton();
		ImageIcon chat = new ImageIcon("src/chat.jpg");
		chat.setImage(chat.getImage().getScaledInstance(ChatButton.getWidth(),
				ChatButton.getHeight(), Image.SCALE_SMOOTH));
		ChatButton.setIcon(chat);
		ChatButton.setToolTipText("Chat");
		ChatButton.setVisible(true);
		Chatleiste.add(ChatButton);
	

		// FluesternButton
		FluesternButton = new JButton();
		ImageIcon fluestern = new ImageIcon("src/fluestern.jpg");
		fluestern.setImage(fluestern.getImage().getScaledInstance(
				FluesternButton.getWidth(), FluesternButton.getHeight(),
				Image.SCALE_SMOOTH));
		FluesternButton.setIcon(fluestern);
		FluesternButton.setToolTipText("Fluestern");
		FluesternButton.setVisible(true);
		Chatleiste.add(FluesternButton);
	

		// FreundeButton
		FreundeButton = new JButton();
		ImageIcon freunde = new ImageIcon("src/freunde.jpg");
		freunde.setImage(freunde.getImage().getScaledInstance(
				FreundeButton.getWidth(), FreundeButton.getHeight(),
				Image.SCALE_SMOOTH));
		FreundeButton.setIcon(freunde);
		FreundeButton.setToolTipText("Freunde");
		FreundeButton.setVisible(true);
		Chatleiste.add(FreundeButton);

		ChatPanel.add("NORTH", Chatleiste);
		
		// Chat-Textfenster
		ChatText = new JPanel();
		ChatText.setLayout(new BorderLayout());
		ChatText.setVisible(true);

		// ChatTextArea
		ChatTextArea = new JTextArea();
		ChatTextArea.setVisible(true);
		t = ChatTextField.getText();
		ChatTextArea.setText(t);
		ChatPanel.add(ChatTextArea, BorderLayout.CENTER);

		// ChatTextField
		ChatTextField = new JTextField();
		ChatTextField.setVisible(true);
		ChatPanel.add(ChatTextField, BorderLayout.PAGE_END);

		// ChatScroll
		ChatScroll = new JScrollPane(
				ChatTextArea = new JTextArea());
		ChatScroll.setVisible(true);
		ChatPanel.add(ChatScroll, BorderLayout.EAST);

		ChatPanel.add(ChatText);
		add(ChatPanel);

		
		//____________________________________________________________________________________
		// KartenPanel
		KartePanel = new JPanel();
		KartePanel.setVisible(true);
		KartePanel.setLayout(new FlowLayout());
		KartePanel.setOpaque(true);
		KartePanel.setBounds(600, 1, 200, 200);
		
		//KarteBild
		KarteBild = new JLabel();
		KarteBild.setVisible(true);
		ImageIcon karte = getKarte; //ImageIcon karte = new ImageIcon("src/karte.jpg");
		karte.setImage(karte.getImage().getScaledInstance(KarteBild.getWidth(), KarteBild.getHeight(), Image.SCALE_SMOOTH));
		KarteBild.setIcon(karte);
		KartePanel.add(KarteBild);
		
		
		
		//Kartenleiste
		Kartenleiste = new JPanel();
		Kartenleiste.setVisible(true);
		Kartenleiste.setLayout(new BoxLayout(Kartenleiste, BoxLayout.Y_AXIS));
		
		//KarteButton
		KarteButton = new JButton();
		KarteButton.setVisible(true);
		ImageIcon lupe = new ImageIcon("src/lupe.jpg");
		lupe.setImage(lupe.getImage().getScaledInstance(
				KarteButton.getWidth(), KarteButton.getHeight(),
				Image.SCALE_SMOOTH));
		KarteButton.setIcon(lupe);
		KarteButton.setToolTipText("Karte");
		Kartenleiste.add(KarteButton);
		
		//Kartegross
		Kartegross = new JButton();
		Kartegross.setVisible(true);
		Kartegross.setText("+");
		Kartegross.setToolTipText("Karte vergroessern");
		Kartenleiste.add(Kartegross);
		
		//Karteklein
		Karteklein = new JButton();
		Karteklein.setVisible(true);
		Karteklein.setText("-");
		Karteklein.setToolTipText("Karte verkleinern");
		Kartenleiste.add(Karteklein);
		
		KartePanel.add(Kartenleiste);
		add(KartePanel);
		pack();
	}
}
 
was für ein Programm-Klotz, hast du das alles selber programmiert? wenn dann bestimmt mit viel kopieren, schlimm genug,
wie wärs mit schrittweisen Vorgehen, eine Komponente nach der anderen einfügen und dann neu schauen wie es aussieht?

der Hauptfehler ist, dass du dir nicht die Fehlermeldungen anschaust, die hoffentlich in irgendeiner Konsole auftauchen,
ohne Fehlermeldungen geht gar nichts

ansonsten unter anderen:
- das einzig nötige setVisible(true) ist das in Zeile 67, alle anderen sind sinnlos, schlimmstenfalls störend wenn zu früh fürs JFrame aufgerufen, sollte der letzte Befehl sein, Zeile 67 macht das gut
- Variablen klein schreiben, Klassen groß!
- das pack() am Ende weg, macht dir alles klein, wenn nicht wie im Moment vorher mit Fehler abgebrochen wird

konkrete Fehler im Moment:
ChatPanel.add("NORTH", Chatleiste);
-> ChatPanel.add(Chatleiste, BorderLayout.NORTH); // oder irgendwas anderes funktionierendes

sowie:
t = ChatTextField.getText();
steht bevor ChatTextField initialisiert wird, NullPointerException
 
Danke erst mal für die schnelle Antwort!
ich gebe zu, dass da sehr viel Copy&Paste dabei war, aber schließlich sind die Buttons immer ähnlich aufgebaut. 😉
Deine Anmerkungen habe ich schon abgeändert, aber die verschiedenen Panels bleiben unsichtbar...
durch diese tausend setVisible() wollte ich garantieren, dass sie auf jeden Fall sichtbar werden. Funktioniert aber weder mit noch ohne.
 
bei mir ist ne Menge zu sehen, nicht komplett befüllt und bei den Unmengen an Komponenten sicher auch nicht alles,
die Code-Zeilen zu Bildern habe ich übrigens auskommentiert,
aber ist ja auch egal,

poste du deinen aktuellen Code, einen Screenshot von der Anzeigen (Date kann man ans Posting anhängen)
oder beschreibe mit Worten was genau an genau welcher Stelle fehlt (ein Beispiel)
 
Danke erst mal für die schnelle Antwort!
ich gebe zu, dass da sehr viel Copy&Paste dabei war, aber schließlich sind die Buttons immer ähnlich aufgebaut. 😉
Deine Anmerkungen habe ich schon abgeändert, aber die verschiedenen Panels bleiben unsichtbar...
durch diese tausend setVisible() wollte ich garantieren, dass sie auf jeden Fall sichtbar werden. Funktioniert aber weder mit noch ohne.

Mit setVisible() hat das hier nichts zu tun.
Du solltest dir mal die Exceptions ansehen, die geworfen werden.
Z.B. diese:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Width (0) and height (0) must be non-zero
        at java.awt.image.ReplicateScaleFilter.<init>(ReplicateScaleFilter.java:85)
        at java.awt.image.AreaAveragingScaleFilter.<init>(AreaAveragingScaleFilter.java:60)
        at java.awt.Image.getScaledInstance(Image.java:154)
        at del_test2.fenster.sangrealgui(fenster.java:259)
        at del_test2.fenster.<init>(fenster.java:79)
        at del_test2.fenster$1.run(fenster.java:70)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Du fragst die Breite und Höhe der Button ab, bevor diese dem Programm bekannt sind bzw. durch das Layout
berechnet wurden. Setze nicht (nur) mit setPreferredSize() sondern mit setSize(). Dann läuft der Code
auch durch. (Hab es jetzt allerdings nur für die ersten Button in Zeile 178 und 193 durchgespielt.)

VG ROlf
 
Zuletzt bearbeitet:
die Fehler hatte ich auskommentiert weil ich die Bilder gar nicht hatte 😉

wie gesagt: erstmal Konsole finden und Fehlermeldungen bemerken,
evtl. try/catch in der main und dort den Fehler irgendwie bemerkbar machen, z.B. JOptionPane oder anderes JFrame eröffnen
 

Zurück
Oben