Methode setzt nicht das Layout in einer if-Abfrage

bandy

Bekanntes Mitglied
Hallo,
ich habe ein Programm geschrieben, das wie folgt aussieht:

RL.JPG

Nun funktioniert fast alles ganz gut, bis auf eine Sache, die Methode welche fuer das setzen der Layouts fuer die 5 Buttons in einem inneren Panel zustaendig ist, setzt nicht die Layouts in der if-Abfrage nachdem Radiobuttons aktiviert werden, obwohl es ueberprueft und in der Konsole zur Bestaetigung ausgegeben wird, dass der Listener die Befehle der Radiobuttons an die Methode ueber Klassenvariablen weiterleitet.

Wenn Radiobuttons gewaehlt werden, so werden die Werte der zustaendigen Klassenvariablen auf true gesetzt:
Java:
//speichern den Wert der Radiobuttons
	private boolean a;
	private boolean b;
	private boolean c;
	private boolean d;





Hier die Methode:

Java:
 //Die Methode fuer das innere Panel
	public JPanel panelInnen(){
		
		JPanel JPanelInnen= new JPanel();
				
		if(a==true){
			System.out.println("Ausgabe aus panelInnen(): "+a);	
			JPanelInnen.setLayout(new GridLayout(0,4)); 
			System.out.println("Panel Layout 1 gesetzt");}
		
		if(b==true){
			System.out.println("Ausgabe aus panelInnen(): "+b);
			JPanelInnen.setLayout(new GridLayout(0,3)); 
			System.out.println("Panel Layout 2 gesetzt");}
		
		if(c==true){
			System.out.println("Ausgabe aus panelInnen(): "+c);
			JPanelInnen.setLayout(new GridLayout(0,2)); 
			System.out.println("Panel Layout 3 gesetzt");}
		
		if(d==true){
			System.out.println("Ausgabe aus panelInnen(): "+d);	
			JPanelInnen.setLayout(new GridLayout(0,1)); 
			System.out.println("Panel Layout 4 gesetzt");}
		
		
		button1 = new JButton(" Schaltflaeche 1 ");
		button2 = new JButton(" Schaltflaeche 2 ");
		button3 = new JButton(" Schaltflaeche 3 ");
		button4 = new JButton(" Schaltflaeche 4 ");
		button5 = new JButton(" Schaltflaeche 5 ");
		
		
		JPanelInnen.add(button1);
		JPanelInnen.add(button2);
		JPanelInnen.add(button3);
		JPanelInnen.add(button4);
		JPanelInnen.add(button5);
		JPanelInnen.setBorder(new TitledBorder("Layoutpanel"));
		
		return JPanelInnen;
	}

Der Listener sieht so aus:

Java:
//Innere Klassse
	class InnereKlasse implements ActionListener{
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			//wenn E x i t geklickt, beenden
			if (e.getActionCommand().equals("E x i t")) {
					System.exit(0);	}
			
			//wenn Layout 1 geklickt, a den Wert true zuweisen und Methode panelInnen aufrufen
			//damit in der if-Abfrage das richtige Layout gesetzt wird
		    if (e.getActionCommand().equals("Layout 1")){
					a=true;
					panelInnen();
	                
			System.out.println("a "+a);}//druckt Wert von a aus
			else a=false;//wenn nicht zutreffend Wert a auf false setzen
			
			if (e.getActionCommand().equals("Layout 2")){
					b=true; 
					panelInnen();
					
			System.out.println("b "+b);}
			else b=false;
			
			
			if (e.getActionCommand().equals("Layout 3")){
					c=true;
					panelInnen();
			System.out.println("c "+c);}
			else c=false;
			
			
			if (e.getActionCommand().equals("Layout 4")){
					d=true;
					panelInnen();
			
			System.out.println("d "+d);}
			else d=false;
		}
			
	}

Hat jemand Ahnung warum die Layouts sich nicht setzen lassen, obwohl sie es normalerweise mussten?:bahnhof: Wenn ich selber die Klassenvariablen auf true setze, dann springt das gewuenschte Layout an, aber warum will es so nicht??:bahnhof:
 
Und als Bestaetigung, dass if-Abfrage greift, erscheint in der Konsole folgendes:
Code:
Ausgabe aus panelInnen(): true
Panel Layout 1 gesetzt
a true

Aber Layout bleibt wie es war😳
 
probiere doch mal einen repaint-, validate-Aufruf, auf deinJPanelInnen.
also am ende der panelInnen-Methode:

Java:
JPanelInnen.validate();
JPanelInnen.repaint();
// UND IRGENDWANN WERDE ICH MEINE VARIABLEN_NAMEN KLEIN SCHREIBEN :)
 
probiere doch mal einen repaint-, validate-Aufruf, auf deinJPanelInnen.
also am ende der panelInnen-Methode:

Java:
JPanelInnen.validate();
JPanelInnen.repaint();
// UND IRGENDWANN WERDE ICH MEINE VARIABLEN_NAMEN KLEIN SCHREIBEN :)

Habe ich probiert, hilft nicht weiter. Zeigt keine Wirkung.:shock: Ich vermute, dass der Wiederaufruf der Methode panelInnen() im Listener nicht ausreichend ist, muss wohl auch der Konstruktor gleich neu aufgerufen werden, aber im Listener kennt ihn niemand:rtfm::shock::shock:
 
natürlich langt das nicht aus, wenn du sonst nichts machst?

du musst natürlich dem Parent (JFrame?) von JPanelInnen das neue JPanel adden, sonst erzeugst du ein neues JPanel und nichts weiter 😉
 
Wenn ich dich richtig verstehe meinst du das so:

Java:
//Die Methode fuer das innere Panel
	public JPanel panelInnen(){
		
		JPanel JPanelInnen= new JPanel();  // <=== dies ist neu
			
		
		if(a==true){ 
			JPanelInnen.add( new JPanel());
			
			System.out.println("Ausgabe aus panelInnen(): "+a);	
			JPanelInnen.setLayout(new GridLayout(0,4)); 
			System.out.println("Panel Layout 1 gesetzt");}
		


		if(b==true){
			System.out.println("Ausgabe aus panelInnen(): "+b);
			JPanelInnen.setLayout(new GridLayout(0,3)); 
			System.out.println("Panel Layout 2 gesetzt");}
		
		if(c==true){
			System.out.println("Ausgabe aus panelInnen(): "+c);
			JPanelInnen.setLayout(new GridLayout(0,2)); 
			System.out.println("Panel Layout 3 gesetzt");}
		
		if(d==true){
			System.out.println("Ausgabe aus panelInnen(): "+d);	
			JPanelInnen.setLayout(new GridLayout(0,1)); 
			System.out.println("Panel Layout 4 gesetzt");}		
	
		
		
		button1 = new JButton(" Schaltflaeche 1 ");
		button2 = new JButton(" Schaltflaeche 2 ");
		button3 = new JButton(" Schaltflaeche 3 ");
		button4 = new JButton(" Schaltflaeche 4 ");
		button5 = new JButton(" Schaltflaeche 5 ");
		
		
		JPanelInnen.add(button1);
		JPanelInnen.add(button2);
		JPanelInnen.add(button3);
		JPanelInnen.add(button4);
		JPanelInnen.add(button5);
		JPanelInnen.setBorder(new TitledBorder("Layoutpanel"));
		
		return JPanelInnen;
	}

Aber funktioniert auch nicht:shock:
 
Irgendwo im Code musst du doch sowas in der Art stehen haben:

Java:
mainFrame.add(JPanelInnen, BorderLayout.Center);
//oder
mainPanel.add(JPanelInnen, BorderLayout.Center);

das musst du halt nochmal aufrufen, mit dem neuen Panel, dass dir deine Methode panelInnen zurückgibt!
 
Irgendwo im Code musst du doch sowas in der Art stehen haben:

Java:
mainFrame.add(JPanelInnen, BorderLayout.Center);
//oder
mainPanel.add(JPanelInnen, BorderLayout.Center);

das musst du halt nochmal aufrufen, mit dem neuen Panel, dass dir deine Methode panelInnen zurückgibt!

Richtig, so etwas habe ich im Konstruktor stehen:

Java:
   add(panelInnen, BorderLayout.CENTER);


Das habe ich auch versucht, den Konstruktor gleich mit aufzurufen, aber gelungen ist mir das nicht😳

Nun wenn ich diese Zeile einzeln in die Methode panelInnen() aufnehme, dann aendert das schon Layouts, aber nicht so wie es sein sollte.

Hier noch mal der ganze Quelltext:

Java:
package anwendung;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;


public class Anwendung extends JFrame{
		
	private static final long serialVersionUID = 1L;
	
	
	private JRadioButton layout1, layout2, layout3, layout4 ;
	//Button fuer das Enden des Programms
	private JButton buttonExit;
	//5 Buttons fuer das innere Panel
	public JButton button1, button2, button3, button4, button5;
	private ButtonGroup gruppe;
	
	//speichern den Wert der Radiobuttons
	public boolean a;
	private boolean b;
	private boolean c;
	private boolean d;
	
	//Innere Klassse
	class InnereKlasse implements ActionListener{
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			//wenn E x i t geklickt, beenden
			if (e.getActionCommand().equals("E x i t")) {
					System.exit(0);	}
			
			//wenn Layout 1 geklickt, a den Wert true zuweisen und Methode panelInnen aufrufen
			//damit in der if-Abfrage das richtige Layout gesetzt wird
		    if (e.getActionCommand().equals("Layout 1")){
					a=true;
					panelInnen();
					panelInnen().validate();
					

			System.out.println("a "+a);}//druckt Wert von a aus
			else a=false;//wenn nicht zutreffend Wert a auf false setzen
			
			if (e.getActionCommand().equals("Layout 2")){
					b=true; 
					panelInnen();
					
			System.out.println("b "+b);}
			else b=false;
			
			
			if (e.getActionCommand().equals("Layout 3")){
					c=true;
					panelInnen();
			System.out.println("c "+c);}
			else c=false;
			
			
			if (e.getActionCommand().equals("Layout 4")){
					d=true;
					panelInnen();
			
			System.out.println("d "+d);}
			else d=false;
		}
			
	}
	
	
			
	
	
	
	//Die Methode fuer das innere Panel
	public JPanel panelInnen(){
		
		JPanel JPanelInnen= new JPanel();
		
		
		if(a==true){ add(JPanelInnen, BorderLayout.CENTER);
			
			
			System.out.println("Ausgabe aus panelInnen(): "+a);	
			JPanelInnen.setLayout(new GridLayout(0,4)); 
			System.out.println("Panel Layout 1 gesetzt");}
		


		if(b==true){ add(JPanelInnen, BorderLayout.CENTER);
			System.out.println("Ausgabe aus panelInnen(): "+b);
			JPanelInnen.setLayout(new GridLayout(0,3)); 
			System.out.println("Panel Layout 2 gesetzt");}
		
		if(c==true){ add(JPanelInnen, BorderLayout.CENTER);
			System.out.println("Ausgabe aus panelInnen(): "+c);
			JPanelInnen.setLayout(new GridLayout(0,2)); 
			System.out.println("Panel Layout 3 gesetzt");}
		
		if(d==true){ add(JPanelInnen, BorderLayout.CENTER);
			System.out.println("Ausgabe aus panelInnen(): "+d);	
			JPanelInnen.setLayout(new GridLayout(0,1)); 
			System.out.println("Panel Layout 4 gesetzt");}		
	
		 JPanelInnen.add( new JPanel());
		
		
		button1 = new JButton(" Schaltflaeche 1 ");
		button2 = new JButton(" Schaltflaeche 2 ");
		button3 = new JButton(" Schaltflaeche 3 ");
		button4 = new JButton(" Schaltflaeche 4 ");
		button5 = new JButton(" Schaltflaeche 5 ");
		
		
		JPanelInnen.add(button1);
		JPanelInnen.add(button2);
		JPanelInnen.add(button3);
		JPanelInnen.add(button4);
		JPanelInnen.add(button5);
		JPanelInnen.setBorder(new TitledBorder("Layoutpanel"));
		
		return JPanelInnen;
	}
	
	
	//Die Methode fuer Panel von Button
	private JPanel panelButton(){
		JPanel JPanelButton= new JPanel();
		//Schaltflaeche hinzufuegen
		buttonExit=new JButton("E x i t");
	
		//das Action-Command setzen
		buttonExit.setActionCommand("E x i t");
		
		
		//JPanelButton.setLayout(new FlowLayout(FlowLayout.RIGHT,20,220));
		JPanelButton.setLayout(new GridLayout(0,1));
		JPanelButton.add(buttonExit);
		
		InnereKlasse InnereKlasse = new InnereKlasse();
		buttonExit.addActionListener(InnereKlasse);
		JPanelButton.setBorder(new TitledBorder("Panel-Exit"));
	
		return JPanelButton;
	}
	
	
	
	//Die Methode fuer das innere Panel
	private JPanel panelRadiobuttons(){
		JPanel JPanelRadiobuttons= new JPanel();
		
		//Radiobuttons setzen
		layout1=new JRadioButton("Layout 1");
		layout2=new JRadioButton("Layout 2");
		layout3=new JRadioButton("Layout 3");
		layout4=new JRadioButton("Layout 4");
		
		//Buttongroup erzeugen
		gruppe = new ButtonGroup();
		gruppe.add(layout1);
		gruppe.add(layout2);
		gruppe.add(layout3);
		gruppe.add(layout4);
		
		//Radiobutton flowlayout aktivieren
		layout2.setSelected(true);
		
				
		//das Panel bekommt ein GridLaoyut mit 1 Spalte
		JPanelRadiobuttons.setLayout(new GridLayout(0,1));
		JPanelRadiobuttons.add(layout1);
		JPanelRadiobuttons.add(layout2);
		JPanelRadiobuttons.add(layout3);
		JPanelRadiobuttons.add(layout4);
		
		//und einen Rahmen
		JPanelRadiobuttons.setBorder(new TitledBorder("Ihre Auswahl: "));
		
	
		return JPanelRadiobuttons;
	}//Ende JPanelRadioButtons
	
	
	
	//Konstruktor
	public Anwendung(String titel){
	super(titel);
	

			
	//insgesamt 4 Panels
	JPanel panelAussen, panelInnen, panelButton, panelRadiobuttons;
	
	//die Panels über die Methoden erstellen
	panelInnen = panelInnen();
	panelButton = panelButton();
	panelRadiobuttons=panelRadiobuttons();
	
	
	panelAussen = new JPanel();
	panelAussen.add(panelInnen);
	panelAussen.add(panelRadiobuttons);
	panelAussen.add(panelButton);
	
	//die beiden kommen in die Mitte
	add(panelAussen,BorderLayout.CENTER);
	//das Panel mit den Buttons nach links
	add(panelRadiobuttons, BorderLayout.WEST);
	//add(panelInnen, BorderLayout.CENTER);
	add(panelButton, BorderLayout.EAST);
	

	layout1.setActionCommand("Layout 1");
	layout2.setActionCommand("Layout 2");
	layout3.setActionCommand("Layout 3");
	layout4.setActionCommand("Layout 4");
	
	
	
	//Den Listener mit der Schaltflaeche verbinden und mit RadioButtons
	InnereKlasse InnereKlasse=new InnereKlasse();	
	layout1.addActionListener(InnereKlasse);
	layout2.addActionListener(InnereKlasse);
	layout3.addActionListener(InnereKlasse);
	layout4.addActionListener(InnereKlasse);
	
	//Standart-Aktion fuer das Schliessen-Symbol
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	//Fenstergroesse setzen und anzeigen
	setSize(1000,300);
	//Fenstergoesse Veraenderung verhindern
	setResizable(false);
	setVisible(true);
	}//Ende Konstruktor
	
}

Das Layout ist um eine Buttonstelle verschoben und wenn man weitere RadioButtons anklickt,
dann werden obendrauf geoffnet, wenn man mit der Maus drueber geht, dann sieht man den ganzen Salat gemischt:shock:
 
Java:
package test;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;

public class Anwendung extends JFrame {

	private static final long serialVersionUID = 1L;

	private JRadioButton layout1, layout2, layout3, layout4;
	private JButton buttonExit;
	public JButton button1, button2, button3, button4, button5;
	private ButtonGroup gruppe;
	private JPanel jPanelInnen;

	private boolean a, b, c, d;

	// Innere Klassse
	class InnereKlasse implements ActionListener {

		public void actionPerformed(ActionEvent e) {

			if (e.getActionCommand().equals("E x i t")) {
				System.exit(0);
			}

			else if (e.getActionCommand().equals("Layout 1")) {
				a = true;
				b = false;
				c = false;
				d = false;
				panelInnen();
			}

			else if (e.getActionCommand().equals("Layout 2")) {
				a = false;
				b = true;
				c = false;
				d = false;
				panelInnen();

			}

			else if (e.getActionCommand().equals("Layout 3")) {
				a = false;
				b = false;
				c = true;
				d = false;
				panelInnen();

			}

			else if (e.getActionCommand().equals("Layout 4")) {
				a = false;
				b = false;
				c = false;
				d = true;
				panelInnen();

			}
		}

	}

	// Die Methode fuer das innere Panel
	public JPanel panelInnen() {
		jPanelInnen.removeAll();

		if (a) {
			jPanelInnen.setLayout(new GridLayout(0, 4));
		}

		else if (b) {
			jPanelInnen.setLayout(new GridLayout(0, 3));
		}

		else if (c) {
			jPanelInnen.setLayout(new GridLayout(0, 2));
		}

		else if (d) {
			jPanelInnen.setLayout(new GridLayout(0, 1));
		} else {
			jPanelInnen.setLayout(new FlowLayout());
		}

		button1 = new JButton(" Schaltflaeche 1 ");
		button2 = new JButton(" Schaltflaeche 2 ");
		button3 = new JButton(" Schaltflaeche 3 ");
		button4 = new JButton(" Schaltflaeche 4 ");
		button5 = new JButton(" Schaltflaeche 5 ");

		jPanelInnen.add(button1);
		jPanelInnen.add(button2);
		jPanelInnen.add(button3);
		jPanelInnen.add(button4);
		jPanelInnen.add(button5);
		jPanelInnen.setBorder(new TitledBorder("Layoutpanel"));
		validate();
		return jPanelInnen;
	}

	// Die Methode fuer Panel von Button
	private JPanel panelButton() {
		JPanel JPanelButton = new JPanel();
		// Schaltflaeche hinzufuegen
		buttonExit = new JButton("E x i t");

		// das Action-Command setzen
		buttonExit.setActionCommand("E x i t");

		// JPanelButton.setLayout(new FlowLayout(FlowLayout.RIGHT,20,220));
		JPanelButton.setLayout(new GridLayout(0, 1));
		JPanelButton.add(buttonExit);

		InnereKlasse InnereKlasse = new InnereKlasse();
		buttonExit.addActionListener(InnereKlasse);
		JPanelButton.setBorder(new TitledBorder("Panel-Exit"));

		return JPanelButton;
	}

	// Die Methode fuer das innere Panel
	private JPanel panelRadiobuttons() {
		JPanel JPanelRadiobuttons = new JPanel();

		// Radiobuttons setzen
		layout1 = new JRadioButton("Layout 1");
		layout2 = new JRadioButton("Layout 2");
		layout3 = new JRadioButton("Layout 3");
		layout4 = new JRadioButton("Layout 4");

		// Buttongroup erzeugen
		gruppe = new ButtonGroup();
		gruppe.add(layout1);
		gruppe.add(layout2);
		gruppe.add(layout3);
		gruppe.add(layout4);

		// Radiobutton flowlayout aktivieren
		layout2.setSelected(true);

		// das Panel bekommt ein GridLaoyut mit 1 Spalte
		JPanelRadiobuttons.setLayout(new GridLayout(0, 1));
		JPanelRadiobuttons.add(layout1);
		JPanelRadiobuttons.add(layout2);
		JPanelRadiobuttons.add(layout3);
		JPanelRadiobuttons.add(layout4);

		// und einen Rahmen
		JPanelRadiobuttons.setBorder(new TitledBorder("Ihre Auswahl: "));

		return JPanelRadiobuttons;
	}// Ende JPanelRadioButtons

	// Konstruktor
	public Anwendung(String titel) {
		super(titel);

		// insgesamt 4 Panels
		JPanel panelAussen, panelInnen, panelButton, panelRadiobuttons;
		jPanelInnen = new JPanel();

		// die Panels über die Methoden erstellen
		panelInnen = panelInnen();
		panelButton = panelButton();
		panelRadiobuttons = panelRadiobuttons();

		panelAussen = new JPanel();
		panelAussen.add(panelInnen);
		panelAussen.add(panelRadiobuttons);
		panelAussen.add(panelButton);

		// die beiden kommen in die Mitte
		add(panelAussen, BorderLayout.CENTER);
		// das Panel mit den Buttons nach links
		add(panelRadiobuttons, BorderLayout.WEST);
		// add(panelInnen, BorderLayout.CENTER);
		add(panelButton, BorderLayout.EAST);

		layout1.setActionCommand("Layout 1");
		layout2.setActionCommand("Layout 2");
		layout3.setActionCommand("Layout 3");
		layout4.setActionCommand("Layout 4");

		// Den Listener mit der Schaltflaeche verbinden und mit RadioButtons
		InnereKlasse InnereKlasse = new InnereKlasse();
		layout1.addActionListener(InnereKlasse);
		layout2.addActionListener(InnereKlasse);
		layout3.addActionListener(InnereKlasse);
		layout4.addActionListener(InnereKlasse);

		// Standart-Aktion fuer das Schliessen-Symbol
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Fenstergroesse setzen und anzeigen
		setSize(1000, 300);
		// Fenstergoesse Veraenderung verhindern
		setResizable(false);
		setVisible(true);
	}// Ende Konstruktor

}

Hoffe es hilft dir weiter ... Die Anordnung von deinem GridLayout ist sehr merkwürdig, aber wenn du es so willst 😉
 
Zuletzt bearbeitet:
Wobei ich eher soetwas bevorzugen würde:

BTW ich hab mir nich die Mühe gemacht alle Variablen klein zu schreiben:exclaim:

Java:
package test;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;

public class Anwendung extends JFrame {

	private static final long serialVersionUID = 1L;

	private JRadioButton layout1, layout2, layout3, layout4;
	private JButton buttonExit;
	public JButton button1, button2, button3, button4, button5;
	private ButtonGroup gruppe;
	private JPanel jPanelInnen;

	private boolean a, b, c, d;

	class InnereKlasse implements ActionListener {

		public void actionPerformed(ActionEvent e) {

			if (e.getActionCommand().equals("E x i t")) {
				System.exit(0);
			}

			else if (e.getActionCommand().equals("Layout 1")) {
				a = true;
				b = false;
				c = false;
				d = false;
				changeLayout();
			}

			else if (e.getActionCommand().equals("Layout 2")) {
				a = false;
				b = true;
				c = false;
				d = false;
				changeLayout();

			}

			else if (e.getActionCommand().equals("Layout 3")) {
				a = false;
				b = false;
				c = true;
				d = false;
				changeLayout();

			}

			else if (e.getActionCommand().equals("Layout 4")) {
				a = false;
				b = false;
				c = false;
				d = true;
				changeLayout();

			}
		}

	}

	public JPanel panelInnen() {
		changeLayout();

		button1 = new JButton(" Schaltflaeche 1 ");
		button2 = new JButton(" Schaltflaeche 2 ");
		button3 = new JButton(" Schaltflaeche 3 ");
		button4 = new JButton(" Schaltflaeche 4 ");
		button5 = new JButton(" Schaltflaeche 5 ");

		jPanelInnen.add(button1);
		jPanelInnen.add(button2);
		jPanelInnen.add(button3);
		jPanelInnen.add(button4);
		jPanelInnen.add(button5);
		jPanelInnen.setBorder(new TitledBorder("Layoutpanel"));
		
		return jPanelInnen;
	}
	private void changeLayout() {

		if (a) {
			jPanelInnen.setLayout(new GridLayout(0, 4));
		}

		else if (b) {
			jPanelInnen.setLayout(new GridLayout(0, 3));
		}

		else if (c) {
			jPanelInnen.setLayout(new GridLayout(0, 2));
		}

		else if (d) {
			jPanelInnen.setLayout(new GridLayout(0, 1));
		} else {
			jPanelInnen.setLayout(new FlowLayout());
		}
		validate();
	}


	private JPanel panelButton() {
		JPanel JPanelButton = new JPanel();
		buttonExit = new JButton("E x i t");

		buttonExit.setActionCommand("E x i t");

		JPanelButton.setLayout(new GridLayout(0, 1));
		JPanelButton.add(buttonExit);

		InnereKlasse InnereKlasse = new InnereKlasse();
		buttonExit.addActionListener(InnereKlasse);
		JPanelButton.setBorder(new TitledBorder("Panel-Exit"));

		return JPanelButton;
	}

	private JPanel panelRadiobuttons() {
		JPanel JPanelRadiobuttons = new JPanel();

		layout1 = new JRadioButton("Layout 1");
		layout2 = new JRadioButton("Layout 2");
		layout3 = new JRadioButton("Layout 3");
		layout4 = new JRadioButton("Layout 4");

		gruppe = new ButtonGroup();
		gruppe.add(layout1);
		gruppe.add(layout2);
		gruppe.add(layout3);
		gruppe.add(layout4);

		layout2.setSelected(true);

		JPanelRadiobuttons.setLayout(new GridLayout(0, 1));
		JPanelRadiobuttons.add(layout1);
		JPanelRadiobuttons.add(layout2);
		JPanelRadiobuttons.add(layout3);
		JPanelRadiobuttons.add(layout4);

		JPanelRadiobuttons.setBorder(new TitledBorder("Ihre Auswahl: "));

		return JPanelRadiobuttons;
	}
	public Anwendung(String titel) {
		super(titel);

		JPanel panelAussen, panelInnen, panelButton, panelRadiobuttons;
		jPanelInnen = new JPanel();

		panelInnen = panelInnen();
		panelButton = panelButton();
		panelRadiobuttons = panelRadiobuttons();

		panelAussen = new JPanel();
		panelAussen.add(panelInnen);
		panelAussen.add(panelRadiobuttons);
		panelAussen.add(panelButton);


		add(panelAussen, BorderLayout.CENTER);
		add(panelRadiobuttons, BorderLayout.WEST);
		add(panelButton, BorderLayout.EAST);

		layout1.setActionCommand("Layout 1");
		layout2.setActionCommand("Layout 2");
		layout3.setActionCommand("Layout 3");
		layout4.setActionCommand("Layout 4");

		InnereKlasse InnereKlasse = new InnereKlasse();
		layout1.addActionListener(InnereKlasse);
		layout2.addActionListener(InnereKlasse);
		layout3.addActionListener(InnereKlasse);
		layout4.addActionListener(InnereKlasse);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		setSize(1000, 300);
		setResizable(false);
		setVisible(true);
	}

}
 
Wobei ich eher soetwas bevorzugen würde:

BTW ich hab mir nich die Mühe gemacht alle Variablen klein zu schreiben:exclaim:
:toll::applaus:
Danke das hilft sehr, werde es mir gleich anschauen wo der Fehler lag und warum, vielleicht werde ich noch einige Fragen haben zu den Aenderungen im Quelltext, aber erst muessen die Kopfschmerzen weg nach langem Suchen der Loesung. 🙂
 
Kein Wunder, dass ich da nicht weiter kam, da die Lehrer uns wieder Wissen vorenthalten haben bei Methoden:

Java:
removeAll()

und

Java:
validate()

Klar gibt es die API, aber wonach soll man dort schauen und warum? Der Anhaltspunkt fehlte. Ohne diesen Forum haette ich noch lange suchen muessen:rtfm::shock::rtfm:
 

Neue Themen


Zurück
Oben