GridBagLayout中组件的大小不正确

时间:2013-04-07 20:59:23

标签: java swing resize gridbaglayout preferredsize

我在Java中创建一个简单的界面。我想拥有一个设置大小为200 * 20的JButton,并直接在它下面封装一个JTextArea的JScrollPane。此字段的大小应该是放置它的JPanel的剩余宽度和高度(但最小值为640 * 480),并且在使窗口变大/变小(直到其最小大小)时必须调整大小。

我尝试使用GridBagLayout进行此操作,但这似乎不起作用。有人知道如何解决这个问题吗?

    //Initialize components
    Dimension minSize = new Dimension(640, 480);
    info = new JTextArea("hello");
    info.setEditable(false);
    JScrollPane scrollPane = new JScrollPane(info);
    scrollPane.setMinimumSize(minSize);
    JButton update = new JButton("update");
    JPanel jp = new JPanel();
    jp.setLayout(new GridBagLayout());
    GridBagConstraints grid = new GridBagConstraints();

    //add components
    grid.fill = GridBagConstraints.NONE;
    grid.anchor = GridBagConstraints.NORTHWEST;
    grid.gridheight = 1;
    grid.gridwidth = 1;
    grid.weighty = 1.0;
    grid.weightx = 1.0;
    grid.gridx = 0;
    grid.gridy = 0;

    jp.add(update, grid);

    grid.fill = GridBagConstraints.BOTH;
    grid.gridx = 0;
    grid.gridy = 1;
    grid.weighty = 15;
    grid.gridheight = 15;
    grid.gridwidth = 15;

    jp.add(scrollPane, grid);

    this.add(jp,BorderLayout.NORTH);

这就是它现在的样子:enter image description here如前所述,这不是我想要的; TextArea需要填满整个屏幕(所以它需要更高)。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

this.add( jp, BorderLayout.CENTER );

按照指定in the documentation

  

根据组件的首选尺寸和组件布置组件   容器尺寸的限制。 NORTH和SOUTH组件   可以水平拉伸; EAST和WEST组件可能是   垂直拉伸; CENTER组件可以拉伸两者   水平和垂直填充上留下的任何空间。