# Die größe eines JButton ändern



## seux (29. Feb 2012)

Hallo zusammen,
zuallererst, ich habe die Suchfunktion schon verwendet, aber das Problem besteht weiterhin. 

Zum Problem:
Ich möchte, wie der Title schon sagt die Größe meiner Buttons ändern. Meine Buttons liegen in einem JPanel und wurden zu einem BoxLayout hinzugefügt, damit sie alle Untereinander liegen. Ich habe mit folgenden Funktionen jetzt versucht, die Größe zu ändern:

setSize();
setPreferredSize();
setMinimumSize();
setBounds();

Hat leider alles nicht geholfen. Was kann ich noch probieren?

gruß seux


----------



## vanny (29. Feb 2012)

Ausdrucken, übereinander kleben und mit der Scheere auf die gleiche Breite schneiden

Ein wenig Code wäre schon nett, um da etwas zu zu sagen.


----------



## seux (29. Feb 2012)

```
import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.UIManager;


class myGUI {
	
	private JButton add_Btn;
	private JButton delete_Btn;
	private JButton generate_Btn;
	private JButton quit_Btn;
	
	private JFrame main_Frame;
	private JPanel button_Panel;
	private JPanel main_Panel;
	
	
	public myGUI()
	{
		try {
	        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	    } catch (Exception e) { }
		
		main_Frame = new JFrame();
		main_Frame.setTitle("Hallo");
		main_Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		button_Panel = new JPanel();
		button_Panel.setLayout(new BoxLayout(button_Panel, BoxLayout.Y_AXIS));
		
		Dimension dim = new Dimension(150, 50);
		
		add_Btn = new JButton("Add");
		add_Btn.setPreferredSize(dim);
		
		delete_Btn = new JButton("Delete");
		delete_Btn.setSize(dim);
		
		generate_Btn = new JButton("Generate");
		generate_Btn.setMinimumSize(dim);
		
		quit_Btn = new JButton("Quit");
		quit_Btn.setBounds(quit_Btn.getBounds().x, quit_Btn.getBounds().y, 150, 50);
		
		main_Panel = new JPanel();
		main_Panel.setLayout(new BoxLayout(main_Panel, BoxLayout.Y_AXIS));
		main_Panel.add(button_Panel);
		
		main_Frame.add(main_Panel);
		main_Frame.pack();
	}
	
	public void show()
	{
		main_Frame.setVisible(true);
	}

	public static void main(String[] args) {
		myGUI gui = new myGUI();
		gui.show();
	}
}
```


----------



## Marco13 (1. Mrz 2012)

Im Allgemeinen mit PreferredSize, und im Fall eines BoxLayouts kann ein bißchen Glue nicht schaden...

```
import java.awt.*;

import javax.swing.*;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.UIManager;


class myGUI {

    private JButton add_Btn;
    private JButton delete_Btn;
    private JButton generate_Btn;
    private JButton quit_Btn;

    private JFrame main_Frame;
    private JPanel button_Panel;
    private JPanel main_Panel;


    public myGUI()
    {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) { }

        main_Frame = new JFrame();
        main_Frame.setTitle("Hallo");
        main_Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button_Panel = new JPanel();
        button_Panel.setBackground(Color.RED);
        button_Panel.setLayout(new BoxLayout(button_Panel, BoxLayout.Y_AXIS));

        Dimension dim = new Dimension(150, 50);

        add_Btn = new JButton("Add");
        add_Btn.setPreferredSize(dim);
        button_Panel.add(add_Btn);

        delete_Btn = new JButton("Delete");
        //delete_Btn.setSize(dim);
        button_Panel.add(delete_Btn);

        generate_Btn = new JButton("Generate");
        //generate_Btn.setMinimumSize(dim);
        button_Panel.add(generate_Btn);

        quit_Btn = new JButton("Quit");
        //quit_Btn.setBounds(quit_Btn.getBounds().x, quit_Btn.getBounds().y, 150, 50);
        button_Panel.add(quit_Btn);

        button_Panel.add(Box.createVerticalGlue());

        main_Panel = new JPanel();
        main_Panel.setLayout(new BoxLayout(main_Panel, BoxLayout.Y_AXIS));
        main_Panel.add(button_Panel);

        main_Frame.getContentPane().add(main_Panel);
        main_Frame.pack();
    }

    public void show()
    {
        main_Frame.setVisible(true);
    }

    public static void main(String[] args) {
        myGUI gui = new myGUI();
        gui.show();
    }
}
```


----------



## seux (1. Mrz 2012)

Ich hab deinen Code jetzt mal kopiert und bei mir eingefügt, aber das hat eigl nichts gebracht. Mein Add Button ist jetzt zwar größer und quadratisch, aber die Größe von 150 und 50 hat er dennoch nicht.

[EDIT]
Noch eine kleine korrektur: Die Höhe der Buttons lässt sich mit setPreferredSize verändern. Bei der Breite passt es sich immer an die Länge des Textes an. Wie kann ich das ändern?


----------



## Marco13 (1. Mrz 2012)

Zusätzlich noch die MinimumSize genauso setzen


----------



## bERt0r (1. Mrz 2012)

Ich glaube das ist einfach die Natur vom Boxlayout. In einem vertikalen Boxlayout werden nur die Höhen beim Layouten berücksichtigt. Probiers mit einem anderen Layoutmanager wie Gridbag,Group,Mig oder Formslayout.


----------



## Marco13 (1. Mrz 2012)

Das Verhalten des BoxLayouts ist da in manchen Punkten wirklich etwas eigenwillig, aber auf sowas wie How to Use BoxLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container) doch beshrieben: 


> When a BoxLayout lays out components from top to bottom, it tries to size each component at the component's preferred height. If the vertical space of the layout does not match the sum of the preferred heights, then BoxLayout tries to resize the components to fill the space. The components either grow or shrink to fill the space, with BoxLayout honoring the minimum and maximum sizes of each of the components. Any extra space appears at the bottom of the container.


----------

