JDesktopPane的背景设置

时间:2010-05-25 15:24:59

标签: java swing jdesktoppane

我正在为JDesktopPane使用自制的DesktopPaneUI,我已经为该类编写了正确的方法,而且我遇到了麻烦。当我调整JDesktopPane的大小时,背景图像不会随框架调整大小。图像看起来被剪裁为窗口最初打开时的大小。我给它的图像大于窗口,我仍然遇到这个问题。

这是我在desktopUI类的构造函数中调用的方法。

super();
this.background = javax.imageio.ImageIO.read(new File(fileName));

有没有办法可以更改我设置UI的主类,或myDesktopPaneUI类,以便在JDesktopPane更改大小时背景仍然填充窗口?

setUI(new myDesktopPaneUI("media/bg.jpg"));

3 个答案:

答案 0 :(得分:6)

覆盖paint(),以便将图片缩放到窗格大小的方式调用drawImage()

@Override
public void paint(Graphics g, JComponent c) {
    g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
}

答案 1 :(得分:4)

如果您只是创建自定义UI来添加背景图像,更简单的方法是自定义绘制JDesktopPane,以便它适用于所有LAF:

JDesktopPane desktop = new JDesktopPane()
{
    protected void paintComponent(Graphics g)
    {
        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
    }

};

通常你会首先调用super.paintComponent(g),但由于图像将覆盖整个背景,因此无需这样做。

答案 2 :(得分:1)

使用组件侦听器了解窗口的大小调整时间,然后使用

重新缩放图像
image.getScaledInstance(getWidth(), getHeight(), 0);