2014-04-07 142 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

我现在更新了我的问题...谢谢你的帮助 –