我搜索了相当数量,我找不到一个好的,简单的答案来解决这个问题。
我想要一个盒子布局(superPanel),它包含一个上部和下部JPanel(mainPanel和footerPanel)。鞋面将包含更多的JPanels(leftPanel和rightPanel)。
考虑下面的代码,我发现当我调整窗口大小时,mainPanel会变大,页脚也会变大。页脚应始终保持相同的大小,位于主面板下方,框架底部。
frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
JPanel superPanel = new JPanel();
JPanel mainPanel = new JPanel();
JPanel leftPanel = new JPanel();
JPanel rightPanel= new JPanel();
JPanel footerPanel = new JPanel();
footerPanel.setBackground(Color.GREEN);
mainPanel.setBackground(Color.RED);
mainPanel.add(leftPanel);
mainPanel.add(rightPanel);
mainPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
leftPanel.add(new JButton("left"));
rightPanel.add(new JButton("right"));
footerPanel.add(new JButton("footer"));
container.add(mainPanel);
container.add(footerPanel);
frame.add(container);
frame.pack();
frame.setVisible(true);
有人知道为什么会这样吗?如果你运行它,你会发现当窗口调整大小时,红色和绿色都会增大。我想看到的是红色变大,而绿色仍然是相同的大小。
胶水不起作用,我不想使用GridBagLayout,除非我必须(请解释为什么我应该如果需要)
由于
答案 0 :(得分:0)
尝试使用GridBagLayout,其中fill.BOTH,weightx = 1,weighty = 1表示主面板,fill.NONE,weightx = 0,weighty = 0表示页脚面板或使用Miglayout这真的很简单,有了它,你可以做你想做的一切。
答案 1 :(得分:0)
如果你想要一个不改变大小的“主”部分和侧面部分,你通常需要一个BorderLayout:
container.setLayout(new BorderLayout());
container.add(mainPanel, BorderLayout.CENTER);
container.add(footerPanel, BorderLayout.PAGE_END);
答案 2 :(得分:0)
BorderLayout就是你想要的容器,将mainPanel添加到中心,将footerPanel添加到南方。尝试对代码进行以下更改:
frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel container = new JPanel();
container.setLayout(new BorderLayout()); // Use BorderLayout instead of BoxLayout
JPanel superPanel = new JPanel();
JPanel mainPanel = new JPanel();
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
JPanel footerPanel = new JPanel();
footerPanel.setBackground(Color.GREEN);
mainPanel.setBackground(Color.RED);
mainPanel.add(leftPanel);
mainPanel.add(rightPanel);
mainPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
leftPanel.add(new JButton("left"));
rightPanel.add(new JButton("right"));
footerPanel.add(new JButton("footer"));
container.add(mainPanel, BorderLayout.CENTER); // Add mainPanel to the central area
container.add(footerPanel, BorderLayout.SOUTH); // Add footePanel to the bottom
frame.add(container);
frame.pack();
frame.setVisible(true);
BorderLayout确定添加到CENTER区域的组件将水平和垂直展开以跟随容器。 SOUTH区域只能水平扩展,而EAST和WEST只能垂直扩展。请记住,每个布局管理器类都有自己的规则,如何在组件之间划分容器空间以及如何调整它们的大小。