JPanel übereinander ...?

Supermario

Mitglied
Hi

ich bin gerade dabei mir ein kleines GUI zubasteln. Sieht auch schon ganz gut aus, nur jetzt möchte ich gerne rechts eine Art Menu machen und links soll sich das jeweilige JPanel öffnen. Ich bekomms nur leider nicht hin, bzw jetzt meine Frage, ist es überhaupt möglich? Oder geht man da lieber anders vor und wenn ja, wie? :) Zur Veranschaulichung habe ich mal meine GUI als Bild angehängt.
Bsp. Wenn ich nun auf Datenbank clicke, soll er nun ein neues JPanel auf das jetzige "Gruppen verwalten" legen ... - von der Art ein "JTabbedPane" nur halt mit icons und ein bisschen schöner.

Danke im Vorraus für die Hilfe
 

Anhänge

  • swing_wie.jpg
    swing_wie.jpg
    46,4 KB · Aufrufe: 366
Hallo Mario,

ich sag dir mal meine "subjektive" Meinung. Falls du dich in Swing intensiver einarbeiten möchtest, dann verfolge deinen jetzigen Ansatz. D.h. erstelle GUI Komponenten die Swing von Haus aus nicht mitliefert selbst.

Wenn du jedoch vorhast eine umfangreiche, komplexe Software mit vielen Features zu implementieren sei es kommerziel als auch opensource, greife auf Swing Erweiterungen von Drittanbietern zurück.
Warum? Das erstellen dieser Komponenten wird dich beträchtlich aufhalten, du wirst dich weniger auf den Kern deiner Anwendung konzentrieren und investieren können.

Schau mal hier:
JXTaskPane
http://swinglabs.org

JTaskPane, JTaskPaneGroup
http://common.l2fprod.com/index.php

Hier eine Übersicht und Links zu weiteren GUI Elementen:
http://www.tutego.com/java/additional-java-swing-components.htm


Vg Erdal
 
Hey,

danke erstmal für die schnelle Hilfe. ICh hab mir gerade mal JTaskPane, JTaskPaneGroup angeguckt und da gibt es den JButtonBar und das ist genau das, was ich brauche! Juhu! Das Problem ist nur, das ich mein GUI mit Netbeans gemacht habe und nicht so in Java drin bin um das per Hand anzupassen. Gibt es möglichkeiten Netbeans irgendwie aufzustocken? Hab die Jar davon geladen, aber in der Butto Palette ist keine JButtonBar :(.

gruß
 
Hallo Mario,

also mit Netbeans bin ich nicht besonders bewandert.

Hier mal ein einfacher Beispielcode wie JButtonBar in die GUI integriert werden kann.

Java:
package test;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import com.l2fprod.common.swing.JButtonBar;

public class ButtonBarExample extends JPanel implements ActionListener {

	private JButtonBar buttonBar;

	private JToggleButton button1, button2, button3;

	private JPanel currentPanel;

	public ButtonBarExample(JFrame frame) {
		frame.setTitle("ButtonBar Example");
		this.setLayout(new BorderLayout());

		buttonBar = new JButtonBar(JButtonBar.VERTICAL);
		buttonBar.setBackground(Color.ORANGE);
		buttonBar.setBorder(BorderFactory.createRaisedBevelBorder());
		buttonBar.add(button1 = new JToggleButton("Quadrat", new Icon1()));
		buttonBar.add(button2 = new JToggleButton("Kreis", new Icon2()));
		buttonBar.add(button3 = new JToggleButton("Halbkreis", new Icon3()));

		this.add(buttonBar, "West");
		this.add(currentPanel = new RedPanel(), "Center");

		ButtonGroup bg = new ButtonGroup();
		bg.add(button1);
		bg.add(button2);
		bg.add(button3);
		button1.setSelected(true);

		button1.setActionCommand("b1");
		button2.setActionCommand("b2");
		button3.setActionCommand("b3");
		button1.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setAlwaysOnTop(true);
		frame.setLocationRelativeTo(null);

		frame.add(new ButtonBarExample(frame));

		frame.pack();
		frame.setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		String s = e.getActionCommand();
		if (s.equals("b1")) {
			this.remove(currentPanel);
			this.add(currentPanel = new RedPanel(), "Center");
			this.updateUI();
		} else if (s.equals("b2")) {
			this.remove(currentPanel);
			this.add(currentPanel = new BluePanel(), "Center");
			this.updateUI();
		} else {
			this.remove(currentPanel);
			this.add(currentPanel = new PinkPanel(), "Center");
			this.updateUI();
		}
	}

	class RedPanel extends JPanel {
		public RedPanel() {
			this.setBackground(Color.RED);
			this.setPreferredSize(new Dimension(300, 300));
		}
	}

	class BluePanel extends JPanel {
		public BluePanel() {
			this.setBackground(Color.BLUE);
			this.setPreferredSize(new Dimension(300, 300));
		}
	}

	class PinkPanel extends JPanel {
		public PinkPanel() {
			this.setBackground(Color.PINK);
			this.setPreferredSize(new Dimension(300, 300));
		}
	}

	class Icon1 implements Icon {
		public void paintIcon(Component c, Graphics g, int x, int y) {
			g.setColor(Color.RED);
			g.fillRect(x, y, getIconWidth(), getIconHeight());
		}

		public int getIconWidth() {
			return 48;
		}

		public int getIconHeight() {
			return 48;
		}
	}

	class Icon2 implements Icon {
		public void paintIcon(Component c, Graphics g, int x, int y) {
			g.setColor(Color.BLUE);
			g.fillOval(x, y, getIconWidth(), getIconHeight());
		}

		public int getIconWidth() {
			return 48;
		}

		public int getIconHeight() {
			return 48;
		}
	}

	class Icon3 implements Icon {
		public void paintIcon(Component c, Graphics g, int x, int y) {
			g.setColor(Color.PINK);
			g.fillArc(x, y, getIconWidth(), getIconHeight(), 45, 180);
		}

		public int getIconWidth() {
			return 48;
		}

		public int getIconHeight() {
			return 48;
		}
	}
}


Vg Erdal
 

Anhänge

  • buttonbar.png
    buttonbar.png
    7,4 KB · Aufrufe: 142
hey flashray, vielen Dank! das hat mir schon sehr viel geholfen. Es kann sein das ich hier nochmal eine frage bzgl. der JButtonBar schreibe. Aber zur Zeit bin ich dabei deinen Code zuverstehen und das klappt außergewöhnlich gut :) danke hierfür!

Bzw. wie geh ich denn jetzt am besten vor um die 3 Panels zu designe? Schreib ich das nun alles in den Red/blue etc panel oder macht man da wieder Klassen? :)
 
Zuletzt bearbeitet:
Zurück