JPanel 中的背景重绘
Background in JPanel repaint
我有一个有多个层的程序,在底层我有一个 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
方法加载图像或调整图像大小,这些都是昂贵的操作,相反,预缓存它并只绘制缓存版本
我有一个有多个层的程序,在底层我有一个 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
方法加载图像或调整图像大小,这些都是昂贵的操作,相反,预缓存它并只绘制缓存版本