Java : divide the screen

标签 java swing layout grid-layout

我尝试做一个简单的 Swing 窗,但布局并不容易... 我的意思是我只想要一个有 3 个面板的窗口:

  • 标题占窗口高度的 20%
  • 内容占窗口高度的 60%
  • 页脚占窗口高度的 20%

但我无法成功拥有我想要的东西。我使用了 gridLayout(3,1) 但无法指定高度。

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);
}

你能帮帮我吗? 最好的问候

最佳答案

GridBagLayout 能够按比例划分垂直或水平空间。

这是一个示例,它在窗口的前 20% 处显示一个红色的 JPanel,在中间的 60% 处显示一个绿色的 JPanel,在窗口的中间 60% 处显示一个蓝色的 JPanel 在后 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);

结果:

enter image description here

关于Java : divide the screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28425321/

相关文章:

java - https websockets (wss) 上的巨大延迟

java - Swing 形式被卡住

wpf - 标题未显示在 WPF ListView 中

java - 从终端编译时,Swing GUI 出现 IntelliJ 错误 "contentPane cannot be set to null."

css - 自定义 denied.gsp 样式不呈现

CSS左侧菜单布局问题

java - 我的 java 程序中有多少个线程正在运行?

java - Java 中的对象内的对象

java - 有没有办法增加netty中的DNS缓存TTL?

java - 多个按钮和多个监听器执行各种操作 Java Swing