5

電卓GUI用に2セットのボタンを配置しようとしています。それぞれがGroupLayoutを使用してそれらを作成します。1つは数字(および「。」)で、もう1つは操作ボタン用です。これは基本的には機能しますが、ボタンの1つが2倍の長さである場合(たとえば、操作セットの等しいボタン)、他のボタンがラインから外れます。例として設定された操作を使用します。2列と4行のボタンがあります。最後の行にはボタンが1つだけあります-等しい。この2倍の長さを両方の列にまたがって伸ばしたいと思います。現時点では、2番目の列をその上に配置するときに、2番目の列をその最後に沿ってプッシュするだけです。

レイアウトのコードは次のとおりです。operLayoutは操作のレイアウトの名前で、最初の行は左角かっこ、右角かっこ、2番目の行は+と-、3番目の行は*と/で、最後の行は同じです。各ボタンには、他の場所で最小サイズが設定されています(equalsが2倍の長さであることを除いて、すべて同じです)。

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。これは、何が起こっているのかを追跡する上で絶対に不可欠であることがわかりました.

報告された動作が見られる理由は、等号がボタンの最初の列と同じ水平方向の平行グループの一部であるためです。したがって、幅を 2 ​​倍にすると、2 列目のボタンが右に押し出されます。これはまさに、最初の並列グループ (列) にとどまるように指示しているためです。

必要な動作を得るには、そのボタンを他のボタンと並行して個別にレイアウトする必要があります。これを行うには、それを独自の並列グループに入れます。最良の動作を得るために、このグループにも調整を加えたいと思うでしょう。私GroupLayout.Alignment.CENTERはあなたが望むものだと思います。

また、コンポーネントが 1 つしかない場合は、新しいグループを作成する必要がないことに注意してください。代わりにそのコンポーネントを追加するだけです。

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 に答える