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:
(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):
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
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
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: