GUI wird nicht wie gewünscht angezeigt

ballibum

Aktives Mitglied
Hallo Forum,
ich bastel gerade an meiner Oberfläche und möchte diese so objektorientiert wie möglich erzeugen. Doch dabei schleichen sich bei mir anscheinend Fehler ein, die sich in der Programmlogik befinden. Daher würde ich euch bitten einmal über den Code zu schauen und mir sagen, wo der Fehler sein könnte.

Zum Code:
Dieser besteht aus drei Teilen, im ersten Teil wird die Anwendung gestartet:
Java:
import java.awt.EventQueue;

import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Start {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		try
		{
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		}
		catch(UnsupportedLookAndFeelException e)
		{
			System.out.println(e+"LookAndFeel wird nicht unterstützt");
		}
		catch(ClassNotFoundException e)
		{
			System.out.println(e+"Klasse nicht gefunden");
		} 
		catch(InstantiationException e)
		{
			System.out.println(e+"Fehler beim Starten");
		}
		catch(IllegalAccessException e)
		{
			System.out.println(e+"kein Zugriff");
		}
		EventQueue.invokeLater(new Runnable() {
			
			@Override
			public void run() {
				MainSeite mPage = new MainSeite();
				mPage.setVisible(true);
			}
		});

	}
}

Mit MainSeite erstelle ich ein Objekt der eigentlich GUI und möchte dieses anzeigen, das funktioniert auch irgendwie, jedoch hat es nicht die im Teil 2 gewünschten Inhalte und Ausmasse.

Teil 2:
Java:
import java.awt.CardLayout;
import java.awt.event.WindowAdapter;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class MainSeite extends JFrame{
	
	public MainSeite() {
		setTitle("Titel");
		//WindowOJ muss noch zwingend angepasst werden
		addWindowListener(new WindowOJ(){});
		setResizable(false);
		
		JPanel mPane = new JPanel();
		JMenuBar JMBar = new MenueBar();
		setJMenuBar(JMBar);
		
		mPane.setBorder(UIManager.getBorder(BorderFactory.createEmptyBorder()));
		mPane.setSize(890, 599);
		mPane.setLayout(new CardLayout(0, 0));
		
		//füllen:
		JPanel konf = new KonfSeite(mPane.getWidth(),mPane.getHeight()).getKonfPanel();
		mPane.add(konf,"name_konf");
	}
Der WindowListener und auch das Menü machen, was Sie sollen, dass kann ich ja überprüfen in dem ich das Fenster resizeable mache.
Und Teil 3 beinhaltet ein Panel welches ausgegeben werden soll.
Teil 3:

Java:
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class KonfSeite extends JPanel{
	JPanel konfPanel;

	public KonfSeite(int width, int height) {
		konfPanel = new JPanel();
		konfPanel.setSize(width, height);
		konfPanel.setBorder(BorderFactory.createTitledBorder(UIManager.getBorder("TitledBorder.border"),"Konfiguration"));
	}

	public JPanel getKonfPanel() {
		return konfPanel;
	}
}

Leider wird das KonfPanel nicht angezeigt und ich weiß nicht warum?!Ich würde mich über eure Hilfe sehr freuen.
mit freundlichem Gruß
Balli
 
Nein noch nicht, ich werde es gleich mal testen. Danke!

Also ich habe es in den von mir mit Teil 2 (MainSeite) benannten Part hineingetan , doch leider passiert nichts.
 
also was natürlich fehlt, ist das deinem JFrame das
Code:
mPane
geaddet wird...

MainSeite.java
[JAVA=32]add(mPane);[/code]
 
Hm sicher dass das die Menüleiste verschwindet? Du hast ja keine, bzw. nur eine leere. Ich kann mir gut vorstellen, dass sie einfach die Größe 0 / 0 hat.

Ansonsten solltest du nach dem aufbauen des Layouts und vor dem Anzeigen die
Code:
JFrame.pack()
Methode aufrufen, die die Fenstergröße automatisch anpasst.
 
Bei deinem JFrame fehlt noch ein setVisible(true), ganz am Ende, nachdem deine Komponenten hinzugefügt wurden.
 
Also meine MenüBar hat schon Inhalt (der wird ja in new MenueBar() definiert), nur sobald ich das add(mPane) hinzufüge verschwindet diese.

Okay, ich danke euch es hat gereicht das add(mPane) hinzuzufügen. In meiner aktuellen Bearbeitungsversion und in der die ich hier veröffentlicht habe, fehlt JMenuBar Bar = new MenuBar().getMenueBar();


vielen Dank für eure Hilfe.
Jetzt muss ich nur noch den Punkt finden an der die Größe des Fensters festgelegt wird!!!!Denn das bleibt immer noch klein.

Aber auch das geht ganz einfach, ich muss nur setSize(), dem JFrame hinzufügen!!!
 
Zuletzt bearbeitet:
na ja...ein pack() auf den Frame am Ende langt auch, wenn man die preferedSize gesetzt hat...
hiermal dein Bsp inc. einer funktionierenden MenüLeiste...auch wenn das nur rudimentär und aus der Hüfte geschossen ist, kannst du dir sicherlich das eine oder andere davon abschauen...

Java:
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Start {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		try {
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		} catch (UnsupportedLookAndFeelException e) {
			System.out.println(e + "LookAndFeel wird nicht unterstützt");
		} catch (ClassNotFoundException e) {
			System.out.println(e + "Klasse nicht gefunden");
		} catch (InstantiationException e) {
			System.out.println(e + "Fehler beim Starten");
		} catch (IllegalAccessException e) {
			System.out.println(e + "kein Zugriff");
		}
		EventQueue.invokeLater(new Runnable() {

			@Override
			public void run() {
				MainSeite mPage = new MainSeite();
				mPage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				mPage.pack();
				mPage.setVisible(true);
			}
		});

	}
}

class MainSeite extends JFrame {
	MainSeite mainSeite;

	public MainSeite() {
		setTitle("Titel");
		mainSeite = this;
		// addWindowListener(new WindowAdapter() {
		// public void windowClosing(WindowEvent e) {
		// e.getWindow().dispose(); // Fenster "killen"
		// System.exit(0); // VM "killen"
		// }
		// }); entweder so bspw, oder die folgende Zeile ...
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);

		JPanel mPane = new JPanel();
		JMenuBar jmBar = new JMenuBar();
		JMenu jmDatei = new JMenu("Datei");
		jmBar.add(jmDatei);
		JMenuItem jmItem = new JMenuItem("öffnen");
		jmItem.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				JFileChooser jfc = new JFileChooser();
				int value = jfc.showOpenDialog(mainSeite);
				if (value == JFileChooser.APPROVE_OPTION) {
					System.out.println(jfc.getSelectedFile().getAbsolutePath());
				}

			}
		});
		jmDatei.add(jmItem);
		setJMenuBar(jmBar);

		mPane.setBorder(UIManager.getBorder(BorderFactory.createEmptyBorder()));
		mPane.setPreferredSize(new Dimension(890, 599));
		mPane.setLayout(new CardLayout(0, 0));

		// füllen:
		JPanel konf = new KonfSeite(mPane.getPreferredSize().width,
				mPane.getPreferredSize().height).getKonfPanel();
		mPane.add(konf, "name_konf");
		add(mPane);
	}
}

class KonfSeite extends JPanel {
	JPanel konfPanel;

	public KonfSeite(int width, int height) {
		konfPanel = new JPanel();
		konfPanel.setSize(new Dimension(width, height));
		konfPanel.setBorder(BorderFactory.createTitledBorder(
				UIManager.getBorder("TitledBorder.border"), "Konfiguration"));
	}

	public JPanel getKonfPanel() {
		return konfPanel;
	}
}
 

Zurück
Oben