我有一个有多个图层的程序,在底层我有一个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);
}
}
答案 0 :(得分:1)
不要使paintComponent
方法加载或调整图像大小,这些是昂贵的操作,而是预先缓存它并仅绘制缓存版本