# Panels vertikal anordnen



## wyldstyle (12. Apr 2010)

Hallo nochmals, ich versuche jetzt seit einiger Zeit 4 JPanels vertikal anzuordnen d.h., dass alles linksbündig ist, bekomme das allerdings nicht hin. 

Ich hab die jar einfach mal angehängt, die farbig markierten Bereiche sind die 4 Panels um die es geht.

Was ich bisher versucht habe: BoxLayout vertikal und gridlayout mit (row0,colum1) aber beides scheint nicht zu funkionieren. Könnte es daran liegen, dass die Panels den ganzen Raum einnehmen und sich deswegen die Komponenten in den panels nicht anordnen?


----------



## L-ectron-X (12. Apr 2010)

Das ist doch ein Fall fürs GridLayout.


----------



## wyldstyle (12. Apr 2010)

Ja das dachte ich halt auch, alle panels in ein oberpanel gepackt und das auf gridlayout gestzt aber es ändert sich nix.


----------



## L-ectron-X (12. Apr 2010)

```
frame.setLayout(new GridLayout(1,0));
```

oder


```
JPanel p = new JPanel(new GridLayout(1,0));
```

je nach dem, wo du die vertikal anzuordnenden Komponenten einbaust.


----------



## wyldstyle (12. Apr 2010)

läuft beides leider nicht ;-/ da muss irgend ein logikdreher drin sein


----------



## L-ectron-X (12. Apr 2010)

Ohne entsprechenden Code kommen wir hier nicht weiter.


----------



## wyldstyle (12. Apr 2010)

Der komplette Klassencode:

```
package Texas12;
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;


public class Settings_GUI extends JFrame implements WindowListener, ActionListener {
	
	private String playername = "";
	private short playercount;
	private long money;
	private long smallblind;
	private long bigblind;
	boolean loaderfinished = false;
	
	
	private JPanel namepanel = new JPanel();
	private JPanel anzahlpanel = new JPanel();
	private JPanel einsatzpanel = new JPanel();
	private JPanel northpanel = new JPanel();
	private JPanel southpanel = new JPanel();
	private JPanel blindpanel = new JPanel();
	private SpinnerNumberModel spieler_spinner = new SpinnerNumberModel(5,2,6,1);
	private SpinnerNumberModel startgeld_spinner = new SpinnerNumberModel(100,5,5000,1);
	private JButton spielstart = new JButton("Spiel beginnen");
	private JButton verlassen = new JButton("Quit");
	private JTextField name = new JTextField("Player1",10);
	private JTextField smallblind_field = new JTextField("1",4);
	private JTextField bigblind_field = new JTextField("2",5);
	private JLabel error = new JLabel();
	GridLayout testlayout = new GridLayout(0,1);
	private JPanel vert1 = new JPanel();
	
	
	
	Settings_GUI(){
		setTitle("Einstellungen");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
		setLayout(new GridLayout(1,0));
		//Komponenteninitialisierung
		JLabel spielername_label = new JLabel("Name:");
		JLabel spieleranzahl_label = new JLabel("Anzahl der Spieler:");
		JLabel startgeld_label = new JLabel("Startgeld:");
		JLabel smallblind_label = new JLabel("Smallblind:");
		JLabel bigblind_label = new JLabel("Bigblind:");
		JSpinner spieleranzahl = new JSpinner(spieler_spinner);
		JSpinner startgeld = new JSpinner(startgeld_spinner);
	

		
		// Panelinitialisierung
		namepanel.add(spielername_label);
		namepanel.add(name);
		namepanel.setOpaque(true);
		namepanel.setBackground(Color.green);
		
		anzahlpanel.add(spieleranzahl_label);
		anzahlpanel.add(spieleranzahl);
		anzahlpanel.setOpaque(true);
		anzahlpanel.setBackground(Color.yellow);
		
		
		einsatzpanel.add(startgeld_label);
		einsatzpanel.add(startgeld);
		einsatzpanel.setOpaque(true);
		einsatzpanel.setBackground(Color.blue);
		
		blindpanel.add(smallblind_label);
		blindpanel.add(smallblind_field);
		blindpanel.add(bigblind_label);
		blindpanel.add(bigblind_field);
		blindpanel.setOpaque(true);
		blindpanel.setBackground(Color.PINK);
		smallblind_field.setText(getsmallblindvalue(startgeld.getValue().toString()));
		bigblind_field.setText(getbigblindvalue(startgeld.getValue().toString()));
		
		northpanel.setLayout(testlayout);
		northpanel.setBackground(Color.red);
		northpanel.add(namepanel);
		northpanel.add(anzahlpanel);
		northpanel.add(einsatzpanel);
		northpanel.add(blindpanel);
		northpanel.add(error); 
		
		southpanel.setLayout(new BoxLayout(southpanel,BoxLayout.X_AXIS));
		southpanel.setBackground(Color.blue);
		southpanel.add(spielstart);
		southpanel.add(verlassen);
		

		
		getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
		getContentPane().add(northpanel);
		getContentPane().add(southpanel);
		getContentPane().setBackground(Color.white);
		

		//Listenermethoden
		spielstart.addActionListener(this);
		verlassen.addActionListener(this);
		
		//ActionCommands
		spielstart.setActionCommand("spielstart");
		verlassen.setActionCommand("verlassen");
	}
	
	private String getsmallblindvalue(String s){
		long tmp  = Long.parseLong(s);
		tmp = (tmp/100)*5;
		return String.valueOf(tmp);
	}
	
	private String getbigblindvalue(String s){
		long tmp  = Long.parseLong(s);
		tmp = (tmp/100)*10;
		return String.valueOf(tmp);
	}
	
	private void setName(){
		playername = name.getText();
		System.out.println("NAME "+ playername);
	}
	
	private void setplayercount(){
		playercount = Short.parseShort(spieler_spinner.getValue().toString());
		System.out.println("SPIELRZAHL " +playercount);
	}
	
	private void setmoney(){
		money = Long.parseLong(startgeld_spinner.getValue().toString());
		System.out.println("STARTGELD " + money);
	}
	
	private void setsmallblind(){
		smallblind = Long.parseLong(smallblind_field.getText());
		System.out.println("Smallblind: " + smallblind);
	}
	
	private void setbigblind(){
		bigblind = Long.parseLong(bigblind_field.getText());
		System.out.println("Bigblind: " + bigblind);
		
	}
	
	public String getName(){
		return playername;
	}
	
	public short getplayerount(){
		return playercount;
	}
	
	public long getmoney(){
		return money;
	}
	
	public long getsmallblind(){
		return smallblind;
	}
	
	public long getbigblind(){
		return bigblind;
	}
	
	@Override
	public void actionPerformed(ActionEvent x) {

		if (x.getActionCommand().equals("verlassen")){
			System.exit(0);
		}
		if (x.getActionCommand().equals("spielstart")){
			// Werte einholen für Name,Spielerzahl,Startbetrag und Blind
			setName();
			setplayercount();
			setmoney();
			setsmallblind();
			setbigblind();
			createmainwindow();
			setVisible(false);
			error.setText("spielstart");
		}
		
		
	}
	
	private void createmainwindow(){
		GUI mainwindow = new GUI(playername,playercount,money,smallblind,bigblind);
		mainwindow.setSize(800, 600);
		mainwindow.setVisible(true);
		
		
		
	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		System.exit(0);
		
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	

}
```

ich vermute halt wie gesagt, dass es an den einzelnen panels liegt. ich wüsste aber sonst nicht wie ich immer "label +textfield/spinner" nebeneinanderbekomm wenn ich die nicht alle in ein separates panel setze!


----------



## L-ectron-X (12. Apr 2010)

In Zeile 97 wird das Layout des JFrames rekonfiguriert...
...ergo wird das zu vor in Zeile 44 gesetzte GridLayout überschrieben.


----------



## wyldstyle (12. Apr 2010)

das gridlayout soll ja nicht für die ganze oberfläche sondern nur für den farbig eingefärbten teil sein (northpanel). setze ich den aber als gridlayout tut sich rein garnichts.

für den ganzen frame hab ich halt boxlayout mit y-achse genommen damit die beiden panels untereinander landen!


----------



## L-ectron-X (12. Apr 2010)

Jetzt versteh ich gar nichts mehr. :bahnhof:
Mach mir bitte mal ne Zeichnung, wie es aussehen soll.


----------



## wyldstyle (12. Apr 2010)

Es geht mir um die anordnung der eingabeboxen. die sollen einfach  mit dem gleichen abstand untereinander sein, linksbündig am besten in der mitte des als "northpanel" gekennzeichneten Bereichs.


----------

