mazin
mazin

Reputation: 242

how can i set the size of two JPanel in one JFrame?

how can i modify the size of the panel in the JFrame

am doing a calculator, the first panel will hold the JTextField which i suppose to be small the second panel will hold the JButtons which suppose to be bigger

JFrame frame = new JFrame(new GridLayout(2, 1));

JPanel panel1 = new JPanel();
JPanel panel2 = new JPabel();

frame.add(panel1);
frame.add(panel2);

i've been trying to make panel1 smaller than panel2 yet nothing worked!

Upvotes: 0

Views: 578

Answers (1)

PakkuDon
PakkuDon

Reputation: 1615

GridLayout would not be an appropriate choice in this scenario since it ignores the preferred sizes of the components inside the container and displays them all at an equal size instead.

I'd suggest using a BorderLayout. You can find a demonstration and description of that layout manager as well as a few others in Oracle's tutorial, A Visual Guide to Layout Managers.

Here's another example using BorderLayout which might be more relevant to your problem.

import java.awt.*;
import javax.swing.*;

public class Test {
    public static void main(String []args){
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame();

                JPanel panel1 = new JPanel();
                JPanel panel2 = new JPanel();

                panel1.setBorder(BorderFactory.createTitledBorder("Panel 1"));
                panel2.setBorder(BorderFactory.createTitledBorder("Panel 2"));

                frame.add(panel1, BorderLayout.NORTH);
                frame.add(panel2, BorderLayout.CENTER);

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(new Dimension(200, 200));
                frame.setVisible(true);
            }
        });
    }
}

Edit: The JFrame's content pane uses a BorderLayout by default, hence the absence of a call to setLayout. Source

Upvotes: 1

Related Questions