GUI Anfänger (Splitpane, Tabbedpane usw.)

Maddili

Mitglied
Hallo,

ich bin im Moment daran, mich an einer (einfachen) GUI zu versuchen.

Soll ungefähr SO aussehen:

--------------------------------------------------
* MenuBar
--------------------------------------------------
* * *
* * *
*----- Pane 1------||----- Pane 2 ------- *
* * *
-------------------Splitpane----------------------
-Tab1|Tab2|Tab3|Tab4|-----------------------
* *
* TabbedPane *
* *
* *



Nun, leider bekomme ich das überhaupt nicht hin. Habe auch einen VisualEditor, wo ich dachte ich könnte das mit Drag&Drop einfach gestalten... ..aber nix da!

Einzelne Dinge ****en schon, aber das Zusammenspiel überhaupt nicht.
Menubar kann ich adden (aus eigener Klasse), aber nicht die Splitpane. Wenn die Splitpane geaddet ist, kann ich sie nicht verschieben... usw. usw.

Erstmal zum Verständnis:

Lege ich über den Main Frame eine JPane (JContentpane) und adde die anderen Panes zu der Contentpane?
Ist die Reihenfolge relevant?
In den Tabs sollen verschiedene Darstellungen (Tabellen, Text usw.) aus verschiedenen VisualClasses rein. Kein Prob, oder?

Kann mir bitte jemand helfen? Muss ja keiner für mich erstellen, aber die GUI-Basics "erklären".
Hab ja schon so viel gelesen (und bin kein Java-Neuling - hab nur noch keine GUI erzeugt!), aber komme irgendwie nicht "dahinter".

Grüße und schöne Woche,
Maddin
 
BITTE BITTE**********

Hier meine Klassen: Keine ahnung, warum außer der Menubar NICHTS angezeigt wird!!

Java:
public class Main extends JFrame implements ComponentListener {

	private static final long serialVersionUID = 1L;
	private JScrollPane jScrollPane = null;  
	public static Output o;
	public static JFrame frame = new JFrame("");  
	public static BasicWindowMonitor b;
	public static Main m1;


	
	public static void main(String[] args) {
		m1 = new Main();
	}

	/**
	 * This is the default constructor
	 */
	public Main() {
		this.setPreferredSize(new Dimension(1280, 998));
		this.setMinimumSize(new Dimension(780, 580));
		this.pack();
		this.addComponentListener(this);
		this.setTitle("Masterplan - Tool");
		this.setJMenuBar(new Menubar());
		this.setDefaultCloseOperation(0);
		b = new BasicWindowMonitor();
		this.add(getJScrollPane());
		this.addWindowListener(b);
		o = new Output();
		jScrollPane.setViewportView(o);
		jScrollPane.getViewport().setViewSize(new Dimension(1280, 1000));
		jScrollPane.setAutoscrolls(true);
		this.setVisible(true);


		this.setContentPane(getJScrollPane());
		this.setTitle("LEck mich doch am *****!");
	}

	/**
	 * This method initializes jContentPane
	 *
	 * @return javax.swing.JPanel
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane
					.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
			jScrollPane
					.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		}
		return jScrollPane;
	}

	public void componentHidden(ComponentEvent e) {
		// TODO Auto-generated method stub

	}

	public void componentMoved(ComponentEvent e) {
		// TODO Auto-generated method stub

	}

	public void componentResized(ComponentEvent e) {
		double breite = e.getComponent().getSize().getWidth();
		double hoehe = e.getComponent().getSize().getHeight();
		double breitemin = frame.getMinimumSize().getWidth();
		double hoehemin = frame.getMinimumSize().getHeight();
		if (breite < breitemin) {
			frame.setSize(frame.getMinimumSize());
		} else if (hoehe < hoehemin) {
			frame.setSize(frame.getMinimumSize());
		}
	}

	public void componentShown(ComponentEvent e) {
		// TODO Auto-generated method stub

	}

}


Und hier noch meine Klasse Output:

Java:
public class Output extends JPanel implements MouseListener,
ActionListener, KeyListener {

	public static JSplitPane jSplitPane = null;
	public static JPanel BottomPane = null;
	public static JPanel Top = null;
	public static JScrollPane ScrollPaneOben = null;
	public static JPanel MittelPanel = null;
	public static JPanel PanelTable = null;
	public static JScrollPane ScrollPaneUnten = null;
	public static JTabbedPane TPD = null;
	public static JToolBar ToolBarUnten = null;
	public static JPanel ToolBarPanel = null;

	public static BorderLayout b;

	/**
	 * This is the default constructor
	 */
	public Output() {
		super();
		//initialize();

	}

	/**
	 * This method initializes this
	 *
	 * @return void
	 */
	private void initialize() {

		try{
			this.setSize(1200, 980);
			this.setLayout(null);
			this.add(BottomPane);
		}catch (Exception e) {
			System.out.println("34qökorhtq-");
		}

		try {
			UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
			SwingUtilities.updateComponentTreeUI(this);
		} catch (UnsupportedLookAndFeelException e) {
			System.out.println("UnsupportedLookAndFeelException");
		} catch (ClassNotFoundException e) {
			System.out.println("ClassNotFoundException");
		} catch (InstantiationException e) {
			System.out.println("InstantiationException");
		} catch (IllegalAccessException e) {

		}

		this.add(jSplitPane, null);
//		PanelTable.add(suchPanel.getSearchPanel);
//		SearchPanel.tableView.addMouseListener(this);
//   	SearchPanel.tableView.addKeyListener(this);

//		sd = new StammdatenNew();
		TPD.addTab("MASTER", null);


	}

	/**
	 * This method initializes jSplitPane
	 *
	 * @return javax.swing.JSplitPane
	 */
	public JSplitPane getJSplitPane() {
		if (jSplitPane == null) {
			jSplitPane = new JSplitPane();
			jSplitPane.add(Top);
			jSplitPane.add(BottomPane);
		}
		return jSplitPane;
	}

	/**
	 * This method initializes BottomPane
	 *
	 * @return javax.swing.JPanel
	 */
	private JPanel getBottomPane() {
		if (BottomPane == null) {
			BottomPane = new JPanel();
			b = new BorderLayout();
			BottomPane.setLayout(b);
			BottomPane.add(getScrollPaneUnten(), BorderLayout.CENTER);
			BottomPane.add(getToolBarUnten(), BorderLayout.NORTH);
		}
		return BottomPane;
	}
	/**
	 * This method initializes Top
	 *
	 * @return javax.swing.JPanel
	 */
	public JPanel getTop() {
		if (Top == null) {
			Top = new JPanel();
			Top.setLayout(new BorderLayout());
			Top.add(getScrollPaneOben(), BorderLayout.CENTER);

		}
		return Top;
	}

	/**
	 * This method initializes ScrollPaneOben
	 *
	 * @return javax.swing.JScrollPane
	 */
	public JScrollPane getScrollPaneOben() {
		if (ScrollPaneOben == null) {
			ScrollPaneOben = new JScrollPane();
			ScrollPaneOben
					.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
			ScrollPaneOben.setViewportView(getMittelPanel());
		}
		return ScrollPaneOben;
	}

	/**
	 * This method initializes MittelPanel
	 *
	 * @return javax.swing.JPanel
	 */
	public JPanel getMittelPanel() {
		if (MittelPanel == null) {
/*			lbldberrorIcon = new JLabel();
			lbldberrorIcon.setBounds(new Rectangle(27, 293, 24, 38));
			lbldberrorIcon.setIcon(new ImageIcon("http://www.tutorials.de/images/database_delete.png"));
			lbldberrorIcon.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED);
			lbldbleer = new JLabel();
			lbldbleer.setBounds(new Rectangle(50, 293, 304, 38));
			lbldbleer.setForeground(java.awt.Color.red);
			lbldbleer.setFont(new Font("Georgia", Font.BOLD, 11));
			lbldbleer.setText(xml.getLabel("errordbleer"));
	*/		MittelPanel = new JPanel();
			MittelPanel.setLayout(null);
			MittelPanel.add(getPanelTable(), null);
//			MittelPanel.add(getAnzahlDatensaetze(), null);
//			MittelPanel.add(getSearchfor(), null);
//			MittelPanel.add(lbldbleer, null);
//			MittelPanel.add(lbldberrorIcon, null);
//			MittelPanel.add(getScverlauf(), null);
//			MittelPanel.add(getVerlauf(), null);
			MittelPanel
			.addComponentListener(new java.awt.event.ComponentAdapter() {
				@Override
				public void componentResized(
						java.awt.event.ComponentEvent e) {
					component_action();
				}
			});
		}
		return MittelPanel;
	}


	public static void component_action() {
		PanelTable.setBounds(new Rectangle(353, 3, 526,
				MittelPanel.getHeight() - 17));
/*		SearchPanel.searchPanel.setPreferredSize(new java.awt.Dimension(500,
				MittelPanel.getHeight() - 22));
		SearchPanel.scrollpane.setPreferredSize(new java.awt.Dimension(505,
				MittelPanel.getHeight() - 25));
		scverlauf.setBounds(new Rectangle(890, 70, 345,
				MittelPanel.getHeight() - 86));
*/
	}





	/**
	 * This method initializes PanelTable
	 *
	 * @return javax.swing.JTable
	 */
	public JPanel getPanelTable() {
		if (PanelTable == null) {
			PanelTable = new JPanel();
			PanelTable.setLayout(new GridBagLayout());
			PanelTable.setBounds(new Rectangle(353, 3, 526, 390));

		}
		return PanelTable;
	}

	/**
	 * This method initializes ScrollPaneUnten
	 *
	 * @return javax.swing.JScrollPane
	 */
	public JScrollPane getScrollPaneUnten() {
		if (ScrollPaneUnten == null) {
			ScrollPaneUnten = new JScrollPane();
			ScrollPaneUnten
					.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
			ScrollPaneUnten.setViewportView(getTPD());
		}
		return ScrollPaneUnten;
	}

	/**
	 * This method initializes TPD
	 *
	 * @return javax.swing.JTabbedPane
	 */
	public JTabbedPane getTPD() {
		if (TPD == null) {
			TPD = new JTabbedPane();
		}
		return TPD;
	}

	/**
	 * This method initializes ToolBarUnten
	 *
	 * @return javax.swing.JToolBar
	 */
	public JToolBar getToolBarUnten() {
		if (ToolBarUnten == null) {
			ToolBarUnten = new JToolBar("Toolbar");
			ToolBarUnten.setOrientation(JToolBar.VERTICAL);
			ToolBarUnten.setBorder(null);
			ToolBarUnten.setToolTipText("tbartext");
			ToolBarUnten.setFloatable(false);
			ToolBarUnten.add(getToolBarPanel());
			ToolBarUnten.add(getJSplitPane());
			ToolBarUnten.setRollover(true);
		}
		return ToolBarUnten;
	}

	/**
	 * This method initializes ToolBarPanel
	 *
	 * @return javax.swing.JPanel
	 */
	public JPanel getToolBarPanel() {
		if (ToolBarPanel == null) {
			ToolBarPanel = new JPanel();
			ToolBarPanel.setLayout(new FlowLayout());
			ToolBarPanel.setPreferredSize(new Dimension(120, 40));
	/*		ToolBarPanel.add(getLetzte(), null);
			ToolBarPanel.add(getNaechster(), null);
			ToolBarPanel.add(getZurueck(), null);
			ToolBarPanel.add(getVor(), null);
			ToolBarPanel.add(getNeu(), null);
			ToolBarPanel.add(getAendern(), null);
			ToolBarPanel.add(getLoeschen(), null);
			ToolBarPanel.add(getDrucken(), null);
			ToolBarPanel.add(getPdfout(), null);
			ToolBarPanel.add(getEnde(), null);
	*/	}
		return ToolBarPanel;
	}
}

// Hier kommen noch die ganzen Events. Poste ich mal nicht mit....





Findet bitte irgendwer den Fehler. Ich verliere langsam die Nerven.

mfg
Maddin
 
Hi,
habe mir jetzt deinen code nicht weiter angeschaut sondern habe mal versucht deine gewollte Gui so einfach wie möglich nachzubauen.
Hier mal der Code dazu:
Code:
package guiTesting;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;

public class Gui extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private JMenuBar menubar;
	private JMenu menu;
	private JMenuItem item;

	private JPanel oben;
	private JPanel links;
	private JPanel rechts;

	private JSplitPane splitPane;

	private JTabbedPane tabs;
	private JPanel tab1;
	private JPanel tab2;

	public Gui() {
		_init();
		_build();
		_show();
	}

	/**
	 * Initialisierung aller Elemente
	 */
	private final void _init() {
		setLayout(new BorderLayout());

		// MENU
		menubar = new JMenuBar();
		menu = new JMenu("Datei");
		item = new JMenuItem("Beenden");

		// OBERE PANELS
		oben = new JPanel(new GridLayout(1, 2));
		links = new JPanel();
		rechts = new JPanel();

		// UNTERE TABS
		tabs = new JTabbedPane();
		tab1 = new JPanel();
		tab2 = new JPanel();

		// JSPLITPANE
		splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, oben, tabs);
	}

	/**
	 * Zusammenbauen der Oberfläche
	 */
	private final void _build() {
		// MENU
		menubar.add(menu);
		menu.add(item);
		setJMenuBar(menubar);

		// OBERE PANELS
		links.setBackground(Color.WHITE); // Zum Sichtbarmachen der beiden
		rechts.setBackground(Color.BLACK); // Panels
		oben.add(links);
		oben.add(rechts);

		// UNTERE TABS
		tabs.add("Tab 1", tab1);
		tabs.add("Tab 2", tab2);

		// SPLITPANE
		add(splitPane, BorderLayout.CENTER);
	}

	/**
	 * Oberfläche sichtbar machen
	 */
	private final void _show() {
		setSize(500, 500);
		setMinimumSize(getSize());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null); // lässt Frame in der Mitte erscheinen
		setVisible(true);

		splitPane.setDividerLocation(0.5);// funktioniert erst wenn SplitPane
											// sichtbar ist
	}

	public static void main(String[] args) {
		new Gui();
	}

}

Vorgehensweiße:
- Erstellen des Menüs
- Erstellen der 2 Panels oben und anschließendes Hinzufügen auf ein Panel mit GridLayout(zum nebeneinander anordnen)
- Ertellen der Tabs inklusive TabbedPane für unten
- Erstellen der SplitPane mit den benötigten Parametern
- nötige Einstellungen für Frame(Größe, Position ...) treffen
- Frame sichtbar machen
- Divider der SplitPane in die Mitte setzen

Ich hoffe ich konnte dir damit weiterhelfen, wenn noch Fragen sind kannst du die gerne stellen ;)
 
Zurück