JButton expanding to take up entire frame/container

26,053

Solution 1

You have to add the button to another panel, and then add that panel to the frame.

It turns out the BorderLayout expands what ever component is in the middle

Your code should look like this now:

Before

public static void main( String [] args ) {
    JLabel label = new JLabel("Some info");
    JButton button = new JButton("Ok");

    JFrame frame = ... 

    frame.add( label, BorderLayout.NORTH );
    frame.add( button , BorderLayout.CENTER );
    ....

}

Change it to something like this:

public static void main( String [] args ) {
    JLabel label = new JLabel("Some info");
    JButton button = new JButton("Ok");
    JPanel panel = new JPanel();
     panel.add( button );

    JFrame frame = ... 

    frame.add( label, BorderLayout.NORTH );
    frame.add( panel , BorderLayout.CENTER);
    ....

}

Before/After

Before http://img372.imageshack.us/img372/2860/beforedl1.png After http://img508.imageshack.us/img508/341/aftergq7.png

Solution 2

Or just use Absolute layout. It's on the Layouts Pallet.

Or enable it with :

frame = new JFrame();
... //your code here

// to set absolute layout.
frame.getContentPane().setLayout(null);

This way, you can freely place the control anywhere you like.

Share:
26,053
Michael Hoyle
Author by

Michael Hoyle

Updated on July 09, 2022

Comments

  • Michael Hoyle
    Michael Hoyle almost 2 years

    Hey everyone. I'm trying to make a swing GUI with a button and a label on it. im using a border layout and the label ( in the north field ) shows up fine, but the button takes up the rest of the frame (it's in the center field). any idea how to fix this?

  • Allain Lalonde
    Allain Lalonde over 15 years
    What's the default LayoutManger on the Panel then? FlowLayout?