Thursday, March 3, 2011

JButton expanding to take up entire frame/container

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?

From stackoverflow
  • Use BoxLayout.

  • 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 After

    Allain Lalonde : What's the default LayoutManger on the Panel then? FlowLayout?
    OscarRyz : FlowLayout, that's correct.
  • awsome! thanks alot.

  • Again :)

    
        import javax.swing.*;
    
        public class TestFrame extends JFrame {
            public TestFrame() {
                JLabel label = new JLabel("Some info");
                JButton button = new JButton("Ok");
                Box b = new Box(BoxLayout.Y_AXIS);
                b.add(label);
                b.add(button);
                getContentPane().add(b);
    
            }
            public static void main(String[] args) {
                JFrame f = new TestFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setLocationRelativeTo(null);
                f.setVisible(true);
    
            }
        }
    

0 comments:

Post a Comment