2

我有一个关于将组件添加到 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);
4

2 回答 2

3

默认情况下,JFrame 具有边框布局。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);
于 2013-05-12T11:04:02.740 回答
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 发送完整的代码。

于 2013-05-12T12:23:57.460 回答