0

私は GridBagLayout で JDialog を使用しています。このレイアウトはコンテナーとコンポーネントのサイズを自動的に決定するため、setSize は何も使用していません。ただし、GUI を描画すると、コンテナーが不必要に引き伸ばされているように見えます。

GridBagLayout がコンテナのサイズを「必要なだけ」にしないのはなぜですか? 基本的に、ダイアログのサイズをテーブルと同じくらい大きくしたいです。コード スニペットは次のとおりです。

public class GridBagLayoutTester  
{

public static void main(String[] args)

{

JDialog mDialog = new JDialog();

    JPanel panel1 = new JPanel();
    panel1.setLayout(new GridBagLayout());

    // Create a table to be added to the panel
    JTable table = new JTable(4,4);
    JScrollPane scrollpane = new JScrollPane(table);
    scrollpane.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 5));

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = gbc.gridy = 0;
    gbc.fill = GridBagConstraints.NONE;
    gbc.anchor = GridBagConstraints.FIRST_LINE_START;

    // Add table to the panel
    panel1.add(scrollpane, gbc);

    mDialog.add(panel1, BorderLayout.CENTER);

    // Display the window.
    mDialog.pack();
    mDialog.setVisible(true);
  }  
}
4

1 に答える 1

0

デフォルトのサイズが希望どおりでない場合は、コンポーネントの優先サイズを設定する必要があります。

プログラムを変更して、次の行を追加します。

    // Display the window.
    mDialog.pack();
    Dimension d = table.getPreferredSize();
    d.width += 16;
    d.height += 10;
    scrollpane.setPreferredSize(d);
    mDialog.pack();
    mDialog.setVisible(true);

16 の追加の幅は、境界線と垂直スクロール バーに対応します。

10 の追加の高さは、境界線に対応します。

于 2012-08-09T16:22:34.587 に答える