Java JPanel重绘中的背景

Java JPanel重绘中的背景,java,swing,jpanel,paintcomponent,jlayeredpane,Java,Swing,Jpanel,Paintcomponent,Jlayeredpane,我有一个程序,有多个层次,在底层我有一个JPanel,我把背景图像放在上面。除此之外,我还有一个JLayeredPane,其中包含一些可拖动的组件。我的问题是,当用户上传了背景图像时,可拖动的组件确实滞后了,我猜这是因为swing在拖动时一直在重新绘制背景图像。我的问题是,如果它无论如何,以确保图像没有重新绘制的所有时间? 我在其中绘制图像的代码如下所示: if (this.getLoadedBackgroundImage() != null) { try {

我有一个程序,有多个层次,在底层我有一个JPanel,我把背景图像放在上面。除此之外,我还有一个JLayeredPane,其中包含一些可拖动的组件。我的问题是,当用户上传了背景图像时,可拖动的组件确实滞后了,我猜这是因为swing在拖动时一直在重新绘制背景图像。我的问题是,如果它无论如何,以确保图像没有重新绘制的所有时间? 我在其中绘制图像的代码如下所示:

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);
        }
    }

不要使用paintComponent方法加载或调整图像大小,这些操作代价很高,相反,请预缓存图像并仅绘制缓存的版本

,但如果窗口大小发生更改,我需要为图像计算新的大小,对吗?或者我应该在windowChangeEvent或类似事件的其他地方这样做吗?那么呢?当窗口大小更改时,计算新的大小,从原始图像调整图像大小并重新绘制-