我有一个有关向 Java 框架添加组件的问题。
我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane。我想将这两个添加到 JFrame 中。
我可以将 JPanel 添加到 JFrame,或将 JScrollPane 添加到 JFrame,它们会正确显示。我无法将它们添加到 JFrame 并显示它们。
是否有与 JFrames 相关的东西不允许这样做?任何帮助将不胜感激。
编辑
问题不在于布局(至少我不认为是),问题在于 ScrollPane 未正确显示。 这是代码:
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
guiPanel.add(scrollPane, gbc);
guiPanel.add(buttons, gbc);
guiFrame.add(guiPanel, BorderLayout.CENTER);
guiFrame.setVisible(true);
默认情况下,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);
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 发送完整的代码。