LayoutManager GUI-Design: eventuelle Alternativen zum Verschachteln + Ansprechen von JPanel()?

baphomet13

Mitglied
Liebe Alle,

ich habe zwei Fragen, die aber miteinander zu tun haben und die ich deshalb gerne in diesem Thread zusammenfassen würde: eine generellere Frage zum GUI-Design, eine zur Steuerung des Inhalts von JPanels.

1. GUI-DESIGN: Ich habe bspw. ungefähr folgendes Layout vor:

Code:
 _____________________________________________________
| (1) Menüleiste                                      |
 -----------------------------------------------------
| (2) Toolbar                                         |
 -----------------------------------------------------
|                                                     |
| (3) Steuerungselemente (Buttons/Dropdownlisten)     |
|                                                     |
 -----------------------------------------------------
|                                                     |
| (4) Anzeigefenster (je nach Auswahl in              |
| den Steuerungselemente JTextField oder JTable)      |
|                                                     |
 -----------------------------------------------------

(3) wird u.U. als JTabbedPane gelöst, ist zunächst aber ein JPanel().

Habe das Ganze mit verschachtelten LayoutManagers gelöst (v.a. BorderLayout):

Java:
public class Gui extends JFrame implements ActionListener {
	
    /* Class Variables */
	private JLabel l1, l2, l3;
	private JPanel mainPanel, toolPanel, outputPanel;
	
    public Gui (String textVal)
    {
    	super("Titel");
        
        //Create and set up the window.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        setJMenuBar(createMenuBar());
        setContentPane(createContentPane());
        
        // *** DO STUFF ***
        l1 = new JLabel("Start");
        l2 = new JLabel();
        l3 = new JLabel();
        JToolBar toolb = new JToolBar();
        JButton b1 = new JButton("Button 1");
        b1.addActionListener(this);
        b1.setActionCommand("b1");
        JButton b2 = new JButton("Button 2");
        toolb.add(b1);
        toolb.add(b2);
        getContentPane().add(BorderLayout.NORTH,toolb);
        
        // mainPanel in CENTER of getContentPane
        mainPanel = new JPanel(new BorderLayout());
        mainPanel.setBackground(Color.RED);
        getContentPane().add(BorderLayout.CENTER,mainPanel);
        
        // toolPanel in NORTH of mainPanel
        toolPanel = new JPanel();
        toolPanel.setBackground(Color.yellow);
        mainPanel.add(BorderLayout.NORTH,toolPanel);
        
        // outputPanel in CENTER of mainPanel
        outputPanel = new JPanel();
        outputPanel.setBackground(Color.green);
        mainPanel.add(BorderLayout.CENTER,outputPanel);
        
        // JLabel l2 (emtpy until now) in outputPanel -> to be changed by Action
        /** ACTION SOLLTE DANN L2 REMOVEN UND L3 SCHREIBEN  **/
        l2 = new JLabel("Zustand Eins");
        outputPanel.add(l2);
        
        //Display the window.
        pack();
        setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
        setVisible(true);

Code ist noch unvollständig und beinhaltet Platzhalter.

Element (4) (das JPanel() outputPanel) soll variabel besetzt werden können. Frage 1 ist nun: ist dies Verschachtelung der JPanel()s mit LayoutManagern die beste Möglichkeit oder gibt es elegantere Möglichkeiten, so ein Desing umzusetzen?

2. ANSPRECHEN VON outputPanel: Meine Idee war hier, dass je nach Auswahl bzw. Action im toolPanel der Inhalt von outputPanel belegt wird, also dass per Default ein JTextField() angezeigt wird, wenn man aber einen Button im toolPanel klickt bspw. eine JTable(), ein JLabel() o.ä. angezeigt wird. Ich hätte jetzt instinktiv versucht, jeweils das outputPanel per new JPanel() neu und leer zu instanziieren und dann das gewünschte Element zu adden
Java:
outputPanel.add(new JTextField());

Frage 2 ist also, ob das a) funktioniert (das würde ich im Zweifesfall selbst ausprobieren, falls niemand "Halt!" ruft, ich erwarte keinen fertigen Code) und b) die beste (kürzeste/eleganteste) Möglichkeit ist, bzw. welches bessere Variante es gibt.

Vielen herzlichen Dank für Mühe, Geduld und Hilfe!
B13
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Verschachteln ist OK. Es sollte wohl nicht zuuuu tief werden, aber wenn man das ein bißchen in Methoden aufteilt, z.B. wie in diesem Post grob angedeutet, bleibt das Handhhabbar.
Als Alternative würde hier vielleicht ein BoxLayout in Frage kommen (oder natürlich das allmächtige GridBagLayout oder ein anderer, mächtigerer LayoutManager), aber eigentlich ist das BorderLayout dafür IMHO perfekt geeignet.

Das "Ansprechen" ... alte Components enfernen und neue Einfügen kann schon sehr frickelig werden. Im allgemeinen ist man da mit einem How to Use CardLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container) deutlich besser bedient.
 

baphomet13

Mitglied
Das "Ansprechen" ... alte Components enfernen und neue Einfügen kann schon sehr frickelig werden. Im allgemeinen ist man da mit einem How to Use CardLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container) deutlich besser bedient.

Ah, daran hatte ich gar nicht gedacht. :toll:

Ich nehme an, dass das Aufrufen der Cards über beliebige Steuerelemente erfolgen kann, insofern wird das die beste Möglichkeit sein. Danke!

Re Verschachteln, das dürfte in meinem Fall nicht besonders tief werden, insofern bleibt der Überblick gewahrt :).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Button / Design Ideen AWT, Swing, JavaFX & SWT 2
M JavaFX kann man da noch was am code vereinfachen design technisch sieht nicht richtig aus... AWT, Swing, JavaFX & SWT 15
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
L JavaFX GUI Design AWT, Swing, JavaFX & SWT 6
W WindowBuilder / Design-Vorschau schneidet den Rand ab AWT, Swing, JavaFX & SWT 0
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
SchmidiMC Swing Vorschläge für ein Design AWT, Swing, JavaFX & SWT 5
das_leon AWT Button Design ändern AWT, Swing, JavaFX & SWT 5
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
F Design-Anzeige im Windowbuilder AWT, Swing, JavaFX & SWT 3
K GridBagLayout mit reponsive Design AWT, Swing, JavaFX & SWT 2
B Design Umsetzung AWT, Swing, JavaFX & SWT 1
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
L LookAndFeel Eigenes Design für die Applikation AWT, Swing, JavaFX & SWT 4
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
T JavaFX "DefaultButton"-Design ändern AWT, Swing, JavaFX & SWT 8
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
N GUI Design ohne GUIDesigner AWT, Swing, JavaFX & SWT 10
D GWT Design AWT, Swing, JavaFX & SWT 0
B Custom JTabbedPane-Tab-Design AWT, Swing, JavaFX & SWT 2
U WindowBuilder "Design-Tab" AWT, Swing, JavaFX & SWT 2
P LayoutManager Design meines Projekts (hätte wer zeit?) AWT, Swing, JavaFX & SWT 9
G Eclipse: Design Tab wird nicht mehr angezeigt AWT, Swing, JavaFX & SWT 4
M Design in Java umsetzen AWT, Swing, JavaFX & SWT 3
Tsuna JButtons in Apple-Design AWT, Swing, JavaFX & SWT 4
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11
J LayoutManager Welchen Layout/Design-Manager? AWT, Swing, JavaFX & SWT 4
W LayoutManager Clientfenster ins Design einbinden AWT, Swing, JavaFX & SWT 13
F JSlider Design ändern AWT, Swing, JavaFX & SWT 6
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
G Grundsatzfrage GUI-Design AWT, Swing, JavaFX & SWT 6
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
tuttle64 Design für mehrere Sprachen in Swing AWT, Swing, JavaFX & SWT 15
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
M Special design of Swing components AWT, Swing, JavaFX & SWT 14
KrokoDiehl Swing Design-Frage: eigenes Line-Wrapping AWT, Swing, JavaFX & SWT 5
T Design mit vielen Feldern AWT, Swing, JavaFX & SWT 2
D Design - View & Controller AWT, Swing, JavaFX & SWT 2
eskimo328 Moderne Swing GUI mit Web ähnlichem Design AWT, Swing, JavaFX & SWT 7
M Nochmal Swing, MVC und generelles Design AWT, Swing, JavaFX & SWT 2
S JTree Design Problem AWT, Swing, JavaFX & SWT 5
S Design problem AWT, Swing, JavaFX & SWT 2
K Design von verschiedenen Rechnern AWT, Swing, JavaFX & SWT 13
A Design Problem bei verschiedenen Oberflächen AWT, Swing, JavaFX & SWT 3
Steev Standard Design bei JFrame und AWT AWT, Swing, JavaFX & SWT 7
M Design von Elemente? AWT, Swing, JavaFX & SWT 16
T Allgemeine Frage - innovatives GUI Design AWT, Swing, JavaFX & SWT 6
P Swing-Komponenten - Standart-Windows Design? AWT, Swing, JavaFX & SWT 4
B Swing - Design Patterns AWT, Swing, JavaFX & SWT 3
S "Zerstörtes" gbl-Layout (Design) AWT, Swing, JavaFX & SWT 10
D professionelles GUI-Design als Skeleton Pro AWT, Swing, JavaFX & SWT 2
A Applikation mit Netbeans-Design AWT, Swing, JavaFX & SWT 4
R JDialog hat seltsames Design AWT, Swing, JavaFX & SWT 6
L Design-Probleme (Swing-Anfänger) AWT, Swing, JavaFX & SWT 6
M Look&Feel - Layout - GUI - Design - SAP LnF :) AWT, Swing, JavaFX & SWT 12
M Frage bzgl. Formular-Design. AWT, Swing, JavaFX & SWT 2
R Programm an Design anpassen. AWT, Swing, JavaFX & SWT 4
H Alternativen zu EXIT AWT, Swing, JavaFX & SWT 4
Z Gibt es alternativen zu Swing und AWT, Swing, JavaFX & SWT 4
T Rectangle Namen geben? Alternativen auch gerne gesehen. AWT, Swing, JavaFX & SWT 2
N Alternativen zu JavaHelp gesucht AWT, Swing, JavaFX & SWT 13
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Alternativen zu Swing AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben