JPanel重绘的背景

时间:2017-07-25 08:30:23

标签: java swing jpanel paintcomponent jlayeredpane

我有一个有多个图层的程序,在底层我有一个JPanel,我已经放了一个背景图像。除此之外,我有一个JLayeredPane,它有一些可拖动的组件。我的问题是,当用户上传了一张背景图片时,可拖动的组件实际上是滞后的,我的猜测是,因为这种摆动会在拖动时重新绘制背景图像。我的问题是,无论如何它确保图像不会一直重新粉刷? 我绘制图像的代码如下所示:

if (this.getLoadedBackgroundImage() != null) {
        try {
            BufferedImage bufferedImage = ImageIO.read(this.getLoadedBackgroundImage());
            Image bImage = bufferedImage.getScaledInstance(this.getWidth() - 5 - jPanel6.getWidth() -5, this.getHeight() - jPanel2.getHeight() - jPanel3.getHeight() - tabPanel.getHeight(), Image.SCALE_FAST);
            graphics2d.drawImage(bImage, 5, jPanel2.getHeight() + tabPanel.getHeight()+5, null);
        } catch (IOException ex) {
            Logger.getLogger(MainViewLayeredPane.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

1 个答案:

答案 0 :(得分:1)

不要使paintComponent方法加载或调整图像大小,这些是昂贵的操作,而是预先缓存它并仅绘制缓存版本