Applet的背景图像和填写Applet

时间:2013-10-19 20:18:24

标签: java japplet

我正在设置一个Image作为我的JApplet的背景,并使用resize方法将Image填充到JApplet背景中。我目前正在使用

Image background;
public void paint(Graphics g) {
    super.paint(g);
    g.drawImage(background, 0, 0, this);
}

public void init() {
    // TODO start asynchronous download of heavy resources
    background=resize(new ImageIcon(getClass().getResource("/org/me/pd/resources/music.png")),this.getWidth(),this.getHeight()).getImage();
    this.setLayout(new GridLayout(6,6));
    //Create();
}

这是我的调整大小方法

public ImageIcon resize(ImageIcon icon, int width, int height)
{
    BufferedImage converted = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics g = converted.createGraphics();
    icon.paintIcon(null, g, 0,0);
    g.dispose();
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
    Graphics2D g2d = (Graphics2D) bi.createGraphics();
    g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
    g2d.drawImage(converted, 0, 0, width, height, null);
    g2d.dispose();
    ImageIcon correct=new ImageIcon(bi);
    return correct;
}

这最初在加载Applet并填充图像时起作用但是当applet最大化时,Image不会使用Applet最大化。它显示了在最大化之前保持原样。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

无需重新缩放图标。

相反,你只需让绘画方法为你做到这一点:

g.drawImage(image, 0, 0, getWidth(), getHeight(), this);

但是,你不应该通过覆盖applet的paint()方法来实现这一点。

相反,您应该覆盖JPanel的paintComponent()方法并将面板添加到您的applet。然后,您的窗格将成为applet的内容窗格。然后,您可以将面板的布局设置为BorderLayout,使其行为与默认内容窗格完全相同。