【发布时间】:2015-06-09 12:12:37
【问题描述】:
在我的 JFrame 上,我有一个 GridLayout(5,5)。在其中一个单元格中,我有一个扩展 JPanel 的 CellPanel,我在其中添加了一个带有 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;
...
}
}
正常尺寸:
全屏:
【问题讨论】:
-
关键问题:您的单元格 JPanel 使用什么布局?我会选择 BorderLayout 或 GridBagLayout。后者,如果只添加一个组件,GridBagLayout 将自动添加一个组件居中,并且在没有网格包约束的情况下添加。 BorderLayout 将使您的 JLabel 填充单元格 JPanel,如果在 JLabel 展开时 JLabel 的图像居中,这也可以工作。
-
在两张图片中,图像仅水平居中,而不是垂直居中。
-
确实只是水平居中,而不是垂直居中,但是为什么呢?
-
为什么是因为这就是 FlowLayout 的行为方式。您的 JLabel 保持其首选大小,并位于 JPanel 的顶部中心。通过使用 BorderLayout 并将其放置 BorderLayout.CENTER 来扩展 JLabel,或者使用 GridBagLayout,它不会扩展 JLabel 并将其保留为首选大小,但将其放置在中心(如果也没有添加其他内容)。
标签: java swing fullscreen jlabel centering