5

我正在尝试为计算器 GUI 安排两组按钮。每个人都使用 GroupLayout 来制作它们。一组是数字(和“.”),另一组是操作按钮。这基本上是可行的,但如果其中一个按钮的长度是双倍的(例如我的操作集上的等号按钮),它会使其他按钮不符合要求。我将以操作集为例。有两列四行按钮。最后一行只有一个按钮 - 等于。我想让这个双倍长度延伸到两列。目前,当我希望第二列放在它上面时,它只是将第二列推到它的末尾。

这是布局的代码 - operLayout 是操作的布局名称,第一行是左右括号,第二行是 + 和 -,第三行是 * 和 /,最后一行是等于。每个按钮在其他地方都有一个 minimumSize 设置(它们都是相同的,除了 equals 是两倍长)。

operLayout.setAutoCreateGaps(true);
operLayout.setAutoCreateContainerGaps(true);
operLayout.setVerticalGroup(operLayout
        .createSequentialGroup()
        .addGroup(
operLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(leftBracket)
                            .addComponent(rightBracket))
            .addGroup(operLayout.createParallelGroup().addComponent(add).addComponent(subtract))
            .addGroup(operLayout.createParallelGroup().addComponent(multiply).addComponent(divide))
            .addGroup(operLayout.createParallelGroup().addComponent(equals)));
    operLayout.setHorizontalGroup(operLayout
            .createSequentialGroup()
            .addGroup(
                    operLayout.createParallelGroup().addComponent(leftBracket).addComponent(add)
                            .addComponent(multiply).addComponent(equals))
            .addGroup(
                    operLayout.createParallelGroup().addComponent(rightBracket).addComponent(subtract)
                            .addComponent(divide)));

我理解为什么会发生这种情况,但我不确定如何解决。有简单的方法吗?还是我应该改变我做事的方式?谢谢

4

1 回答 1

3

equals组件放在其自己的平行水平组中。

首先,确保在使用GroupLayout. 我发现这对于跟踪正在发生的事情绝对至关重要。

您看到您报告的行为的原因是因为等号与第一列按钮属于同一水平平行组的一部分。因此,当您将其设置为双倍宽度时,它会将第二列按钮推到右侧。这正是您告诉它要做的事情,因为您告诉它留在第一个并行组(列)中。

为了获得您想要的行为,您必须单独布局该按钮,与其他按钮平行。为此,您可以将其放入自己的并行组中。为了获得最佳行为,您可能还想对该组进行对齐。我想GroupLayout.Alignment.CENTER这就是你想要的。

另请注意,如果其中只有一个组件,则无需创建新组。只需添加该组件即可。

operLayout.setVerticalGroup(operLayout.createSequentialGroup()
    .addGroup(operLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
        .addComponent(leftBracket)
        .addComponent(rightBracket))
    .addGroup(operLayout.createParallelGroup()
        .addComponent(add)
        .addComponent(subtract))
    .addGroup(operLayout.createParallelGroup()
        .addComponent(multiply)
        .addComponent(divide))
    .addComponent(equals));
operLayout.setHorizontalGroup(operLayout.createParallelGroup()
    .addGroup(operLayout.createSequentialGroup()
        .addGroup(operLayout.createParallelGroup()
            .addComponent(leftBracket)
            .addComponent(add)
            .addComponent(multiply))
        .addGroup(operLayout.createParallelGroup()
           .addComponent(rightBracket)
           .addComponent(subtract)
           .addComponent(divide)))
    .addComponent(equals));
于 2012-12-19T18:41:09.647 回答