1

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

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

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

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

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

3 回答 3

6

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

@Override
public void paint(Graphics g, JComponent c) {
    g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
}
于 2010-05-25T15:43:18.663 回答
4

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

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

};

通常你会先调用 super.paintComponent(g),但由于图像会覆盖整个背景,所以没有必要这样做。

于 2010-05-25T16:01:12.007 回答
1

使用组件侦听器了解窗口何时调整大小,然后使用重新调整图像

image.getScaledInstance(getWidth(), getHeight(), 0);
于 2011-11-19T17:56:45.467 回答