2017-07-25 96 views
0

我有一個程序,有多個層,在底層我有一個JPanel,我已經把背景圖像。最重要的是,我有一個JLayeredPane,它有一些可拖動的組件。我的問題是,當用戶上傳了一個背景圖片時,可拖動的元件真的很滯後,我猜測是因爲這個迴盪是在拖動時重繪背景圖片。我的問題是,無論如何要確保圖像不會一直在重新繪製? 我的代碼,我畫的圖像看起來是這樣的:JPanel中的背景repaint

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

不要加載或調整圖像的paintComponent方法,這些都是昂貴的操作,相反,預緩存,並只畫緩存版本

+0

但是,如果窗口的大小發生變化,我需要爲圖像計算一個新的大小吧?或者我應該在windowChangeEvent之類的地方做那個呢? –

+0

那麼?當窗口的大小發生變化時,計算新的大小,調整圖像的大小並重新繪製 - [例如](https://stackoverflow.com/questions/24318051/width-and-height-of-a-jpanel -are-O-特定情況/ 24318121#24318121) – MadProgrammer