将JScrollPane添加到JFrame

3

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

我有一个JPanel,里面有两个按钮和一个带有一个JTable的JScrollPane。我想将它们都添加到JFrame中。

我可以将JPanel添加到JFrame中,或者将JScrollPane添加到JFrame中,它们都能正确显示。但是我尝试将它们同时添加到JFrame中并显示它们时遇到了麻烦。

是与JFrames相关的问题吗?任何帮助将不胜感激。

编辑

问题不在于布局(至少我认为不是),问题在于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);

1
  1. 为了更快得到帮助,请发布一个SSCCE
  2. 请学习常见的Java命名约定(特别是用于类、方法和属性名称的大小写),并保持一致地使用它们。
  3. 不要设置顶级容器的大小。而是布局内容并调用pack()
  4. 对于框架定位,不能使用setLocationByPlatform(true)。请参考此答案进行演示。
- undefined
2个回答

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

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的完整代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接