GridBagLayout如何确定容器的大小

时间:2012-08-06 08:04:07

标签: java swing gridbaglayout

我正在使用带有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);
  }  
}

1 个答案:

答案 0 :(得分: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的额外高度适应边界。