如何使用BoxLayout使组件在JPanel中顶部对齐?

3
我正在开发一款名为GalaxyWar的游戏,我正在尝试制作地图选择菜单。我发现一个问题,当我在使用一个具有setAlignmentX(CENTER_ALIGNMENT)的JPanel上的BoxLayout.Y_AXIS时,分配了大小的子组件(JPanel)占用了面板的整个高度(全部在一起),而不是分配的高度!
以下是我的代码:
scrollPane = new JScrollPane();
    scrollPane.setBounds(160, 11, 452, 307);
    add(scrollPane);

    mapContainer = new JPanel();
    mapContainer.setAlignmentX(CENTER_ALIGNMENT);
    mapContainer.setAlignmentY(JPanel.TOP_ALIGNMENT);
    mapContainer.setLayout(new BoxLayout(mapContainer, BoxLayout.Y_AXIS));
    scrollPane.setViewportView(mapContainer);

    JPanel demoPanel = new JPanel();
    demoPanel.setLayout(null);
    demoPanel.setBackground(Color.YELLOW);
    demoPanel.setSize(50, 100);
    mapContainer.add(demoPanel);

我已经对此进行了长时间的研究,但迄今为止还没有找到任何解决方案。


1
scrollPane.setBounds(160, 11, 452, 307); 这是为了实现什么功能?Java GUI 可能需要在多个平台上工作,在不同的屏幕分辨率和使用不同的 PLAF。因此,它们不利于组件的精确放置。为了组织健壮的 GUI 组件,可以使用布局管理器或它们的组合,以及布局填充和边框来创建空白间隔。..(续) - Andrew Thompson
  1. demoPanel.setSize(50, 100); 参见Java Swing中是否应避免使用set(Preferred|Maximum|Minimum)Size方法? (是的。)3) 为了更快地获得更好的帮助,请发布一个MCVE(最小完整可验证示例)。
- Andrew Thompson
我的ScrollPane放置在另一个使用绝对布局的JPanel上,这就是我使用setBounds()方法的原因! - Victor2748
2
我的ScrollPane放置在另一个使用绝对布局的JPanel上,它们都需要修复(而不是调整)。 - Andrew Thompson
2
我调查了很多网站,没有找到帮助。所有的网站都建议不要使用空布局。 - camickr
此外,请查看教程中相关部分,引用链接在此 - trashgod
1个回答

0

尝试检查一下

setPreferredSize() 
setMaximumSize()
setMinimumSize()

将所有3个元素设置为相同的值。

如果仍然无法正常工作,您可以尝试将要设置大小的面板放置在另一个面板中,并将其固定。



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