Eri*_*icR 1 java swing jdesktoppane
我正在为JDesktopPane使用自制的DesktopPaneUI,我已经为该类编写了正确的方法,而且我遇到了麻烦.当我调整JDesktopPane的大小时,背景图像不会随框架调整大小.图像看起来被剪裁为窗口最初打开时的大小.我给它的图像大于窗口,我仍然有这个问题.
这是我在desktopUI类的构造函数中调用的方法.
super();
this.background = javax.imageio.ImageIO.read(new File(fileName));
Run Code Online (Sandbox Code Playgroud)
有没有办法可以更改我设置UI的主类,或myDesktopPaneUI类,以便在JDesktopPane更改大小时背景仍然填充窗口?
setUI(new myDesktopPaneUI("media/bg.jpg"));
Run Code Online (Sandbox Code Playgroud)
覆盖paint()以drawImage()将图像缩放到窗格大小的方式调用:
@Override
public void paint(Graphics g, JComponent c) {
g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
}
Run Code Online (Sandbox Code Playgroud)
如果您只是创建自定义 UI 来添加背景图像,则更简单的方法是对 JDesktopPane 进行自定义绘制,以便它适用于所有 LAF:
JDesktopPane desktop = new JDesktopPane()
{
protected void paintComponent(Graphics g)
{
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
};
Run Code Online (Sandbox Code Playgroud)
通常您会首先调用 super.paintComponent(g),但由于图像将覆盖整个背景,因此无需这样做。