我正在为一个JDesktopPane使用一个自制的DesktopPaneUI,我已经为这个类编写了适当的方法,但是我遇到了麻烦。当我调整JDesktopPane的大小时,背景图像没有随框架调整大小。图像似乎以最初打开窗口时的大小进行了裁剪。我给它一个比窗口更大的图像,但我仍然有这个问题。
下面是我在desktopUI类的构造函数中的方法调用。
super();
this.background = javax.imageio.ImageIO.read(new File(fileName));有没有一种方法可以改变我设置UI的主类,或者当JDesktopPane改变大小时背景仍然充满窗口的myDesktopPaneUI类?
setUI(new myDesktopPaneUI("media/bg.jpg"));发布于 2010-05-25 23:43:19
重写paint()以以将图像缩放到窗格大小的方式调用drawImage():
@Override
public void paint(Graphics g, JComponent c) {
g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
}发布于 2010-05-26 00:01:12
如果您只创建自定义UI来添加背景图像,更简单的方法是对JDesktopPane进行自定义绘制,以便它适用于所有的LAF:
JDesktopPane desktop = new JDesktopPane()
{
protected void paintComponent(Graphics g)
{
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
};通常,您会首先调用super.paintComponent(g),但由于图像将覆盖整个背景,因此不需要这样做。
发布于 2011-11-20 01:56:45
使用组件侦听器了解窗口何时调整大小,然后使用
image.getScaledInstance(getWidth(), getHeight(), 0);https://stackoverflow.com/questions/2906050
复制相似问题