我有一个关于向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);
答案 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发送完整的代码。