我正在为JDesktopPane使用自制的DesktopPaneUI,我已经为该类编写了正确的方法,而且我遇到了麻烦。当我调整JDesktopPane的大小时,背景图像不会随框架调整大小。图像看起来被剪裁为窗口最初打开时的大小。我给它的图像大于窗口,我仍然遇到这个问题。
这是我在desktopUI类的构造函数中调用的方法。
super();
this.background = javax.imageio.ImageIO.read(new File(fileName));
有没有办法可以更改我设置UI的主类,或myDesktopPaneUI类,以便在JDesktopPane更改大小时背景仍然填充窗口?
setUI(new myDesktopPaneUI("media/bg.jpg"));
答案 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);