gpt4 book ai didi

java - JLabel 不在全屏居中

转载 作者:行者123 更新时间:2023-11-30 03:29:16 26 4
gpt4 key购买 nike

在我的 JFrame 上,我有一个 GridLayout(5,5)。在其中一个单元格中,我有一个 CellPanel,它扩展了 JPanel,其中我添加了一个带有 ImageIcon 的 JLabel。我将 JLabel 居中,但是当我将窗口设置为全屏时,JLabel 不再居中。知道为什么吗?另外,我想在窗口全屏时缩放 JLabel。 JFrame 大小为 640x480。

我的部分代码:

 for(int i=0; i<25; i++)
{
switch(i){
case(0):
icon = new ImageIcon("Resurse/entrance.png");
cell = new CellPanel(icon.getImage());
break;
case(22):
icon = new ImageIcon("Resurse/exit.png");
cell = new CellPanel(icon.getImage());
break;
case(5):
icon = new ImageIcon("Resurse/ground.png");
cell = new CellPanel(icon.getImage());
footPrint = new JLabel();
iconSolver = new ImageIcon("Resurse/fading.png");
footPrint.setIcon(iconSolver);
footPrint.setHorizontalAlignment(JLabel.CENTER);
footPrint.setVerticalAlignment(JLabel.CENTER);
cell.add(footPrint);
break;
...
}
}

正常尺寸: enter image description here

全屏: enter image description here

最佳答案

关键问题:您的单元格 JPanel 使用什么布局?

您使用的是 FlowLayout,因此 JLabel 默认为其首选尺寸并放置在顶部中心,正是您所看到的。

我会选择 BorderLayout 或 GridBagLayout。后者,如果仅添加一个组件并且在没有网格包约束的情况下添加,则 GridBagLayout 会将自动添加的组件居中,使其保持首选大小。我在国际象棋程序中使用了它,将棋子置于棋盘单元的中心。添加了标签的 BorderLayout BorderLayout.CENTER 将使您的 JLabel 填充单元格 JPanel,并且如果 JLabel 展开时 JLabel 的图像居中,这也可以工作。

一些侧面建议:

  • 避免像您的代码似乎正在执行的那样重新读取您的图像。相反,请考虑一次性读取图像,将它们存储在 ImageIcon 变量中,然后根据需要使用图标。此建议的主要风险是,如果您的图像非常大,在这种情况下,您将不得不注意内存限制。

关于java - JLabel 不在全屏居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29448539/

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