Komponente im Layout positionieren

	setLayout(new GridLayout(4,1));
	setSize(300, 300);
	add(label);
	add(field);
	add(button);
	add(label2);
	button.addActionListener(new Erreignis());
	setVisible(true);

Ich will diese Komponente übereinander positionieren. Wie kann ich das machen? Mit Grid klappt das irgendwie nicht, obwohl ich 4 Zeilen und 1 Spalte eingegeben habe, sieht das wie 2 Zeilen und 2 Spalten aus.
[label ][field ]
[button][label2]

Ich will aber so haben:
[label ]
[field ]
[button]
[label2]

Oder gibt es vieleicht besseren LayoutManager der so was machen kann?

Danke

TableLayout ist dein Freund.

http://javamagazin.de/itr/online_artikel/psecom,id,442,nodeid,11.html
https://tablelayout.dev.java.net/

Danke, werde das testen.

oder das GridBagLayout :wink:

GridBagLayout find ich bei dem Bsp wie mit Kanonen auf Spatzen schiessen… TableLayout ist intuitiver, aber fuer ein einfaches an einer Achse ausgerichtetes Layout wuerde ich immer noch das einfach BoxLayout nehmen…

wobei ich nicht versteh warum es bei dir nicht klappt… das hier klappt

public class Test extends JFrame{
	
	public Test() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300,300);
		Container c = getContentPane();
		c.setLayout(new GridLayout(4,1));
		c.add(new JLabel("Hallo"));
		c.add(new JButton("Why"));
		c.add(new JTextField());
		c.add(new JLabel("Alwazys"));
		setVisible(true);
	}

	public static void main(String[] args) throws Exception {
		new Test();
	}
}

also soweit ich das beurteilen kann ist das TableLayout genauso wie das GridBagLayout nur das man dafür externe Libs braucht, wobei ich zugeben muss das ich diesen Eindruck nur aus Blicken in fremden Code hab ich selbst hab das noch nie benutzt.

das TL ist vom Aussehen her dem GBL sehr aehnlich, aber fuer Anfaenger meist intuitiver und leichter zu bedienen.

Ob und inwieweit sie sich qualitativ unterscheiden weiss ich nicht

BoxLayout != GridLayout. :wink:

Also ich fand das TableLayout viel verwirrender. Und der Herr swerflash hat 100% noch nicht mit einer externen Lib gearbeitet :wink: Ihr dürft nun raten was seine nächste Frage sein wird :smiley:

bullz… Menschenkenntniss 0 - sitzen durchgefallen

http://forum.coding-community.net/showthread.php5?t=97

oeh das koennte man schon erkennen dass die untersch. geschrieben werden :wink: aber was meinen ?

Wie meinen dbac? Muss ich das verstehen? :smiley:

für den fall des ernstgemeinten posts… link folgen - bilder guckn

Alles schmus,

Gridbag rulez per default. In firmen projekten hauen sie dir meist irgendwelche OpenSource jar um die ohren. Daher würde ich direkt das GBL verstehen und anwenden lernen.

-jens

Exception in thread "main" java.lang.NullPointerException
	at java.awt.Container.addImpl(Unknown Source)
	at java.awt.Container.add(Unknown Source)
	at calc.Taschenrechner.myComponents(Taschenrechner.java:34)
	at calc.Taschenrechner.<init>(Taschenrechner.java:20)
	at calc.Main.main(Main.java:6)

Ich wollte einen Taschenrechner bauen und kriege diese Exception sobald ich versuche das Programm auszuführen. Was habe ich falsch gemacht? Hier ist mein Code.

package calc;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;

public class Taschenrechner extends Frame {

	private Label label, label2;
	private TextField field, field2;
	private Button button, button2, button3, button4;
	private Panel panel, panel2, panel3, panel4;

	Taschenrechner(){
		myLayout();
		myComponents();
	}
	
	
	void myLayout() {
		setLayout(new GridLayout(4,1));
		panel = new Panel(new FlowLayout());
		panel2 = new Panel(new GridLayout(2, 1, 10, 10));
		panel3 = new Panel(new GridLayout(1, 4, 10, 10));
		panel4 = new Panel(new FlowLayout());
		setVisible(true);
	}

	void myComponents() {
		panel.add(label);
		label.setText("Taschenrechner");

		panel2.add(field);
		field.setText("Zahl eingeben");
		field.setColumns(20);

		panel2.add(field2);
		field2.setText("Zahl eingeben");
		field2.setColumns(20);

		panel3.add(button);
		panel3.add(button2);
		panel3.add(button3);
		panel3.add(button4);
		button.setLabel("+");
		button.setLabel("-");
		button.setLabel("*");
		button.setLabel("/");

		panel4.add(label2);
		label2.setText("Test");

	}

}

package calc;

public class Main {

	public static void main(String[] args) {
		new Taschenrechner();
	}

}

Danke

kleiner Vorschlag wäre zu sagen
add(label = new JLabel());

/nix

Klammerfehler
panel2.add(field2 = new TextField(“Zahl eingeben”),20);

öh habt ihr anderne code als ich ?

bei dem code wird keine variable initialisiert, ergo alle null und null kann man nirgends hinzufügen.

desweiteren würde ich das setVisible immer als letztes aufrufen, nachdem alle components hinzugefügt werden, sonst sind die mögl. nicht sichtbar…

ja das haben wir gestern im Chat noch alles geklärt

package calc;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import com.sun.java.swing.plaf.windows.WindowsIconFactory;

public class Taschenrechner extends Frame {

	private Label label, label2;
	private TextField field, field2;
	private Button button, button2, button3, button4;
	private Panel panel, panel2, panel3, panel4;

	Taschenrechner(){

		setLayout(new GridLayout(4,1));
		setSize(200,200);
		add(panel = new Panel(new FlowLayout()));
		add(panel2 = new Panel(new GridLayout(2, 1, 10, 10)));
		add(panel3 = new Panel(new GridLayout(1, 4)));
		add(panel4 = new Panel(new FlowLayout()));

		panel.add(label = new Label("Taschenrechner"));
		panel2.add(field = new TextField("Zahl eingeben",20));
		panel2.add(field2 = new TextField("Zahl eingeben",20));
		panel3.add(button = new Button("+"));
		panel3.add(button2 = new Button("-"));
		panel3.add(button3 = new Button("*"));
		panel3.add(button4 = new Button("/"));
		panel4.add(label2 = new Label("Test"));
		
		addWindowListener(new closeWindow());
		setVisible(true);

	}
	
	class myListener implements ActionListener{

		public void actionPerformed(ActionEvent e) {
						
		}
		
	}
	
	class closeWindow extends WindowAdapter{
		public void windowClosing(WindowEvent e){
			System.exit(0);
		}
	}
}

Jap, im Moment sieht mein Code so aus. Warum sind meine Buttons so riesig?