如何在JPanel中居中对齐背景图像

时间:2010-12-26 10:43:31

标签: java swing jframe jpanel background-image

我想将背景图片添加到JFrame 背景图片意味着我稍后可以在JFrameJPanel上添加组件 虽然我找不到如何将背景图片添加到JFrame,但是 我发现如何从这里将背景图像添加到JPanel
How to set background image in Java?

这解决了我的问题,但现在我的JFrame可调整大小,我想将图像保持在中心位置。
我找到的代码使用了这种方法

public void paintComponent(Graphics g) { //Draw the previously loaded image to Component.  
    g.drawImage(img, 0, 0, null);   //Draw image
}  

有人可以说如何将图像对齐到JPanel的中心 由于g.drawImage(img, 0, 0, null);提供x = 0和y = 0
此外,如果有一种方法可以将背景图像添加到JFrame,那么我想知道 感谢。

1 个答案:

答案 0 :(得分:10)

假设合适的image,您可以将其置于中心位置:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    int x = (this.getWidth() - image.getWidth(null)) / 2;
    int y = (this.getHeight() - image.getHeight(null)) / 2;
    g2d.drawImage(image, x, y, null);
}

如果您希望其他组件随背景一起移动,您可以更改图形上下文的仿射变换以使图像保持居中,如包含旋转的更完整example所示。

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.translate(this.getWidth() / 2, this.getHeight() / 2);
    g2d.translate(-image.getWidth(null) / 2, -image.getHeight(null) / 2);
    g2d.drawImage(image, 0, 0, null);
}