Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java : divide the screen

I try to do a simple swing window, but with the layout it's not easy... I mean I just want a window with 3 panels :

  • header with 20% of window in height
  • content with 60% of window in height
  • footer with 20% of window in height

But I can't succeed to have what I want. I used a gridLayout(3,1) but I can't specify the height.

public class Window extends JFrame implements Serializable  {
private JPanel _header;
private JPanel _content;
private JPanel _footer;

public Window() {
    GridLayout grid = new GridLayout(3,1);
    setLayout(grid);

    _header = new JPanel();
    _header.setBackground(Color.GRAY);
    getContentPane().add(_header);

    _content = new JPanel();
    JScrollPane jsp = new JScrollPane(_content, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
    getContentPane().add(jsp);

    _footer = new JPanel();
    _footer.setBackground(Color.GRAY);
    getContentPane().add(_footer);
    pack();
    validate();

    setTitle("Chat client");
    setVisible(true);
    setSize(500, 500);
    setLocationRelativeTo(null);
}

Can you help me ? Best regards

like image 271
zed13 Avatar asked Sep 12 '26 16:09

zed13


1 Answers

GridBagLayout is capable of dividing vertical or horizontal space proportionally.

Here's an example that displays a red JPanel in the top 20% of a window, a green JPanel in the middle 60%, and a blue JPanel in the bottom 20%:

    JFrame window = new JFrame();

    window.setLayout(new GridBagLayout());

    JPanel top = new JPanel(), middle = new JPanel(), bottom = new JPanel();
    top.setBackground(Color.red);
    middle.setBackground(Color.green);
    bottom.setBackground(Color.blue);

    GridBagConstraints c = new GridBagConstraints();
    // we want the layout to stretch the components in both directions
    c.fill = GridBagConstraints.BOTH;
    // if the total X weight is 0, then it won't stretch horizontally.
    // It doesn't matter what the weight actually is, as long as it's not 0,
    // because the grid is only one component wide
    c.weightx = 1; 

    // Vertical space is divided in proportion to the Y weights of the components
    c.weighty = 0.2;
    c.gridy = 0;
    window.add(top, c);
    // It's fine to reuse the constraints object; add makes a copy.
    c.weighty = 0.6;
    c.gridy = 1;
    window.add(middle, c);
    c.weighty = 0.2;
    c.gridy = 2;
    window.add(bottom, c);


    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setVisible(true);

Result:

enter image description here

like image 150
user253751 Avatar answered Sep 15 '26 06:09

user253751



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!