我正在使用GridLayout创建一个图形用户界面,以安排多个使用FlowLayout的面板。 我使用pack来确定框架的大小。 如果我只有一个TextArea,那么它的大小就会正确。 如果我只有其他组件,那么它的大小就会正确。 但是如果我在下面的代码中同时使用p1和p2,那么带有按钮的面板的大小就不会正确。 我正在使用的测试代码如下。 如果我只使用p1或p2,它的大小是正确的,但不与两个。 这是我得到的图片 我不希望在按钮和文本框之间有多余的空间。 如果我只用textarea,它的大小是正确的。
public class GUIPractice extends JFrame
{
//declare GUI objects
JPanel panel;
JPanel p1, p2;
JButton btnAdd, btnShow;
JScrollPane js;
JTextArea taOutput;
//constructor
public GUIPractice()
{
//give frame a title
setTitle("GUI Practice");
panel =new JPanel(new GridLayout(0, 1));
btnAdd = new JButton("Add");
btnShow = new JButton("Show");
taOutput = new JTextArea(10, 20);
js = new JScrollPane(taOutput, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
p1 = new JPanel();
p1.add(btnAdd);
p1.add(btnShow);
p2 = new JPanel();
p2.add(js);
panel.add(p1);
panel.add(p2);
//add the panel to the frame
add(panel);
}
public static void main(String[] args)
{
GUIPractice frame = new GUIPractice();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
它的大小是正确的。框的 GridLayout
意味着所有单元格的大小都是一样的。由于文本区域比按钮大,你会看到包含按钮的面板有额外的空间。
我建议你只使用默认的 BorderLayout
的框架。
你的 "面板 "不需要使用GridLayout。
你只要使用。
add(p1, BorderLayout.PAGE_START);
add(p2, BorderLayout.CENTER);
现在p1和p2就会有合适的高度了。
另外,真的不需要 "p2"。你可以直接将滚动面板添加到框架中。