java - 如何将组件堆叠在另一个组件上以便它们保持垂直尺寸?

标签 java swing layout jpanel layout-manager

我有一个父 JPanel,其子组件堆叠在另一个 JPanel 上。然而,它们并没有像我想要的那样调整大小:

This is how it should be

This is what I get

代码:

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/

相关文章:

java - 如何在多线程中下载文件并合并所有段?

java - JFormattedTextField 是在焦点上添加字符

java - 如何通过单击不同包中的按钮打开另一个jframe

android - 如何以编程方式创建布局文件

html - 将 <br> 放在水平 <ul> 中会破坏它吗?

java - JComponent 的运行时对齐 + 链接到 RowFilters

java - java应用程序用户如何在网络上修改/更新应用程序文件?

java - 如何将 Open GL ES 2.0 应用程序转换为动态壁纸?

java - 在 Java 中查找 2d n*n 矩阵的逆矩阵?

java - 这是不好的做法吗?多个 Graphics2D 对象