Problem bei Param.übergabe und dem erstellen von JButtons

Guten Morgen zusammen,

Ich habe ein Problem bei meinem Programm.

Es gibt eine Oberfläche mit 2 Textfeldern, auf der ich 2 Werte eingeben kann. Diese werden dann in einer "Verarbeitungsklasse" zu Integern gemacht, die ich für die Erstellung von JButtons (in Tabellenform) auf einer neuen Oberfläche benötige. Hierbei benutze ich ein GrilLayout(wet1, wert2)

will ich das Programm starten, bekomme ich die Fehlermeldung "Exception in thread "main" java.lang.IllegalArgumentException: rows and cols cannot both be zero"


Kann mir freundlicher Weise jemand von euch sagen, was ich genau falsch mache und wie ich die Fehler verbessen kann?

Vielen Dank im vorraus 🙂


Klasse mit den Textfeldern:
Java:
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class GUIAbfrage extends JFrame{

	JLabel aEingabe = new JLabel("Anzahl von A");
	JLabel bEingabe = new JLabel("Anzahl von B");
	static JTextField a= new JTextField();	
	static JTextField b= new JTextField();
	JButton weiter = new JButton("Weiter");
 
	public JTextField getA() {
		return a;
	}
	public void setA(JTextField a) {
		this.a = a;
	}
	public JTextField getB() {
		return b;
	}
	public void setB(JTextField b) {
		this.b = b;
	}


	public GUIAbfrage(String title) {
		super(title);
		

		GridBagLayout gb = new GridBagLayout();
		GridBagConstraints c = new GridBagConstraints();
		Container contentPane = getContentPane();
		contentPane.setLayout(gb);
		c.fill = GridBagConstraints.HORIZONTAL;
		
		aEingabe.setHorizontalAlignment(JLabel.CENTER);
		c.insets = new Insets(5, 5, 5, 5);
		c.gridx = 0;
		c.gridy = 1;
		c.gridwidth = 1;
		gb.setConstraints(aEingabe, c);
		contentPane.add(aEingabe);
		
		a= new JTextField();
		a.setHorizontalAlignment(JTextField.CENTER);
		c.insets = new Insets(5, 5, 5, 5);
		c.gridx = 0;
		c.gridy = 2;
		c.gridwidth = 1;
		gb.setConstraints(a, c);
		contentPane.add(a);
		
	
		bEingabe.setHorizontalAlignment(JLabel.CENTER);
		c.insets = new Insets(5, 5, 5, 5);
		c.gridx = 0;
		c.gridy = 3;
		c.gridwidth = 1;
		gb.setConstraints(bEingabe, c);
		contentPane.add(bEingabe);
		
		b.setHorizontalAlignment(JTextField.CENTER);
		c.insets = new Insets(5, 5, 5, 5);
		c.gridx = 0;
		c.gridy = 4;
		c.gridwidth = 1;
		gb.setConstraints(b, c);
		contentPane.add(b);
		
		weiter.setHorizontalAlignment(JButton.CENTER);
		c.insets = new Insets(5, 5, 5, 5);
		c.gridx = 0;
		c.gridy = 6;
		c.gridwidth = 1;
		gb.setConstraints(weiter, c);
		weiter.addActionListener(new VerarbeitungMasken(this,weiter));
		contentPane.add(weiter);
	
	
		
	}
}


Die Verarbeitungsklasse:
Java:
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JButton;
import javax.swing.JMenuItem;



public class VerarbeitungMasken implements ActionListener{

	 GUIAbfrage guiAbfrage;
	 GUIAuswahl guiAuswahl;
	 JButton but;
	 JButton weiter;
	 

		// Erstellung von Konstruktoren + Übergabeparameter
		public VerarbeitungMasken(GUIAbfrage guiAbfrage , JButton weiter){
			this.guiAbfrage = guiAbfrage;
			this.weiter = weiter;
		}
		
	

	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == weiter){
			GUIAbfrage guiAbfrage = Start.getAbfrage();
			guiAbfrage.setVisible(false);
		
			try {
				int j = Integer.parseInt(GUIAbfrage.a.getText());
				GUIAuswahl.setA(j);            
				}
				catch (NumberFormatException x) {
				System.out.println("Error : "+ x.getMessage());
				}
			try {
				int i = Integer.parseInt(GUIAbfrage.b.getText());
				GUIAuswahl.setB(i);         
				}
				catch (NumberFormatException x) {
				System.out.println("Error : "+ x.getMessage());
				}
				
			GUIAuswahl guiAuswahl = Start.getAuswahl();
			guiAuswahl.fenster.setVisible(true);		
		}	
	}
}


Klasse Für die JButtons:
Java:
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;


public class GUIAuswahl{

	JFrame fenster = new JFrame("Auswahl");
	
	public static int a= 0;
	public static int b=0;
	
	int anzahlButtons = a* b;
	JButton[] button = new JButton[anzahlButtons];
	

	
	public static int getA() {
		return a;
	}
	
	public static void setA(int a) {
		GUIAuswahl.a = a;
	}

	public static int getB() {
		return b;
	}

	public static void setB(int b) {
		GUIAuswahl.b = b;
	}




	public GUIAuswahl() {
		
		fenster.setSize(500, 500);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.setLayout(new GridLayout(a,b));


		
		for(int i =0; i <anzahlButtons;i++){
			button[i] = new JButton(); 
			fenster.add(button[i]);
		}
	}

}
 
Zuletzt bearbeitet:
Der genaue Ablauf deines Programms ist mir zwar nicht klar, aber die Fehlermeldung besagt, dass du das Objekt der Klasse mit dem GridLayout erzeugst bevor du die Integers für die Col bzw. Row gesetzt hast. Simple gesagt: Col und Row des GridLayouts dürfen nicht beide '0' sein.
 
Der Ablauf sieht wie folgt aus:

Die Oberfläche wird gestartet und der User kann die 2 Werte eingeben. Klickt er dann auf den "weiter"-Button, soll eine neue Oberfläche mit den Buttons erzeugt werden.

Zwischen dem schließen der alten und öffnen der neuen Oberfläche werden die beiden eingegebenen Paramerter übergeben und dienen zum einen als Parameter für die Größe des GridLayout's (Fehlermeldung) und miteinander multipliziert die Anzahl der Buttons die erzeugt werden sollen.
 
Ein GridLayout muss immer wissen:
Fall 1: Zeilenanzahl 0, Spaltenanzahl n: n spalten sind sicher, unendlich Zeilen sind möglich
Fall 2: Zeilenanzahl m, Spaltenanzahl 0: m Zeilen sind sicher, unendlich Spalten sind möglich

Da musst du dir natürlich vorher überlegen, wie sich dein GridLayout expandieren soll.
 

Zurück
Oben