Meine Buttons verändern ihre Größe nicht!!

Amnesia

Grünschnabel
Hey ihr,
ich verzweifle gerade mal wieder... obwohl es sich nur um eine Kleinigkeit handelt.
Und zwar habe ich ein Frame mit dem Layout BorderLayout. Im Center habe ich eine Tabelle abgelegt. Und in EAST ein Panel mit 2 Buttons. Mein Problem ist nun, dass meine Buttons unterschiedlich groß sind. Ich möchte aber dass, alle Buttons so groß sind wie der größte von ihnen.

Hier mein Code:
Code:
public void start() {

		// Frame Anfang
		frame = new JFrame("Ralf's Inventur v 1.0");
		frame.setLayout(new BorderLayout());

		// Tabelle
		String[] spalten = { "ID", "Artikelname", "Bezeichnung",
				"Preis (inkl.19% MwSt.)", "Stückzahl",
				"Gesamtwert (inkl.19% MwSt.)" };
		Object[][] reihen = {};
		tabModel = new DefaultTableModel(reihen, spalten);
		table = new JTable(tabModel);
		JScrollPane scrollPane = new JScrollPane(table);
		frame.add(scrollPane, "Center");

		// ButtonPannel
		btnPanel = new JPanel();
		btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.Y_AXIS));

		JButton artFueg = new JButton("Artikel hinzufügen");
		artFueg.addActionListener(new artikelFügListener());
		btnPanel.add(artFueg);
		

		JButton aktual = new JButton("Aktualisieren");
		aktual.addActionListener(new aktualListener());
		btnPanel.add(aktual);
	
		frame.add(BorderLayout.EAST,btnPanel);
		

		// Frame Ende
		frame.add(BorderLayout.EAST,btnPanel);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(1300, 1000);
		frame.setVisible(true);
		

	}

habe alles versucht.. setsize() und setpreferedsize() .. bla.. ich weis nicht mehr weiter.

Freue mich auf alle helfenden Antworten

Liebe Grüße
Amnesia
 
Also du könntest keinen Layout Manager nehmen, sprich setLayout(null).
Und mit dem Befehel button1.setBounds(x,y,breite,höhe) die größe verändern.
Nachteil ist aber auch , dass sie die größe nicht der Fenstergröße automatisch anpasst.
Oder versuch mal die Befehle setMinimumSize() und setMaximumSize(). Bin mir aber nicht sicher ob die
funktionieren, denn ich hab's noch nicht versucht.
 
Moin,

da Du nirgendwo konkret die Größe der Button setzt (bspw. mit setBounds, wie von Xym beschrieben), wird wohl die Größe der Button gemäß den im Konstruktor übergebenen Text gesetzt !

Gruß
Klaus
 
Woran das liegt kann ich so am Quellcode jetzt auch nicht sehen, könnte am Layout liegen.
Aber mal vom Fehler ab: Bist du dir sicher, dass das so funktioniert?
Java:
frame.add(BorderLayout.EAST,btnPanel);
Das habe ich so in der Form noch nie gesehen und das gibt es nichtmal laut JavaAPI in der Form. Wenn dann so:
Java:
frame.add(btnPanel, BorderLayout.EAST);
 
Hey ihr lieben,
danke für die Antworten. Ich hab mich jetzt entschieden den ganzen Layouts zu entsagen und setz die Bounds jetzt manuell!! Man hat irgendwie nur Probs mit den Layouts...

@Akeshi
Habs auf beiden Wegen versucht und beides geht. :)

Lg
Amnesia
 
@Amnesia
Ich rate dir davon ab, die Bounds manuell zu setzen. Die Größe der Buttons ändert sich nämlich je nach LookAndFeel, evtl. Systemeinstellungen zum Theme, Schriftart, Schriftgröße, Übersetzung des Textes, installierten Schriftarten, dpi, ...
 
Hey genode,
was meinst du damit? Also ich bin ja noch ein Anfänger und schreibe quasi an meinem ersten "richtigen" Programm. Ich habe es nun so realisiert dass ich alle Components auf dem Frame über die Bounds setze. Das klappt eigentlich ganz gut. Jedoch ist das Programm nicht für mich sondern für einen Bekannten. Meinst du die Components verschieben sich, er das Programm bei sich startet**** Weil das wär ja der absolute Horror!!
Er hat zum Beispiel Win XP und ich hab Win 7.

LG
Amnesia
 
Also der Unterschied Windows XP und Windows 7 kann auch schon etwas ausmachen, da die Fensterrahmen unterschiedlich breit sind! Und wenn Java 7 veröffentlicht wird, könnte sich das Standard-Look and Feel ändern, das könnte dir dann dein gesamtes Layout durcheinander schmeißen.

Mach es dir doch einfacher: füge das Panel nicht rechts, sondern oben oder unten hinzu.

Wenn du es unbedingt auf der Seite haben möchtest:
Du hast in ein Wespennest gestochen: Es ist eines der größten Mängel an Java, dass die verfügbaren Windowing Toolkits sehr eingeschränkt und umständlich sind.
Mit dem GridBagLayout (arbeitet wie eine Tabelle, siehe http://openbook.galileocomputing.de...19_011.htm#mjbce2a36beed319dac0bd3d9717ee2f11) geht es, allerdings etwas komplizierter:
Java:
btnPanel = new JPanel();
final GridBagLayout layout = new GridBagLayout();
btnPanel.setLayout(layout);

// wird benötigt, um die Position der einzelnen Elemente zu beschreiben
final GridBagConstraints gbc = new GridBagConstraints(); 

gbc.fill = GridBagConstraints.HORIZONTAL; //damit die Button die maximal verfügbare Breite einnehmen, nicht die Höhe (GridBagConstraints.VERTICAL) oder Breite und Höhe (BOTH)
gbc.anchor = GridBagConstraints.NORTH; // Orientiert die Componenten oben
gbc.gridx = 1;// 1. "Spalte"
gbc.gridy = 1;// 1. "Zeile"

final JButton artFueg = new JButton("Artikel hinzufügen");
btnPanel.add(artFueg, gbc);

gbc.gridy = 2;// alles wie beim 1. Button, außer dass dieser in der 2. "Zeile" ist
final JButton aktual = new JButton("Aktualisieren");
btnPanel.add(aktual, gbc);

// und ein unsichtbares "Füll-Element"
gbc.gridy = 3;// 3. "Zeile"
gbc.weighty = 1; //damit das Füllelement die maximal verfügbare Höhe einnimmt
btnPanel.add(Box.createVerticalGlue(), gbc);

frame.add(btnPanel, BorderLayout.EAST);

P.S.: Wenn du den Java-Code auch in [code=java] [/code] -Tags packst, lässt er sich besser lesen!
 
Zuletzt bearbeitet:
Hey,
danke nochmal für deine Hilfe. Also ich muss ehrlich sagen, dass mir das Programm ja nun ein bissl aufn Nerv geht. Deswegen werde ich denk ich den Swingteil so lassen. Beim nächsten Prog wirds dann bissl gescheiter.
Danke für den Tip mit der Formatierung meiner Beiträge. Ich werd ihn mir zu Herzen nehmen ;)

Gruß
Amnesia
 
Zurück