【发布时间】:2013-05-27 06:39:10
【问题描述】:
由于某种原因,我添加到内容 JPanel 中的 JPanel 是垂直拉伸的,而不是首选尺寸。代码如下:
public static JPanel content;
public APP()
{
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setJMenuBar(new MenuBar());
content = new JPanel(new GridLayout(0, 8, 2, 2));
add(new JScrollPane(content, 22, 32), BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
addJPanel();
addJPanel();
}
public void addJPanel()
{
JPanel box = new JPanel();
box.setPreferredSize(new Dimension(100, 100));
box.setBackground(Color.BLACK);
content.add(box);
content.validate();
}
如何在添加它们时将它们保持在特定大小?或者至少防止它们在内容面板中一直延伸。我希望它们都保持相同的大小,而不会随着添加更多面板而改变它们的大小。
*注意: addJPanel() 允许我使用按钮或操作将新面板动态添加到内容面板中。它只是一种测试方法,真正的面板添加来自菜单按钮调用的动作。
【问题讨论】:
-
不要使用 BorderLayout,如果你不想让它伸展。也许切换到
GirdBagLayout这将使您的组件居中并保持其首选大小 -
@GuillaumePolet 嗯,JFrame上使用了BorderLayout,JPanel是使用GridLayout的,正在往里面添加东西,所以BorderLayout应该对它没有影响。但事实并非如此。如果我删除 BorderLayout 行,什么都不会改变。
-
@Guillaume Polet 没有错的建议,这个容器放置得很好,JFrame 和(在中心区域)JScrollPane 和/嵌套的 JPanel,最好的选择......
-
@mKorbel 我不明白你的意思。
-
@Noobacode 内容窗格的默认 LayoutManager 是 BorderLayout,因此删除行不会改变任何内容。试试
setLayout(new GridBagLayout());
标签: java swing layout awt jpanel