将JScrollPane添加到JFrame

时间:2013-05-12 07:46:37

标签: java swing jframe jscrollpane

我有一个关于向Java框架添加组件的问题。

我有一个带有两个按钮的JPanel,还有一个添加了JTable的JScrollPane。我想将这两个添加到JFrame。

我可以将JPanel添加到JFrame,或者将JScrollPane添加到JFrame,它们可以正确显示。我无法将它们添加到JFrame并同时显示它们。

是否有与JFrame相关的内容不允许这样做?任何帮助将不胜感激。

修改

问题不在于布局(至少我认为不是这样),问题是ScrollPane没有正确显示。这是一张显示我的意思的图片:

http://canning.co.nz/Java/ScrollPane.png

以下是代码:

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    guiPanel.add(scrollPane, gbc);
    guiPanel.add(buttons, gbc);        

    guiFrame.add(guiPanel, BorderLayout.CENTER);
    guiFrame.setVisible(true);

2 个答案:

答案 0 :(得分:3)

默认情况下,JFrame具有Borderlayout。 BorderLayout有五个标志。当您不指定任何标志时,它会将您的组件添加到具有中心标志的帧。如果没有使用组件指定其他标志,则中心标志将所有空间分配给添加了中心标志的组件。有关边框布局的更多信息,请访问以下链接: http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

您可以使用以下语句添加两者:

JFrame frame = new JFrame();

frame.add(new JPanel(), BorderLayout.NORTH);

frame.add(new JScrollpane(), BorderLayout.CENTER);

答案 1 :(得分:1)

GridBagLayout不适合这种情况。使用较少的代码,您可以获得所需的代码。

JPanel pnlButton = new JPanel(new FlowLayout(FlowLayout.CENTER));
pnlButton.add(button1);
pnlButton.add(button2);

JFrame frame = new JFrame();
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(pnlButton, BorderLayout.PAGE_END);

如果你只想使用Gridbaglayout。然后你必须设置weightX,weightY,gridwidth和其他属性

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx=1.0;
gbc.weighy=1.0;
gbc.fill = GridBagConstraints.BOTH;
guiPanel.add(scrollPane, gbc);
gbc.gridwidth = 1;
gbc.fill = GridBagConstraints.NONE
guiPanel.add(buttons, gbc);        
guiFrame.add(guiPanel, BorderLayout.CENTER);
guiFrame.setVisible(true);

请尝试让我知道,如果它不起作用,我将使用GridBaglayout发送完整的代码。