我有一个父 JPanel,其子组件堆叠在另一个 JPanel 上。然而,它们并没有像我想要的那样调整大小:
代码:
public class LayoutTest extends JFrame {
public LayoutTest() {
setVisible(true);
setSize(new Dimension(500, 500));
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
for (int i = 0; i < 2; i++) {
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(500, 50));
panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panel.setBackground(Color.red);
getContentPane().add(panel);
}
}
public static void main(String[] args) {
LayoutTest layoutTest = new LayoutTest();
}
}
问题主要在于组件在不应该垂直调整大小的情况下。我希望它们保持垂直尺寸,但他们不会。我尝试过多种布局,例如GridBagLayout、FlowLayout、BoxLayout,但都不起作用。
我最好的尝试是使用 BoxLayout:
简单地说:container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS);
然后container.add(component1)
...
感谢任何帮助。
camickr 的工作解决方案:
public class LayoutTest extends JFrame {
public LayoutTest() {
setVisible(true);
setSize(new Dimension(500, 500));
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
for (int i = 0; i < 2; i++) {
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(500, 50));
panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panel.setBackground(Color.red);
container.add(panel, BorderLayout.PAGE_START);
}
getContentPane().add(container, BorderLayout.NORTH);
}
public static void main(String[] args) {
LayoutTest layoutTest = new LayoutTest();
}
}
最佳答案
当空间可用时,BoxLayout 会将组件增大到最大尺寸。
当您将面板添加到框架时,不是将其添加到 CENTER(这将允许面板增长),而是将其添加到 PAGE_START,这将尊重高度:
JPanel north = new JPanel();
north.setLayout( new BoxLayout(north, BoxLayout.PAGE_AXIS) );
// add loop to add panels to the "north" panel
add(north, BorderLayout.PAGE_START);
另一种解决方案是使用框布局将面板包装到另一个面板中。
JPanel panel = new JPanel();
panel.setLayout( new BoxLayout(panel. BoxLayout.PAGE_AXIS) );
// create your loop to add child panels
JPanel wrapper = new JPanel(); // uses FlowLayout by default which respects the preferred size.
wrapper.add( panel );
frame.add( wrapper );
关于java - 如何将组件堆叠在另一个组件上以便它们保持垂直尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59074074/