Hallo zusammen,
habe folgende ("Newbie"-)Frage: Es soll zur Laufzeit das Layout eines inneren Panels geändert werden können (über Radiobuttons, die heißen im untenstehenden Listing heißen flowLayout, borderLayout und gridLayout).
Ich habe mir nachfolgende (wohl zu) simple Lösung (hier: Fragment) überlegt, aber das funktioniert nicht.
Eigentlich dachte ich, dass über die Fallunterscheidungen in der Methode "panelVeraendern()" die entsprechenden Layouts bei der Wahl eines Radiobuttons dann auch angezeigt werden. Es passiert aber nichts.
Hingegen funktioniert der erste Aufruf aus dem Konstruktor heraus (wenn die Oberfläche angelegt wird) einwandfrei (also die Zeile "JPanel veraenderbaresPanel = panelVeraendern(0);". Wenn man hier die 0 durch 1 oder 2 ersetzt, reagiert die Methode richtig.)
Scheint also irgendwie mit den Radiobuttons zu tun zu haben.
Ich würde mich über einen Hinweis freuen, was ich falsch mache.
Vielen Dank!
Schrdro
-----------------------------------------------------------------------------------------------------------
habe folgende ("Newbie"-)Frage: Es soll zur Laufzeit das Layout eines inneren Panels geändert werden können (über Radiobuttons, die heißen im untenstehenden Listing heißen flowLayout, borderLayout und gridLayout).
Ich habe mir nachfolgende (wohl zu) simple Lösung (hier: Fragment) überlegt, aber das funktioniert nicht.
Eigentlich dachte ich, dass über die Fallunterscheidungen in der Methode "panelVeraendern()" die entsprechenden Layouts bei der Wahl eines Radiobuttons dann auch angezeigt werden. Es passiert aber nichts.
Hingegen funktioniert der erste Aufruf aus dem Konstruktor heraus (wenn die Oberfläche angelegt wird) einwandfrei (also die Zeile "JPanel veraenderbaresPanel = panelVeraendern(0);". Wenn man hier die 0 durch 1 oder 2 ersetzt, reagiert die Methode richtig.)
Scheint also irgendwie mit den Radiobuttons zu tun zu haben.
Ich würde mich über einen Hinweis freuen, was ich falsch mache.
Vielen Dank!
Schrdro
-----------------------------------------------------------------------------------------------------------
Code:
public class LayoutGUI_V1 extends JFrame { ….. //Methode, um ein Panel anzulegen, dessen Layout sich gesteuert durch Radiobuttons verändern kann // Die Methode wird mit Parameterwert 0, 1 oder 2 aufgerufen, hierüber soll das Layout gesteuert werden private JPanel panelVeraendern(int val) { JPanel tempPanel = new JPanel(); if (val == 0) tempPanel.setLayout(new FlowLayout(FlowLayout.LEFT,10,10)); if (val == 1) tempPanel.setLayout(new FlowLayout(FlowLayout.RIGHT,10,10)); if (val == 2) tempPanel.setLayout(new GridLayout(0,3)); //Labels für das Panel mit dem variablen Layout text1 = new JLabel("Text1"); text2 = new JLabel("Text2"); text3 = new JLabel("Text3"); text4 = new JLabel("Text4"); tempPanel.add(text1); tempPanel.add(text2); tempPanel.add(text3); tempPanel.add(text4); tempPanel.setBorder(new TitledBorder("Panel mit veränderbarem Layout")); return tempPanel; } … //Der Itemlistener soll je nachdem, welcher Radiobutton gewählt ist, den Parameterwert 0, 1 oder 2 //setzen und dann die Methode panelVeraendern() aufrufen. In dieser Methode wird dann abhängig //vom Wert 0, 1 0der 2 das Layout ausgewählt. //Innere Klasse für den ItemListener (reagiert auf Betätigung Radiobuttons) class MeinListener implements ItemListener { @Override public void itemStateChanged(ItemEvent e) { if(flowLayout.isSelected() == true) panelVeraendern(0); if(borderLayout.isSelected() == true) panelVeraendern(1); if(gridLayout.isSelected() == true) panelVeraendern(2); } } //Konstruktor - hier werden die Unterpanel angelegt public LayoutGUI_V1 (String titel) { super(titel); JPanel auswahlpanel = panelZurAuswahl(); JPanel veraenderbaresPanel = panelVeraendern(0); setSize(600,200); setLayout(new GridLayout(0,2)); add(auswahlpanel); add(veraenderbaresPanel); //Listener für die Radiobuttons verbinden MeinListener listener = new MeinListener(); flowLayout.addItemListener(listener); borderLayout.addItemListener(listener); gridLayout.addItemListener(listener); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); //pack(); setVisible(true); }}
Comment