2014-04-07 141 views
0

如何重繪在另一個JPanel內的JPanel?我曾嘗試一些答案,我在互聯網上找到,但我不能讓它工作... 有一塊我的代碼:在其他JPanel內重繪JPanel

我的主面板:

contentPane = new JPanel() { 
     protected void paintComponent(java.awt.Graphics g) { 
      super.paintComponents(g); 
      try { 
       g.drawImage(ImageIO.read(JanelaJogo.class 
         .getResource("/imagens/fundo/fundo4.jpg")), 0, 0, 
         this); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 

    }; 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 

這是面板內部:

bonusPanel = new JPanel() { 
     @Override 
     public void paintComponents(Graphics g) { 
      // TODO Auto-generated method stub 
      super.paintComponent(g);     

     } 
     @Override 
     public Dimension getPreferredSize() 
     { 
      Dimension dim = contentPane.getSize(); 
      int largura = dim.width; 
      dim = new Dimension(largura, 150); 
      return new Dimension(dim); 
     } 

    }; 
bonusPanel.setBackground(new Color(0, 0, 0, 0)); 
contentPane.add(bonusPanel, BorderLayout.SOUTH); 

我bonusPanel有2個標籤是形象的圖標,我想該圖像刷新當一些用戶在遊戲中做一個組合,問題是,它是不是清爽...... 我有試過repaint(),revalidade(),validade()contentPanebonusPanel但沒有工作... 在此先感謝您的幫助!

更新:有一個形象,我會更好地解釋我想要什麼...... enter image description here

我把Java控制檯程序的輸出,因此,當有「炸彈」的比賽,電源(按鈕上的炸彈)應該改變圖像...並且即時打印以控制當前圖像,如您所見,它變成了圖像「bonus_bomba_1.png」和「bonus_bomba_2.png」,但是問題刷新圖形用戶界面... 我更新了我之前發佈的代碼,用於當前的代碼... 我只是沒有更改drawImage,因爲我沒有弄清楚我該怎麼做,因爲它工作正常,沒有改變它呢...

這是我在做什麼,在「權力」的更新標籤的圖像:

private void iconBomb(String s) { 

    try { 
     bombPic = ImageIO.read(this.getClass().getResource(s)); 
     powerBomb.setIcon(new ImageIcon(bombPic)); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

預先感謝您的幫助!

回答

3

1)不要調用super.paintChildren()。 Swing會爲你做到這一點。你所做的只是調用super.paintComponent();

2)不要在繪畫方法中讀取文件。繪畫方法僅用於繪畫。

3)您將獎勵面板添加到框架的南部,因此面板以其首選大小顯示。你需要重寫你的面板getPreferredSize()方法返回一個合理的規模:

@Override 
public Dimension getPreferredSize() 
{ 
    return new Dimension(...); 
} 

閱讀從Custom Painting Swing的教程部分獲取更多信息和工作的例子。

+0

完成了您所說的所有內容,但仍然沒有刷新標籤的圖像。 –

+0

@ JoAoSilva,更新您的問題以發佈證明問題的正確[SSCCE](http://www.sscce.org/)。每個問題都應該發佈一個「SSCCE」,所以我們不必猜測你在做什麼。 – camickr

+0

我現在更新了我的問題...謝謝你的幫助 –