Java使用grouplayout对齐3个面板

标签 java swing layout-manager grouplayout

我无法让我的 3 个面板正确对齐。 我基本上有 1 个大面板和 2 个较小(不一定相同)的面板。 大的在左边,2 个小的在右边,一个在另一个上面。组件应保持可动态调整大小。

我要的是这个(9是大的,1是小的,2是小的):

999999 111
999999 111
999999 111
999999 222
999999 222

我得到的是这样的:

999999 111
999999 111
999999 111
999999 
999999 
       222
       222

我的代码如下,大的是 graphsimscrollpane,小的是 workpanel 和 informationpanel:

    private void createLayout(GroupLayout groupLayout) {
    groupLayout.setHorizontalGroup(
            groupLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(graphSimScrollPane,  0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap(20, Short.MAX_VALUE)
                .addGroup(groupLayout.createParallelGroup(Alignment.CENTER)
                        .addComponent(workPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(informationPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        groupLayout.setVerticalGroup(
            groupLayout.createSequentialGroup()
                .addGroup(groupLayout.createParallelGroup(Alignment.CENTER)
                    .addComponent(graphSimScrollPane,  0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(workPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addComponent(informationPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        guiFrame.getContentPane().setLayout(groupLayout);
}

最佳答案

GroupLayout 的基本结构类似于以下代码:

    JPanel pnl = new JPanel();
    GroupLayout l = new GroupLayout(pnl);
    pnl.setLayout(l);

    JButton b1 = new JButton("1");
    JButton b2 = new JButton("2");
    JButton b3 = new JButton("3");

    l.setHorizontalGroup(
            l.createSequentialGroup()
                .addComponent(b1)
                .addGroup(l.createParallelGroup()
                    .addComponent(b2)
                    .addComponent(b3)));

    l.setVerticalGroup(
            l.createParallelGroup()
                .addComponent(b1)
                .addGroup(l.createSequentialGroup()
                    .addComponent(b2)
                    .addComponent(b3)));

    JFrame f = new JFrame("test");
    f.setContentPane(pnl);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(1024, 768);
    f.setVisible(true);

用简单的英语来说,横轴上的约束是“b1,然后是平行的 b2 和 b3”。纵轴上的约束为“b1 与由 b1 然后 b2 组成的组平行”。

显然,这里缺少可调整大小属性。您需要提供更多详细信息,说明您希望组件如何根据其大小进行操作。

一种可能性是为两个小组件提供整个垂直空间,但只为它们提供首选的水平空间。当然,给大组件剩余的空间。

    l.setHorizontalGroup(
            l.createSequentialGroup()
                .addComponent(b1, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(l.createParallelGroup()
                    .addComponent(b2, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                    .addComponent(b3, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)));

    l.setVerticalGroup(
            l.createParallelGroup()
                .addComponent(b1, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(l.createSequentialGroup()
                    .addComponent(b2, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(b3, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

请注意,结构与第一个代码相同,只是添加了尺寸参数。

关于Java使用grouplayout对齐3个面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876159/

相关文章:

java - 在 Java 中将时间戳转换为日历

java - 在 JOptionPane 中对齐字符串

java - 使用 Swing 创建列表和列表项的操作

java - 如果数据从 cellrenderer 更改,如何在列调整后计算 jTable 宽度和高度

java - 从 map 同步设置还是从同步 map 设置?

java - 数组列表 java 错误

java - Webjars 定位器不适用于基于 XML 的 Spring MVC 4.2.x 配置?

java - 如何修复 JScrollPane 内 JEditorPane 的高度?

java - 必需的空布局,用于绘图 + 标签

java - CardLayout的卡片显示顺序是随机的吗?