JLabel不以全屏为中心

时间:2015-04-04 16:07:40

标签: java swing fullscreen jlabel centering

在我的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

1 个答案:

答案 0 :(得分:2)

关键问题:你的细胞JPanel使用什么布局?

您正在使用FlowLayout,因此JLabel默认为其preferredSize并位于顶部中心,正是您所看到的。

我选择BorderLayout或GridBagLayout。后者,如果只添加和添加一个组件而没有网格包约束,GridBagLayout将自动添加一个组件,使其保持其首选大小。我在国际象棋程序中使用它来将国际象棋棋子集中在国际象棋棋盘格中。添加了标签BorderLayout.CENTER的BorderLayout将使您的JLabel填充单元格JPanel,如果JLabel的图像在JLabel展开时居中,那么它也可以工作。

有些方面记录:

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