gpt4 book ai didi

java - JLabel 位于另一个 JLabel 之上?

转载 作者:行者123 更新时间:2023-12-02 05:50:28 26 4
gpt4 key购买 nike

我目前正在尝试将 tabIconLabels(即 JLabels)放在更大的 JLabel(tabAreaLabel)上(所有标签都附加有 ImageIcon)。我尝试使用 OverlayLayout 但 tabIconLabels 的位置不在正确的位置。我还尝试将 tabAreaLabel 的 LayoutManager 设置为 null,然后为所有 tabIconLabels 设置 setBounds 方法,但这也不起作用。 tabIconLabels 全部集中在一个随机位置,我不确定为什么。我也希望不使用 g.drawImage 方法,只是因为我希望在不久的将来删除 JLabels。

public GamePanel(final Player player) {
super(null);
this.setMemory(Memory.LOW);
this.setRevisionType(RevisionType.THREE_ONE_SEVEN);
this.setPlayer(player);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.requestFocusInWindow();
this.setFocusable(true);
final ChatBox chatBox = this.getPlayer().getChatBoxSystem().getChatBox();
final MapArea mapArea = this.getPlayer().getMapSystem().getMapArea();
final TabArea tabArea = this.getPlayer().getTabAreaSystem().getTabArea();
// final Compass compass = this.getPlayer().getCompass();
final JLabel chatBoxLabel = chatBox.getImageLabel();
this.add(chatBoxLabel);
final JLabel mapAreaLabel = mapArea.getImageLabel();
this.add(mapAreaLabel);
final JLabel tabAreaLabel = tabArea.getImageLabel();
this.add(tabAreaLabel);
chatBoxLabel.setBounds(chatBox.getLocation().getX(), chatBox.getLocation().getY(), 519, 165);
mapAreaLabel.setBounds(mapArea.getLocation().getX(), mapArea.getLocation().getY(), 246, 168);
tabAreaLabel.setBounds(tabArea.getLocation().getX(), tabArea.getLocation().getY(), 250, 338);
final short[] xLocation = {
549, 574, 605, 635, 673, 704, 730, 577, 605, 637, 674, 705, 732
};
final short[] yLocation = {
176, 175, 175, 173, 175, 175, 175, 471, 471, 472, 470, 470, 470
};
final short[] width = {
20, 25, 22, 30, 25, 24, 24, 24, 24, 27, 26, 19, 20
};
final short[] height = {
19, 24, 23, 29, 28, 27, 24, 23, 23, 24, 27, 24, 25
};
for (byte b = 0; b < 13; b++) {
final JLabel tabIconLabel = tabArea.getTabs()[b].getTabIcon();
tabAreaLabel.setLayout(new OverlayLayout(tabAreaLabel));
// tabAreaLabel.setLayout(null);
tabAreaLabel.add(tabIconLabel);
tabIconLabel.setBounds(xLocation[b], yLocation[b], width[b], height[b]);
}}

感谢您的帮助!附:我无法让代码正确地适合代码标签。最后一个括号应该位于下一行,而不是倒数第二个括号旁边。

/image/OFkKg.png

最佳答案

tabAreaLabel.setBounds(tabArea.getLocation().getX(), tabArea.getLocation().getY(), 250, 338);

tabAreaLabel 的大小为 (250, 338)。

short[] xLocation = {
549, 574, 605, 635, 673, 704, 730, 577, 605, 637, 674, 705, 732
};

所有标签的 x 位置都大于 250,因此它们不适合标签。修复坐标或修复 tabAreaLabel 的大小。

通常,您不应该对图像的大小进行硬编码。相反,您可以使用类似以下内容:

tabAreaLabel.setSize( tabAreaLabel.getPreferredSize() );
tabAreaLabel.setLocation(...);

另外,不要使用短[]数组。使用 int[] 数组。

与你的for循环相同:

for (byte b = 0; b < 13; b++) {

不要使用byte,只使用int。

关于java - JLabel 位于另一个 JLabel 之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23581563/

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