gpt4 book ai didi

java - 将面板放在 JLabel 背景之上 (Java)

转载 作者:行者123 更新时间:2023-12-01 09:24:54 25 4
gpt4 key购买 nike

我一直在互联网上搜索,但毫无结果,人们的建议似乎对我没有任何效果。

我有一个 JFrame,我正在尝试将 JPanel 放入其中。理想情况下,该 JPanel 应该有一个 JLabel,以图像图标作为背景,并在前台其自己的 Jpanel 中包含一组按钮。问题是我见过的每种类型的布局管理器都无法像广告中那样工作。到目前为止,我得到的最好的工作是这种方法:

public MenuBackgroundPanel(AsteroidsFrame frame)
{
this.gameFrame = frame;

this.setLayout(new OverlayLayout(this));
ImageIcon image = new ImageIcon(getClass().getResource("/resources/background1.gif"));
imageLabel = new JLabel(image, JLabel.CENTER);
mp = new MainMenuPanel(gameFrame);
mp.setMaximumSize(new Dimension(300,200));

this.add(mp);
this.add(imageLabel);

this.setVisible(true);
}

不幸的是,我遇到了非常奇怪的对齐方式,并尝试在背景上设置位置(实际上让它从 JFrame 的 (0,0) 开始,或者移动按钮面板似乎没有效果。打印位置每个对象的 表示它们都位于 (0,0) 但我将链接的图像显示情况并非如此。我的观点是,我尝试过 JLayeredPane 或将 JLabel 设置为 Jframe 的内容 Pane 并使其透明,但似乎没有任何作用。两个对象中的一个或另一个只是完全覆盖另一个。

http://i.imgur.com/ll5Y3j5.png

正如您所看到的,对象根本没有对齐。谁能帮我解决这个问题吗?

最佳答案

That JPanel ideally would have a JLabel with an imageicon as the background and a set of buttons in its own Jpanel in the foreground

当子面板完全包含在标签图像中时,最简单的方法是设置 JLabel 的布局管理器,然后将组件添加到标签中。

JLabel background = new JLabel( new ImageIcon(...) );
background.setLayout( new GridBagLayout() );
JPanel buttons = new JPanel();
buttons.setOpaque( false );
buttons.add(...);
background.add(buttons, new GridBagConstraints() );

现在按钮面板将位于标签的中心。

As you can see the objects are not at all aligned

如果您想使用OverlayLayout,那么您需要使用每个组件的alignmentX/Y 属性。您可能希望将它们都设置为 .5。查看:Java Layout with Component always in Top Right有关更改这些值如何影响布局的示例。

关于java - 将面板放在 JLabel 背景之上 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39920755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com