【问题标题】:How to center align background image in JPanel如何在 JPanel 中居中对齐背景图像
【发布时间】:2011-05-30 19:56:30
【问题描述】:

我想将背景图片添加到我的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,那么我想知道。
谢谢。

【问题讨论】:

    标签: java swing jframe jpanel background-image


    【解决方案1】:

    假设一个合适的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);
    }
    

    【讨论】:

    • 在审查中,我发现第一个示例强制转换为 Graphics2D 不是严格要求的,尽管它是第二个。
    猜你喜欢
    • 2012-11-06
    • 2011-06-29
    • 1970-01-01
    • 2012-07-10
    • 2020-08-05
    • 1970-01-01
    • 2011-04-20
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多