# wie kann ich diese Oberfläche bauen ohne das gestreckt wird?



## Laures (19. Mrz 2008)

Hallo,

schon einmal ein Danke an alle die mir helfen.
Ich möchste für ein Java Applet eine Oberfläche bauen. Der Anfang ist ein Banner ganz oben, darunter 3 Spalten mit eingabefeldern und ausgabefeldern (jeweils ein Label und eine Textbox bzw combo box) und ganz unten vieleicht mal eine Tabelle.

Leider sieht mein ergebnis bisher so aus:






Mein code ist derzeit folgender:

```
private Dimension absoluteSize = new Dimension(622,400);
	private BorderLayout mainLayout = new BorderLayout();
	private JLabel jLabel_Banner1 = new JLabel(new ImageIcon(getClass().getResource("hc-pvp-news.jpg"), "Mein Banner"));

	private JPanel jPanel_Input1 = new JPanel();
	private Dimension inputDimension = new Dimension(200,200);
	private JComboBox jCombo_Speed1 = new JComboBox();
	private JComboBox jCombo_Type1 = new JComboBox(types);
	private JLabel jLabel_MinDMG1 = new JLabel("Minimum Damage");
	private JLabel jLabel_MaxDMG1 = new JLabel("Maximum Damage");
	private JLabel jLabel_Type1 = new JLabel("Weapon Type");
	private JLabel jLabel_Speed1 = new JLabel("Attack Speed");
	private JTextField jText_MaxDMG1 = new JTextField("0",3);
	private JTextField jText_MinDMG1= new JTextField("0",3);

	private JPanel jPanel_Addition = new JPanel();
	private Dimension additionDimension = new Dimension(200,300);

	private JPanel jPanel_Crit = new JPanel();
	private JLabel jLabel_CritChance = new JLabel("Critical Chance \n(%)");
	private JTextField jText_CritChance = new JTextField("0",3);
	private JLabel jLabel_CritBonus = new JLabel ("Critical Bonus (%)");
	private JTextField jText_CritBonus = new JTextField("0",3);

	private JPanel jPanel_Bonus = new JPanel();
	private JLabel jLabel_BonusDMG = new JLabel ("Bonus Damage (%)");
	private JTextField jText_BonusDMG = new JTextField("0",3);

	private JPanel jPanel_Output = new JPanel();
	private Dimension outputDimension = new Dimension(222,150);
	private JLabel jLabel_DPSwoCrit = new JLabel ("Damage per Second (native)");
	private JTextField jText_DPSwoCrit = new JTextField("0",4);
	private JLabel jLabel_DPSwCrit = new  JLabel ("Damage per Second (with Crit)");
	private JTextField jText_DPSwCrit = new JTextField("0",4);
	// End of variables declaration

	
	public void init() {		
		// preferences
		this.setLayout(mainLayout);

		this.setSize(absoluteSize);
		this.setMinimumSize(absoluteSize);
		this.setMaximumSize(absoluteSize);

		// Banner
		this.add(BorderLayout.NORTH,jLabel_Banner1);

		//Jpanel Input Definiton
		jPanel_Input1.setSize(inputDimension);
		jPanel_Input1.setBorder(BorderFactory.createTitledBorder("Input"));
		jPanel_Input1.setLayout(new GridLayout(4, 2));

		//mindmg label/text
		jPanel_Input1.add(jLabel_MinDMG1);
		jPanel_Input1.add(jText_MinDMG1);

		//masdmg label/text
		jPanel_Input1.add(jLabel_MaxDMG1);
		jPanel_Input1.add(jText_MaxDMG1);

		//type label/text
		jPanel_Input1.add(jLabel_Type1);
		jPanel_Input1.add(jCombo_Type1);

		//speed label/text
		jPanel_Input1.add(jLabel_Speed1);
		jPanel_Input1.add(jCombo_Speed1);

		// add input pane
		this.add(BorderLayout.WEST,jPanel_Input1);

		// ADDITIONAL COLUMN
		jPanel_Addition.setLayout(new BoxLayout(jPanel_Addition,BoxLayout.Y_AXIS));
		jPanel_Addition.setSize(additionDimension);

		// Criticals
		jPanel_Crit.setLayout(new GridLayout(2,2));
		jPanel_Crit.setBorder(BorderFactory.createTitledBorder("Critical"));

		jPanel_Crit.add(jLabel_CritChance);
		jPanel_Crit.add(jText_CritChance);
		jPanel_Crit.add(jLabel_CritBonus);
		jPanel_Crit.add(jText_CritBonus);

		jPanel_Addition.add(jPanel_Crit);

		// Bonus
		jPanel_Bonus.setLayout(new GridLayout(2,2));
		jPanel_Bonus.setBorder(BorderFactory.createTitledBorder("Bonus"));

		jPanel_Bonus.add(jLabel_BonusDMG);
		jPanel_Bonus.add(jText_BonusDMG);

		jPanel_Addition.add(jPanel_Bonus);

		this.add(BorderLayout.CENTER,jPanel_Addition);

		//OUTPUT COLUMN
		jPanel_Output.setLayout(new GridLayout(2,3));
		jPanel_Output.setBorder(BorderFactory.createTitledBorder("Output"));
		jPanel_Output.setSize(outputDimension);

		jPanel_Output.add(jLabel_DPSwoCrit);
		jPanel_Output.add(jText_DPSwoCrit);
		jPanel_Output.add(jLabel_DPSwCrit);
		jPanel_Output.add(jText_DPSwCrit);

		this.add(BorderLayout.EAST,jPanel_Output);
	}
```

Die idee war mal für das applet ein borderlayout zu nehmen weil das der aufteilung so schön entsprach. die einzelnen spalten nutzen ein gridLayout, da so label und textfeld nebeneinander sind und die textfelder parallel.
Ich wollte da mal ein groupLayout testen, aber scheinbar habe (noch) ich nen jdk der das nich kann.

Die Positionierung passt soweit.
Die fragen sind jetzt folgende:

wie bekomme ich den layout manager dazu nicht so zu strecken und zu quetschen?
kann ich in einem label mehrzeilig schreiben? \n erkennt er zwar, reagiert aber nicht drauf.
kann ich das textfeld auf eingaben bzw. Ausgaben der länge 3 beschränken?

Mit freundlichem Gruß,
Laures


----------



## Verjigorm (19. Mrz 2008)

Zum Layout: Vielleicht mal GridbagLayout benutzen!


JLabel unterstützt HTML


```
new JLabel("<html>1.zeile
2.Zeile</html>");
```


----------



## MiDniGG (19. Mrz 2008)

Was habt ihr nur alle gegen das BorderLayout... *kopfschüttel* Ich mag es ^^

Ich mein du kannst da ja nach belieben die spaltengröße anpassen. und wenn nicht, dann eben en paar blind labels einbauen die alles richtig hinschieben ^^

Achja bei so nem (relativ) großen Teil würde ich mehrere BorderLayouts verschachteln. Falls du an ihm festhalten willst 

Wenn nicht kannst dir ja mal Forms von JGoodies anschaun. Sehr schön u leicht zu verwenden ;-) (Weil @ Verjigorm: GridBag muss ja wirklich nich sein ;-P )


----------



## Verjigorm (19. Mrz 2008)

GridBag muss nicht, aber grad bei etwas umfangreicheren Guis lohnt es sich doch, sich mal damit zu beschäftigen.
Ich muss damit die letzte Zeit arbeiten und je mehr ich es benutze, desto umständlicher finde ich verschachtelte Layouts


----------



## MiDniGG (19. Mrz 2008)

Ja gut. Kann sein, dass man sich daran gewöhnt, wenn mans dauernd macht. Ich mags aba trotzdem ned ^^

Naja. eigentlich mach ich au nur private was mit (Desktop-)GUIs... ^^ Oder wenn ich eben nix zu tun hab (So wie grad...Da kann ich gleich mal auf J2ME verweisen. Da is ne Frage von mir  )


----------



## L-ectron-X (19. Mrz 2008)

Mach doch mal ein Bild/Grafik, wie es am Ende aussehen soll.
Bilder sagen bekanntlich mehr als Worte.


----------



## Laures (19. Mrz 2008)

wenn ich die tabelle wirklich einbaue könnts ungefähr so werden. so war zumindest mal ein erster entwurf. mitlerweile ist der crit bock in die mitte gewandert und label und textbox/combobox sind neben und nicht untereinander.


----------



## L-ectron-X (19. Mrz 2008)

Das sieht doch schon mal gut aus. Jetzt wissen wir immer noch nicht, wie du es haben willst, damit man mal helfen oder einen Entwurf schreiben kann.


----------



## Laures (19. Mrz 2008)

naja, ungefähr so soll es schon werden.
nach einigem rumprobieren sieht es jetzt bei mir so aus:







```
private Dimension absoluteSize = new Dimension(622,250);
	private BorderLayout mainLayout = new BorderLayout();
	private JLabel jLabel_Banner1 = new JLabel(new ImageIcon(getClass().getResource("hc-pvp-news.jpg"), "Mein Banner"));

	private JPanel jPanel_Input1 = new JPanel();
	private Dimension inputDimension = new Dimension(200,200);
	private JComboBox jCombo_Speed1 = new JComboBox();
	private JComboBox jCombo_Type1 = new JComboBox(types);
	private JLabel jLabel_MinDMG1 = new JLabel("Min. Damage");
	private JLabel jLabel_MaxDMG1 = new JLabel("Max. Damage");
	private JLabel jLabel_Type1 = new JLabel("Weapon");
	private JLabel jLabel_Speed1 = new JLabel("Attack Speed");
	private JTextField jText_MaxDMG1 = new JTextField("0",3);
	private JTextField jText_MinDMG1= new JTextField("0",3);

	private JPanel jPanel_Addition = new JPanel();
	private Dimension additionDimension = new Dimension(200,300);

	private JPanel jPanel_Crit = new JPanel();
	private JLabel jLabel_CritChance = new JLabel("<html>Critical Chance
(in %)</html>");
	private JTextField jText_CritChance = new JTextField("0",3);
	private JLabel jLabel_CritBonus = new JLabel ("<html>Critical Bonus
(in %)</html>");
	private JTextField jText_CritBonus = new JTextField("0",3);

	private JPanel jPanel_Bonus = new JPanel();
	private JLabel jLabel_BonusDMG = new JLabel ("<html>Bonus Damage
(in %)</html>");
	private JTextField jText_BonusDMG = new JTextField("0",3);

	private JPanel jPanel_Output = new JPanel();
	private Dimension outputDimension = new Dimension(222,150);
	private JLabel jLabel_DPSwoCrit = new JLabel ("<html>Damage per Second
(native)</html>");
	private JTextField jText_DPSwoCrit = new JTextField("0",4);
	private JLabel jLabel_DPSwCrit = new  JLabel ("<html>Damage per Second
(with Crit)</html>");
	private JTextField jText_DPSwCrit = new JTextField("0",4);
	// End of variables declaration

	
	public void init() {		
		// preferences
		this.setLayout(mainLayout);

		this.setSize(absoluteSize);
		this.setMinimumSize(absoluteSize);
		this.setMaximumSize(absoluteSize);

		// Banner
		this.add(BorderLayout.NORTH,jLabel_Banner1);

		//Jpanel Input Definiton
		//jPanel_Input1.setSize(inputDimension);
		jPanel_Input1.setBorder(BorderFactory.createTitledBorder("Input"));
		jPanel_Input1.setLayout(new GridLayout(4, 2));

		//mindmg label/text
		jPanel_Input1.add(jLabel_MinDMG1);
		jPanel_Input1.add(jText_MinDMG1);

		//masdmg label/text
		jPanel_Input1.add(jLabel_MaxDMG1);
		jPanel_Input1.add(jText_MaxDMG1);

		//type label/text
		jPanel_Input1.add(jLabel_Type1);
		jPanel_Input1.add(jCombo_Type1);

		//speed label/text
		jPanel_Input1.add(jLabel_Speed1);
		jPanel_Input1.add(jCombo_Speed1);

		// add input pane
		this.add(BorderLayout.WEST,jPanel_Input1);

		// ADDITIONAL COLUMN
		jPanel_Addition.setLayout(new GridLayout(2,1));
		//jPanel_Addition.setSize(additionDimension);

		// Criticals
		jPanel_Crit.setLayout(new GridLayout(2,2));
		jPanel_Crit.setBorder(BorderFactory.createTitledBorder("Critical"));

		jPanel_Crit.add(jLabel_CritChance);
		jPanel_Crit.add(jText_CritChance);
		jPanel_Crit.add(jLabel_CritBonus);
		jPanel_Crit.add(jText_CritBonus);

		jPanel_Addition.add(jPanel_Crit);

		// Bonus
		jPanel_Bonus.setLayout(new BoxLayout(jPanel_Bonus,BoxLayout.X_AXIS));
		jPanel_Bonus.setBorder(BorderFactory.createTitledBorder("Bonus"));

		jPanel_Bonus.add(jLabel_BonusDMG);
		jPanel_Bonus.add(jText_BonusDMG);

		jPanel_Addition.add(jPanel_Bonus);

		this.add(BorderLayout.CENTER,jPanel_Addition);

		//OUTPUT COLUMN
		jPanel_Output.setLayout(new GridLayout(2,3));
		jPanel_Output.setBorder(BorderFactory.createTitledBorder("Output"));
		//jPanel_Output.setSize(outputDimension);

		jPanel_Output.add(jLabel_DPSwoCrit);
		jPanel_Output.add(jText_DPSwoCrit);
		jPanel_Output.add(jLabel_DPSwCrit);
		jPanel_Output.add(jText_DPSwCrit);

		this.add(BorderLayout.EAST,jPanel_Output);
```

das ist auch so ziemlich das was ich will. nur sollten die textboxen, comboboxen und panels nicht gestreckt werden, sondern einfach aufhöhren und den raum darunter leer lassen.


----------



## MiDniGG (19. Mrz 2008)

jo probiers mit preferredSize oder sowas ^^ Sollte es im GridLayout auch geben...


----------



## Laures (19. Mrz 2008)

ich hab schon testweise für jedes panel das ich hinzufügen feste größen gesetzt. interessiert nicht.
ich hab auch schon sowas versucht wie:


```
JPanel blubb = new JPanel();
		blubb.setLayout(new BoxLayout(blubb,BoxLayout.Y_AXIS));
		blubb.add(jPanel_Addition);
```

aber er klebt das innere panel immer an die componente darüber und streckt den inhalt und das zu schaffen. Das soll er aber nicht.
Größentechnisch sollte es (etwa) aussehen wie ne treppe, da das panel in WEST am größten ist.

Laures


----------



## L-ectron-X (19. Mrz 2008)

MiDniGG hat gesagt.:
			
		

> jo probiers mit preferredSize oder sowas ^^ Sollte es im GridLayout auch geben...


Nee, gibts nicht. Da bekommen alle Zellen die gleiche Größe, und zwar die der größten Komponente.


----------



## Laures (19. Mrz 2008)

ich teste heut abend mal das grouplayout. das klingt für mein verständnis ganz vielversprechend


----------



## m@nu (19. Mrz 2008)

ich habe mich nicht gross eingelesen.
aber mein tipp für aufwändige gui's ist das FormLayout von JGoodies.
:arrow: http://www.jgoodies.com/freeware/forms/index.html

zu beginn benötigt es ein wenig einarbeitung, aber anschliessend bekommt man relativ schnell sehr gute ergebnisse. performancemässig habe ich bis anhin noch nie probleme gehabt.


----------



## MiDniGG (19. Mrz 2008)

Joa. Hab ich auch schon erwähnt 

Und @LeX:   hätte ja sein können.... :-(


----------



## Laures (19. Mrz 2008)

ok.... ich hab jetz mal NUR den input teil mal mit group layout nachgecoded. funktionierte auch im 50. versuch. sobald ich aber das fenster resize gibts fehler ohne ende und er streckt immernoch die textfelder obwohl ich alles was irgendwie nach size aussah rausgehaun hab.


```
GroupLayout inputLayout = new GroupLayout(this);
		
		inputLayout.setVerticalGroup(inputLayout.createSequentialGroup()
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_MinDMG1)
						.addComponent(jText_MinDMG1)
				)
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_MaxDMG1)
						.addComponent(jText_MaxDMG1)
				)
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_Type1)
						.addComponent(jCombo_Type1)
				)
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_Speed1)
						.addComponent(jCombo_Speed1)
				)
			);
		
		inputLayout.setHorizontalGroup(
				inputLayout.createSequentialGroup()
					.addGroup(inputLayout.createParallelGroup()
							.addComponent(jLabel_MinDMG1)
							.addComponent(jLabel_MaxDMG1)
							.addComponent(jLabel_Type1)
							.addComponent(jLabel_Speed1)
						)
					.addGroup(inputLayout.createParallelGroup()
							.addComponent(jText_MinDMG1)
							.addComponent(jText_MaxDMG1)
							.addComponent(jCombo_Type1)
							.addComponent(jCombo_Speed1)
						)
				);
		
		this.setLayout(inputLayout);
```







gibt es keine mölglichkeit ihn bei irgendeinem layoutmanager dazu zu bringen etwas leer zulassen? das kann doch nich so schwer sein.


EDIT: 
die fehler sind weg nachdem ich das ganze in ein Panel gepackt habe. soweit so gut. nur strecken wenn das fenster größer wird tut er immernoch.
ich hab rausgekriegt das ich für Textfelder eine maximalgröße setzen kann und das sogar funktioniert (mein jpanel war eher unbeeindrukt). Frage ist also: wie groß ist so ein textfeld normalerweise? bei mir solls eine zeile hoch sein.

Scheinbar kann man aber NUR höhe nicht setzen. grrrrrr

EDIT2:

nach vielem lesen http://weblogs.java.net/blog/tpavek/archive/community_javadesktop/index.html weiß ich jetz das man beim addComponent den resize mitbeinflussen kann. seit dem resized nurnoch das panel alleine ohne seinen inhalt. damit kann ich erstmla leben.


----------



## Laures (19. Mrz 2008)

```
// general objects
	private Dimension absoluteSize = new Dimension(622,300);
	private BorderLayout mainLayout = new BorderLayout();
	
	// banner
	private JLabel jLabel_Banner1 = new JLabel(new ImageIcon(getClass().getResource("hc-pvp-news.jpg"), "Mein Banner"));

	// input
	private JPanel jPanel_Input1 = new JPanel();
	private JComponent jCombo_Speed1 = new JComboBox(blades);
	private JComboBox jCombo_Type1 = new JComboBox(types);
	private JLabel jLabel_MinDMG1 = new JLabel("Min. Damage");
	private JLabel jLabel_MaxDMG1 = new JLabel("Max. Damage");
	private JLabel jLabel_Type1 = new JLabel("Weapon");
	private JLabel jLabel_Speed1 = new JLabel("Attack Speed");
	private JTextField jText_MaxDMG1 = new JTextField("0",3);
	private JTextField jText_MinDMG1= new JTextField("0",3);

	// aditional info
	private JPanel jPanel_Addition = new JPanel();

	private JPanel jPanel_Crit = new JPanel();
	private JLabel jLabel_CritChance = new JLabel("<html>Critical Chance
(in %)</html>");
	private JTextField jText_CritChance = new JTextField("0",3);
	private JLabel jLabel_CritBonus = new JLabel ("<html>Critical Bonus
(in %)</html>");
	private JTextField jText_CritBonus = new JTextField("0",3);

	private JPanel jPanel_Bonus = new JPanel();
	private JLabel jLabel_BonusDMG = new JLabel ("<html>Bonus Damage
(in %)</html>");
	private JTextField jText_BonusDMG = new JTextField("0",3);
	
	// output
	private JPanel jPanel_Output = new JPanel();
	private JLabel jLabel_DPSwoCrit = new JLabel ("<html>Damage per Second
(native)</html>");
	private JTextField jText_DPSwoCrit = new JTextField("0",4);
	private JLabel jLabel_DPSwCrit = new  JLabel ("<html>Damage per Second
(with Crit)</html>");
	private JTextField jText_DPSwCrit = new JTextField("0",4);
	// End of variables declaration

	
	public void init() {		
		// preferences
		this.setLayout(mainLayout);

		this.setSize(absoluteSize);
		this.setMinimumSize(absoluteSize);
		this.setMaximumSize(absoluteSize);
		
		// Banner
		this.add(BorderLayout.NORTH,jLabel_Banner1);

		//Jpanel Input Definiton
		
		jPanel_Input1.setBorder(BorderFactory.createTitledBorder("Input"));
		jCombo_Type1.addActionListener(this);
		
		//group layout
		
		GroupLayout inputLayout = new GroupLayout(jPanel_Input1);
		inputLayout.setAutoCreateGaps(true);
		inputLayout.setAutoCreateContainerGaps(true);
		
		inputLayout.setVerticalGroup(inputLayout.createSequentialGroup()
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_MinDMG1)
						.addComponent(jText_MinDMG1,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_MaxDMG1)
						.addComponent(jText_MaxDMG1,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_Type1)
						.addComponent(jCombo_Type1,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
				.addGroup(inputLayout.createParallelGroup()
						.addComponent(jLabel_Speed1)
						.addComponent(jCombo_Speed1,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
			);
		
		inputLayout.setHorizontalGroup(
				inputLayout.createSequentialGroup()
					.addGroup(inputLayout.createParallelGroup()
							.addComponent(jLabel_MinDMG1)
							.addComponent(jLabel_MaxDMG1)
							.addComponent(jLabel_Type1)
							.addComponent(jLabel_Speed1)
						)
					.addGroup(inputLayout.createParallelGroup()
							.addComponent(jText_MinDMG1)
							.addComponent(jText_MaxDMG1)
							.addComponent(jCombo_Type1)
							.addComponent(jCombo_Speed1)
						)
				);
		
		jPanel_Input1.setLayout(inputLayout);
		
		this.add(BorderLayout.WEST,jPanel_Input1);
		
		// ADDITIONAL COLUMN
				
		jPanel_Addition.setLayout(new BoxLayout(jPanel_Addition,BoxLayout.Y_AXIS));
		//jPanel_Addition.setSize(additionDimension);

		//Criticals
		
		GroupLayout critLayout = new GroupLayout(jPanel_Crit);
		critLayout.setAutoCreateGaps(true);
		critLayout.setAutoCreateContainerGaps(true);
		jPanel_Crit.setLayout(critLayout);

		jPanel_Crit.setBorder(BorderFactory.createTitledBorder("Critical"));

		critLayout.setVerticalGroup(critLayout.createSequentialGroup()
				.addGroup(critLayout.createParallelGroup()
						.addComponent(jLabel_CritChance)
						.addComponent(jText_CritChance,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
				.addGroup(critLayout.createParallelGroup()
						.addComponent(jLabel_CritBonus)
						.addComponent(jText_CritBonus,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
			);
		
		critLayout.setHorizontalGroup(
				critLayout.createSequentialGroup()
					.addGroup(critLayout.createParallelGroup()
							.addComponent(jLabel_CritChance)
							.addComponent(jLabel_CritBonus)
						)
					.addGroup(critLayout.createParallelGroup()
							.addComponent(jText_CritChance)
							.addComponent(jText_CritBonus)
						)
				);
		jPanel_Addition.add(jPanel_Crit);

//		// Bonus
		GroupLayout bonusLayout = new GroupLayout(jPanel_Bonus);
		bonusLayout.setAutoCreateGaps(true);
		bonusLayout.setAutoCreateContainerGaps(true);
		jPanel_Bonus.setLayout(bonusLayout);
		
		jPanel_Bonus.setBorder(BorderFactory.createTitledBorder("Bonus"));
		
		bonusLayout.setVerticalGroup(bonusLayout.createSequentialGroup()
				.addGroup(bonusLayout.createParallelGroup()
						.addComponent(jLabel_BonusDMG)
						.addComponent(jText_BonusDMG,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
			);
		
		bonusLayout.setHorizontalGroup(
				bonusLayout.createSequentialGroup()
					.addGroup(bonusLayout.createParallelGroup()
							.addComponent(jLabel_BonusDMG)
						)
					.addGroup(bonusLayout.createParallelGroup()
							.addComponent(jText_BonusDMG)
						)
				);
		jPanel_Addition.add(jPanel_Bonus);

		this.add(BorderLayout.CENTER,jPanel_Addition);

		//OUTPUT COLUMN
		
		GroupLayout outputLayout = new GroupLayout(jPanel_Output);
		outputLayout.setAutoCreateGaps(true);
		outputLayout.setAutoCreateContainerGaps(true);
		jPanel_Output.setLayout(outputLayout);

		jPanel_Output.setBorder(BorderFactory.createTitledBorder("Output"));

		outputLayout.setVerticalGroup(outputLayout.createSequentialGroup()
				.addGroup(outputLayout.createParallelGroup()
						.addComponent(jLabel_DPSwoCrit)
						.addComponent(jText_DPSwoCrit,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
				.addGroup(outputLayout.createParallelGroup()
						.addComponent(jLabel_DPSwCrit)
						.addComponent(jText_DPSwCrit,GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				)
			);
		
		outputLayout.setHorizontalGroup(
				outputLayout.createSequentialGroup()
					.addGroup(outputLayout.createParallelGroup()
							.addComponent(jLabel_DPSwoCrit)
							.addComponent(jLabel_DPSwCrit)
						)
					.addGroup(outputLayout.createParallelGroup()
							.addComponent(jText_DPSwoCrit)
							.addComponent(jText_DPSwCrit)
						)
				);

		this.add(BorderLayout.EAST,jPanel_Output);
	}
	
	public void start() {
		
	}
	
	public void stop() {
		
	}
	
	public void actionPerformed(ActionEvent e) {
		System.out.println("Action performed");
		
		Object source = e.getSource();
		
		if (source.equals(jCombo_Type1)) {
		
			System.out.println("Type Combobos");
			System.out.println(jCombo_Type1.getSelectedItem());
			
			if (jCombo_Type1.getSelectedItem() == "Blade") {
			
				System.out.println("ich hab gemerkt das ich ein schwert bin");
				
				jCombo_Speed1 = new JComboBox(blades);
			} else if (jCombo_Type1.getSelectedItem() != "Blade") {
				
				System.out.println("ich hab gemerkt das ich kein schwert bin");
				
				jCombo_Speed1 = new JTextField("0",4);
			}
		} else {
			//blubb
		}
	}
```






jede menge code, ABER^^
jetzt skaliert nurnoch der center bereich in der breite und die beiden "ränder" in der höhe. letzteres stell ich heute noch über ein panel mit boxlayout in east und west ein.
wie ich center davon abhalte in der breite zu skalieren weiß ich noch nicht.


----------



## L-ectron-X (19. Mrz 2008)

Ich hab hier mal noch etwas Beispielcode für dich. Etwas weniger Code, macht aber, was du möchtest. Vielleicht nützt es dir ja etwas:

```
import java.awt.*;
import javax.swing.*;

public class MainPanel extends JPanel {
   private JTextField minDamTextField, maxDamTextField;
   private JComboBox weaponComboBox, attackSpeedComboBox;
   private JTextField criticalChanceTextField, criticalBonusTextField;
   private JTextField bonusDamageTextField;
   private JTextField damageSecondTextField, damageSecondCritTextField;
   
   public MainPanel() {
      super(new BorderLayout());
      
      GridBagLayoutPanel leftPanel, middleTopPanel, middleBottomPanel, rightPanel = null;
      
      leftPanel = new GridBagLayoutPanel();
      leftPanel.setBorder(BorderFactory.createTitledBorder("Input"));
      
      middleTopPanel = new GridBagLayoutPanel();
      middleTopPanel.setBorder(BorderFactory.createTitledBorder("Critical"));
      
      middleBottomPanel = new GridBagLayoutPanel();
      middleBottomPanel.setBorder(BorderFactory.createTitledBorder("Bonus"));

      rightPanel = new GridBagLayoutPanel();
      rightPanel.setBorder(BorderFactory.createTitledBorder("Output"));
      
      JLabel minDamLabel = new JLabel("Min. Damage");
      leftPanel.addComponent(minDamLabel, 0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 0, 5));
      
      minDamTextField = new JTextField();
      leftPanel.addComponent(minDamTextField, 1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5));
      
      JLabel maxDamLabel = new JLabel("Max. Damage");
      leftPanel.addComponent(maxDamLabel, 0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 5, 0, 5));

      minDamTextField = new JTextField();
      leftPanel.addComponent(minDamTextField, 1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 5));
      
      JLabel weaponLabel = new JLabel("Weapon");
      leftPanel.addComponent(weaponLabel, 0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 5, 0, 5));

      weaponComboBox = new JComboBox();
      leftPanel.addComponent(weaponComboBox, 1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 0, 5));
      
      JLabel attackSpeedLabel = new JLabel("Attack Speed");
      leftPanel.addComponent(attackSpeedLabel, 0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 5, 5, 5));

      attackSpeedComboBox = new JComboBox();
      leftPanel.addComponent(attackSpeedComboBox, 1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(10, 5, 5, 5));
      
      middleTopPanel.addComponent(new JLabel("in %"), 1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 5));
      
      JLabel criticalChanceLabel = new JLabel("Critical Chance");
      middleTopPanel.addComponent(criticalChanceLabel, 0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5));

      criticalChanceTextField = new JTextField();
      middleTopPanel.addComponent(criticalChanceTextField, 1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 0, 5));
      
      middleTopPanel.addComponent(new JLabel("in %"), 1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 0, 0, 5));

      JLabel criticalBonusLabel = new JLabel("Critical Bonus");
      middleTopPanel.addComponent(criticalBonusLabel, 0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5));

      criticalBonusTextField = new JTextField();
      middleTopPanel.addComponent(criticalBonusTextField, 1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 5));
      
      middleBottomPanel.addComponent(new JLabel("in %"), 1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 5));
      
      JLabel bonusDamageLabel = new JLabel("Bonus Damage");
      middleBottomPanel.addComponent(bonusDamageLabel, 0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5));

      bonusDamageTextField = new JTextField();
      middleBottomPanel.addComponent(bonusDamageTextField, 1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 5));
      
      JLabel damageSecondLabel = new JLabel("<html>Damage per Second
(native)</html>");
      rightPanel.addComponent(damageSecondLabel, 0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 0, 5));

      damageSecondTextField = new JTextField();
      rightPanel.addComponent(damageSecondTextField, 1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5));
      
      JLabel damageSecondCritLabel = new JLabel("<html>Damage per Second
(with Critical)</html>");
      rightPanel.addComponent(damageSecondCritLabel, 0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 5, 0, 5));

      damageSecondCritTextField = new JTextField();
      rightPanel.addComponent(damageSecondCritTextField, 1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(15, 5, 5, 5));
      
      JPanel middlePanel = new JPanel(new BorderLayout());
      middlePanel.add(middleTopPanel, BorderLayout.NORTH);
      middlePanel.add(middleBottomPanel, BorderLayout.SOUTH);
      
      JPanel topPanel = new JPanel(new GridLayout(1, 0));
      add(topPanel, BorderLayout.NORTH);

      topPanel.add(leftPanel, BorderLayout.WEST);
      topPanel.add(middlePanel, BorderLayout.CENTER);
      topPanel.add(rightPanel, BorderLayout.EAST);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {
         e.printStackTrace();
      }
      
      MainPanel panel = new MainPanel();
      JFrame frame = new JFrame("Test-Frame für die Anzeige von JPanels");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.add(panel);
      frame.setSize(600, 400);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
}
```


```
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JComponent;
import javax.swing.JPanel;

public class GridBagLayoutPanel extends JPanel {
   private GridBagConstraints gbc;
   
   public GridBagLayoutPanel() {
      super(new GridBagLayout());
   }

   public void addComponent(JComponent component,
               int gridx,
               int gridy,
               int gridwidth,
               int gridheight,
               double weightx,
               double weighty,
               int anchor,
               int fill,
               Insets insets,
               int ipadx,
               int ipady) {
      gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady);
      add(component, gbc);
   } 
   
   public void addComponent(JComponent component,
               int gridx,
               int gridy,
               int gridwidth,
               int gridheight,
               double weightx,
               double weighty,
               int anchor,
               int fill,
               Insets insets) {
      gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, 0, 0);
      add(component, gbc);
   }   

}
```
Wenn man's ausführt, siehts so aus:


----------



## Laures (20. Mrz 2008)

Danke für den Code, ich werd mich mal mit dem GridBag layout und insets und so auseinandersetzen.
Auf jedenfall danke! ich hab jetz auf jedenfall eine Funktionierende Oberfläche.


----------

