1

次のサイズ変更可能な JPanel を作成しようとしています。

+-----------------------+
|                       |
|                       |
|                       |
|                       |
|                       |
|     JScrollPane       |
|     (containing a     |
|        JTable)        |
|                       |
|                       |
|                       |
|                       |
|                       |
+-----------+-----------+
|  button1  |    b2     |
+-----------+-----------+

button1 と b2 を常に同じ幅にしたい。つまり、コンポーネント全体が水平方向にサイズ変更された場合、両方のボタンが同じ幅を獲得または喪失する必要があります。ボタン自体の間、またはボタンとパネルの境界線の間にスペースがあってはなりません。つまり、ボタンは常に使用可能なすべての水平方向のスペースを占有する必要があります。ボタンのテキストの長さが異なることに注意してください。

コンポーネントが垂直方向にサイズ変更された場合、JScrollPane に新しい高さを取得させたいのですが、ボタンのある行は常に同じ高さ (本質的にbutton1.getPreferedSize().getHeight()) のままにする必要があります。

私はさまざまな LayoutManagers をたくさん試しました。最も近いのは、2 つのボタンを新しい JPanel に配置し、そのパネルの LayoutManger を に設定することでした new GridLayout(0,2)。これにより、少なくとも両方のボタンの幅が均一に維持され、すべての水平スペースが埋められました。ただし、パネルのサイズを縦方向に変更すると、高さが変わります。

GroupLayout などの他の LayoutManager では、ボタン ( groupLayout.linkSize(button1, b2)) をリンクすることで同じ幅を維持できましたが、水平方向のスペース全体を埋めることができませんでした。

これを達成するための最良の方法と、どの LayoutManager を使用する必要がありますか?

4

1 に答える 1

3

MigLayoutを確認することを強くお勧めします。非常に柔軟で使いやすいレイアウトマネージャーです。

それを使用したくない場合は、BorderLayout を使用して JPanel を作成し、スクロールペインを BorderLayout の中央に配置することをお勧めします。次に、1 行 2 列の GridLayout を持つ別の JPanel を作成し、それに両方のボタンを追加します。次に、ボーダーレイアウトを使用して、そのパネルを JPanel の南の領域に追加します。

コードは次のようになります。

    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BorderLayout());

    JPanel tablePanel = new JPanel();
    JScrollPane jsp = new JScrollPane(new JTable());
    tablePanel.add(jsp);
    mainPanel.add(jsp, BorderLayout.CENTER);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(1, 2));
    JButton button1 = new JButton("Button 1");
    JButton button2 = new JButton("Button 2");
    buttonPanel.add(button1);
    buttonPanel.add(button2);
    mainPanel.add(buttonPanel, BorderLayout.SOUTH);

    this.add(mainPanel);
于 2012-07-16T18:25:43.387 に答える