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

Status
Nicht offen für weitere Antworten.

Laures

Mitglied
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:
appletpicom2.png


Mein code ist derzeit folgender:
Code:
	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

Top Contributor
Zum Layout: Vielleicht mal GridbagLayout benutzen!


JLabel unterstützt HTML

Code:
new JLabel("<html>1.zeile
2.Zeile</html>");
 
M

MiDniGG

Gast
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

Top Contributor
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 ;)
 
M

MiDniGG

Gast
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 :p )
 

L-ectron-X

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

Laures

Mitglied
dingdongtn7.jpg


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

Gesperrter Benutzer
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

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

appletpicgx2.png


Code:
	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.
 
M

MiDniGG

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

Laures

Mitglied
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:

Code:
		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
 

m@nu

Bekanntes Mitglied
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.
 
M

MiDniGG

Gast
Joa. Hab ich auch schon erwähnt :)

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

Laures

Mitglied
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.

Code:
		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);

appletog4.png



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

Mitglied
Code:
	// 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
		}
	}

appletqw9.png


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

Gesperrter Benutzer
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:
Code:
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);
   }
}

Code:
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:
GridBagLayoutPanel.gif
 

Laures

Mitglied
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.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
N SceneBuilder wie auf Attribute zugreifen? Diese sind immer null. AWT, Swing, JavaFX & SWT 6
RalleYTN JavaFX Wie zur Hölle deaktiviere ich diese verdammte Debugging Console AWT, Swing, JavaFX & SWT 0
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
A AWT Nach dem generieren von bildern verschwinden diese wieder AWT, Swing, JavaFX & SWT 9
B Standard Icons wo findet man diese? AWT, Swing, JavaFX & SWT 20
G Gibt es diese Komponente? AWT, Swing, JavaFX & SWT 11
F Rechte Maustaste auf TreeNode soll den Fokus auf diese setzen AWT, Swing, JavaFX & SWT 6
X JFrames auf Bildschirmgröße maximieren. Ohne diese Symbolleiste AWT, Swing, JavaFX & SWT 4
G Kann mir jemand diese Exception erklaeren? AWT, Swing, JavaFX & SWT 8
G Kennt jemand diese Komponente? AWT, Swing, JavaFX & SWT 2
T Warum nehmen diese Labels die Hintergrundfarbe nicht an? AWT, Swing, JavaFX & SWT 6
I Drag & Drop - kriegt Swing diese Aufgabe hin? AWT, Swing, JavaFX & SWT 5
B Wie heißt diese Klasse? AWT, Swing, JavaFX & SWT 2
C Wie heissen diese Dinge auf Java API? AWT, Swing, JavaFX & SWT 2
M Wie machen die diese GUIs? AWT, Swing, JavaFX & SWT 2
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
S Swing Oberfläche rekusiv updaten mit updateUi() AWT, Swing, JavaFX & SWT 10
M LookAndFeel Oberfläche wie Eclipse/Business Objects oder Solvatio AWT, Swing, JavaFX & SWT 2
K Initialisierung von Oberfläche Richtig? AWT, Swing, JavaFX & SWT 5
T Java Swing Oberfläche aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
K Eclipse-Java Export/Import mit Oberfläche AWT, Swing, JavaFX & SWT 2
D Swing JComponent zeichnen ohne sie zur Oberfläche hinzuzufügen AWT, Swing, JavaFX & SWT 2
J prinzipielles verständnis für Oberfläche/Code-trennung AWT, Swing, JavaFX & SWT 5
T wieso leere Oberfläche? AWT, Swing, JavaFX & SWT 5
S Flickr Bilder in Gui Oberfläche AWT, Swing, JavaFX & SWT 21
cedi Swing Problem mit Grafischer Oberfläche AWT, Swing, JavaFX & SWT 8
E Swing Grafische Oberfläche zur Ordnerauswahl AWT, Swing, JavaFX & SWT 6
Z Component für File-Browser ähnliche Oberfläche AWT, Swing, JavaFX & SWT 6
B Wegfindung - Oberfläche AWT, Swing, JavaFX & SWT 3
P Erste Versuche einer Grafischen Oberfläche AWT, Swing, JavaFX & SWT 8
S AWT Oberfläche integriert sich nicht in GTK-Theme AWT, Swing, JavaFX & SWT 5
Private Void Swing "Vier Gewinnt"-Oberfläche AWT, Swing, JavaFX & SWT 7
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
D Mehrere Biler auf einer Oberfläche AWT, Swing, JavaFX & SWT 6
G Swing skalierbare Oberfläche AWT, Swing, JavaFX & SWT 2
W Oberfläche wird nicht koreckt gezeichnet AWT, Swing, JavaFX & SWT 5
Jenny87 AWT Tic Tac Toe oberfläche AWT, Swing, JavaFX & SWT 20
dl85hej meine erste Oberfläche AWT, Swing, JavaFX & SWT 3
multiholle Oberfläche MP3-Player AWT, Swing, JavaFX & SWT 2
A Oberfläche wir mit html-Frames aufbauen AWT, Swing, JavaFX & SWT 11
C Swing-Oberfläche wird auf einiges PCs nicht korrekt dargeste AWT, Swing, JavaFX & SWT 19
H JAVA Fenster Oberfläche AWT, Swing, JavaFX & SWT 3
S In JavaSwing Mailversand mit Oberfläche AWT, Swing, JavaFX & SWT 2
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
M Aus Swing Oberfläche Bild erzeugen AWT, Swing, JavaFX & SWT 39
F Zugriff auf Oberfläche bzw Trennung GUI / Logik AWT, Swing, JavaFX & SWT 3
T Problem mit Oberfläche und Thread AWT, Swing, JavaFX & SWT 10
G Ansprechende Java Oberfläche entwickeln AWT, Swing, JavaFX & SWT 10
B Probleme mit Öffnen einer GUI Oberfläche AWT, Swing, JavaFX & SWT 2
I Swing-Oberfläche wird nicht korrekt gezeichnet AWT, Swing, JavaFX & SWT 6
G Oberfläche löschen und neue erstellen AWT, Swing, JavaFX & SWT 4
R RAD Oberfläche für Eclipse gesucht AWT, Swing, JavaFX & SWT 4
G Tooltips auf grafischer Oberfläche AWT, Swing, JavaFX & SWT 2
A Background Image auf SWT Oberfläche legen AWT, Swing, JavaFX & SWT 3
J Anordung der Objekte in der Oberfläche? AWT, Swing, JavaFX & SWT 3
B Oberfläche mit SWT AWT, Swing, JavaFX & SWT 5
S Berechtigungssystem für Swing-Oberfläche AWT, Swing, JavaFX & SWT 2
M Grafische Objekte beliebig auf einer Oberfläche verschieben AWT, Swing, JavaFX & SWT 3
T Eigene grafische Oberfläche AWT, Swing, JavaFX & SWT 7
G JTree in Oberfläche Integrieren?? AWT, Swing, JavaFX & SWT 6
D Trennung von Programm und Oberfläche AWT, Swing, JavaFX & SWT 3
M Java Oberfläche per Drag&Drop -- Wie bei Visual Basic ! AWT, Swing, JavaFX & SWT 5
F Oberfläche wird nicht gestartet! AWT, Swing, JavaFX & SWT 2
M JavaFX MediaPlayer Soundloop bauen AWT, Swing, JavaFX & SWT 5
M Menüs bauen AWT, Swing, JavaFX & SWT 2
L Swing Wie ein solches Fenster bauen? AWT, Swing, JavaFX & SWT 3
data89 PopUp-Panel bauen - aber wie? AWT, Swing, JavaFX & SWT 2
E Eigene Steuerelemente bauen AWT, Swing, JavaFX & SWT 3
M Einfache Möglichkeit einen Login Dialog zu bauen? AWT, Swing, JavaFX & SWT 1
S SWT: Eclipse-artige Dialoge selbst bauen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben