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 回答