GUI Komponenten ausrichten?

Status
Nicht offen für weitere Antworten.
J

johnny1

Gast
Hi @ all,

ich bin Anfänger in Java und hab ein kleines Problem! Ich hab mir eine Übung vorgenommen mit dem
GridBagLayout und Events! Jedoch möchte ich, dass mein Panel immer in der linken oberen Ecke zu
sehen ist. Wenn ich meine Applikation vertikal sowie auch horizontal vergrößere, verschiebt sich mein
Layout!

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class CDLCalc extends JFrame {

	JRadioButton[] chs=new JRadioButton[12];
	ButtonGroup bandb=new ButtonGroup();
	JRadioButton[] kbmb=new JRadioButton[2];
	ButtonGroup gkbmb=new ButtonGroup();
	JLabel info1=new JLabel("Bitte die Bandbreite auswählen:",JLabel.CENTER);
	JLabel info2=new JLabel("Downloadgröße:",JLabel.RIGHT);
	JLabel info3=new JLabel("Ungefähre Downloadzeit:",JLabel.RIGHT);
	JTextField in=new JTextField(5);
	JTextField erg=new JTextField(12);
	JButton send=new JButton("Berechnen");
	
	public CDLCalc() {
		super("Download Time Calculator");
		setSize(325,320);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLookAndFeel();
		GridBagLayout gridbag=new GridBagLayout();
		GridBagConstraints constraints=new GridBagConstraints();
		Container pane=getContentPane();
		pane.setLayout(gridbag);
		constraints.anchor=GridBagConstraints.WEST;
		constraints.fill=GridBagConstraints.NONE;
		constraints.insets=new Insets(3,3,3,3);
		
		// Label
		buildConstraints(constraints,0,0,5,1,90,0);
		gridbag.setConstraints(info1,constraints);
		pane.add(info1);
		
		// RadioButtons
		chs[0]=new JRadioButton("Modem (56kb/s)");
		chs[1]=new JRadioButton("ISDN (64kb/s)");
		chs[2]=new JRadioButton("ISDN2 (128kb/s)");
		chs[3]=new JRadioButton("DSL-Light (384kb/s)");
		chs[4]=new JRadioButton("DSL (768kb/s)");
		chs[5]=new JRadioButton("DSL1000 (1024kb/s)");
		for(int i=0;i<6;i++) {
			buildConstraints(constraints,0,i+1,1,1,0,0);
			bandb.add(chs[i]);
			gridbag.setConstraints(chs[i],constraints);
			pane.add(chs[i]);
		}
		
		chs[6]=new JRadioButton("DSL2000 (2048kb/s)");
		chs[7]=new JRadioButton("DSL6000 (6016kb/s)");
		chs[8]=new JRadioButton("DSL2+ (16.000kb/s)");
		chs[9]=new JRadioButton("LAN (10.000kb/s)");
		chs[10]=new JRadioButton("LAN (100.000kb/s)");
		chs[11]=new JRadioButton("GBLAN (1.000.000kb/s)");
		for(int i=6;i<chs.length;i++) {
			  buildConstraints(constraints,1,i-5,3,1,0,0);
			  bandb.add(chs[i]);
			  gridbag.setConstraints(chs[i],constraints);
			  pane.add(chs[i]);
		}

		// Eingabe Label
		buildConstraints(constraints,0,7,1,1,50,0);
		gridbag.setConstraints(info2,constraints);
		pane.add(info2);
		
		// Eingabe Downloadgröße
		buildConstraints(constraints,1,7,1,1,0,0);
		gridbag.setConstraints(in, constraints);
		pane.add(in);
		
		// Eingabe Auswahl KB/MB
		kbmb[0]=new JRadioButton("KB");
		kbmb[1]=new JRadioButton("MB");
		gkbmb.add(kbmb[0]);
		gkbmb.add(kbmb[1]);
		buildConstraints(constraints,2,7,1,1,0,0);
		gridbag.setConstraints(kbmb[0],constraints);
		pane.add(kbmb[0]);
		buildConstraints(constraints,3,7,1,1,0,0);
		gridbag.setConstraints(kbmb[1],constraints);
		pane.add(kbmb[1]);

		// Ausgabe Label
		buildConstraints(constraints,0,8,1,1,50,0);
		gridbag.setConstraints(info3,constraints);
		pane.add(info3);
		
		// Ausgabe Textfeld
		buildConstraints(constraints,1,8,3,1,50,0);
		erg.setEditable(false);
		gridbag.setConstraints(erg,constraints);
		pane.add(erg);
		
		// Berechnen Button
		constraints.anchor=GridBagConstraints.CENTER;
		buildConstraints(constraints,0,9,5,1,90,0);
		gridbag.setConstraints(send,constraints);
		pane.add(send);
		
		setVisible(true);
	}
	
	private void buildConstraints(GridBagConstraints gbc,int gx,int gy,int gw,int gh,
								  int wx,int wy) {
		gbc.gridx=gx;
		gbc.gridy=gy;
		gbc.gridwidth=gw;
		gbc.gridheight=gh;
		gbc.weightx=wx;
		gbc.weighty=wy;
	}
	
	private void setLookAndFeel() {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			SwingUtilities.updateComponentTreeUI(this);
		} catch(Exception e) {
			System.err.println("Couldn't use ths system Look and Feel: " + e);
		}
	}
	
	public static void main(String[] args) {
		CDLCalc win=new CDLCalc();
	}
	
}
Wäre super wenn mir da jemand weiterhelfen könnte oder auch Verbesserungsvorschläge hätte!
 

Reeny

Aktives Mitglied
Ahhh, GridBagLayout ! Mein Thema :D

Der Trick ist, dass du in die unterste Reihe und rechteste Spalte ein leeres Panel einfügst, das den gesamten freihen Platz des Layouts bekommt. Wenn du das Frame vergrößerst, vergrößert sich automatisch das leere Panel auch mit und schiebt den Rest des GridBag-Inhalts nach links oben.

Code:
	public CDLCalc() {
		super("Download Time Calculator");
		setSize(325,320);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLookAndFeel();
		GridBagLayout gridbag=new GridBagLayout();
		GridBagConstraints constraints=new GridBagConstraints();
		Container pane=getContentPane();
		pane.setLayout(gridbag);
		constraints.anchor=GridBagConstraints.WEST;
		constraints.fill=GridBagConstraints.NONE;
		constraints.insets=new Insets(3,3,3,3);
		
		// Label
		buildConstraints(constraints,0,0,5,1,90,0);
		gridbag.setConstraints(info1,constraints);
		pane.add(info1);
		
		// RadioButtons
		chs[0]=new JRadioButton("Modem (56kb/s)");
		chs[1]=new JRadioButton("ISDN (64kb/s)");
		chs[2]=new JRadioButton("ISDN2 (128kb/s)");
		chs[3]=new JRadioButton("DSL-Light (384kb/s)");
		chs[4]=new JRadioButton("DSL (768kb/s)");
		chs[5]=new JRadioButton("DSL1000 (1024kb/s)");
		for(int i=0;i<6;i++) {
			buildConstraints(constraints,0,i+1,1,1,0,0);
			bandb.add(chs[i]);
			gridbag.setConstraints(chs[i],constraints);
			pane.add(chs[i]);
		}
		
		chs[6]=new JRadioButton("DSL2000 (2048kb/s)");
		chs[7]=new JRadioButton("DSL6000 (6016kb/s)");
		chs[8]=new JRadioButton("DSL2+ (16.000kb/s)");
		chs[9]=new JRadioButton("LAN (10.000kb/s)");
		chs[10]=new JRadioButton("LAN (100.000kb/s)");
		chs[11]=new JRadioButton("GBLAN (1.000.000kb/s)");
		for(int i=6;i<chs.length;i++) {
			buildConstraints(constraints,1,i-5,3,1,0,0);
			bandb.add(chs[i]);
			/*gridbag.setConstraints(chs[i],constraints);*/
			pane.add(chs[i], constraints);
		}
		
		// Eingabe Label
		buildConstraints(constraints,0,7,1,1,50,0);
		/*gridbag.setConstraints(info2,constraints);*/
		pane.add(info2,constraints);
		
		// Eingabe Downloadgröße
		buildConstraints(constraints,1,7,1,1,0,0);
		/*gridbag.setConstraints(in, constraints);*/
		pane.add(in, constraints);
		
		// Eingabe Auswahl KB/MB
		kbmb[0]=new JRadioButton("KB");
		kbmb[1]=new JRadioButton("MB");
		gkbmb.add(kbmb[0]);
		gkbmb.add(kbmb[1]);
		buildConstraints(constraints,2,7,1,1,0,0);
		/*gridbag.setConstraints(kbmb[0],constraints);*/
		pane.add(kbmb[0], constraints);
		buildConstraints(constraints,3,7,1,1,0,0);
		/*gridbag.setConstraints(kbmb[1],constraints);*/
		pane.add(kbmb[1], constraints);
		
		// Ausgabe Label
		buildConstraints(constraints,0,8,1,1,50,0);
		/*gridbag.setConstraints(info3,constraints);*/
		pane.add(info3, constraints);
		
		// Ausgabe Textfeld
		buildConstraints(constraints,1,8,3,1,50,0);
		erg.setEditable(false);
		/*gridbag.setConstraints(erg,constraints);*/
		pane.add(erg, constraints);
		
		// Berechnen Button
		constraints.anchor=GridBagConstraints.CENTER;
		buildConstraints(constraints,0,9,5,1,90,0);
		/*gridbag.setConstraints(send,constraints);*/
		pane.add(send, constraints);
		
		
		// leeres Panel als "Lückenfüller" hinzufügen
		JPanel emptyPanel = new JPanel();
		
		// ==> ZUM TESTEN DEKOMMENTIEREN
		/*
		emptyPanel.setBorder(new LineBorder(Color.BLACK, 3));
		emptyPanel.setBackground(Color.WHITE);
		constraints.fill = GridBagConstraints.BOTH;
		*/
		buildConstraints(constraints,
				100,  // Spalte 100 sollte weit genug rechts liegen ...
				10,
				GridBagConstraints.REMAINDER,  // = letzte Spalte
				GridBagConstraints.REMAINDER,  // = letzte Zeile
				100,  // den meistens freihen Platz bekommen (horizontal)
				100); // den meisten freihen Platz bekommen (vertikal)
		
		pane.add(emptyPanel, constraints);
		
		pack();
		setVisible(true);
	}

Ab Zeile 87 siehst du den hinzugefügten Code. Wenn du sehen willst, wie das Lückenfüller-Panel sich in deinem GridBagLayout ausbreitet, kannst du ja mal Zeile 91 - 95 dekommentieren ...

Übrigens: Du kannst die beiden Schritte
Code:
gridbag.setConstraints(component, constraints);
pane.add(component);

verkürzen mit
Code:
pane.add(component, constraints);


Und nicht vergessen, vor dem setVisible(true) eines Frames pack() aufzurufen, damit die einzelnen Komponenten ihre korrekte Größe bekommen! (siehe Zeile 106)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Dynamisches generieren und ausrichten von Komponenten AWT, Swing, JavaFX & SWT 11
A Komponenten in JTree ausrichten AWT, Swing, JavaFX & SWT 2
G Komponenten ausrichten unter Swing AWT, Swing, JavaFX & SWT 7
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
R Swing Komponenten klein angezeigt AWT, Swing, JavaFX & SWT 10
D Swing Swing Komponenten verschieben AWT, Swing, JavaFX & SWT 7
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
Kr0e AWT Komponenten in JPanel AWT, Swing, JavaFX & SWT 6
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
O Größe von Komponenten im JFrame manuell verändern AWT, Swing, JavaFX & SWT 2
H Komponenten anwendugsweit formatieren AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben