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

Jag*_*uar 5 java swing background-image jpanel jframe

我想给我的背景图片添加JFrame.
背景图片意味着我可以在以后添加组件JFrameJPanel
虽然我不知道如何添加背景图像JFrame,
我发现如何JPanel从这里添加背景图像:
如何在Java中设置背景图像?

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

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

任何人都可以说如何将图像对齐到中心JPanel.
由于g.drawImage(img, 0, 0, null);提供了x = 0和y = 0的
另外如果有背景图像添加到一个方法JFrame然后我想知道.
谢谢.

tra*_*god 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);
}
Run Code Online (Sandbox Code Playgroud)

如果您希望其他组件随背景移动,您可以更改图形上下文的仿射变换以使图像保持居中,如此更完整的示例(包括旋转)所示.

@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);
}
Run Code Online (Sandbox Code Playgroud)