[英]Repaint JPanel inside other 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()
在contentPane
和bonusPanel
但是没有用...谢谢您的帮助!
更新:有一张图片,我会更好地解释我想要的...
我将java控制台放入程序的输出中,因此,当出现“炸弹”匹配项时,电源(按钮上的炸弹)应更改图像...,并通过im打印来控制台当前图像,如下所示:您可以看到,它更改为图像“ bonus_bomba_1.png”和“ bonus_bomba_2.png”,但是问题在于刷新了GUI ...我更新了之前为当前代码发布的代码...我只是没有更改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();
}
预先感谢您的帮助!
1)不要调用super.paintChildren()。 Swing将为您做到这一点。 您要做的只是调用super.paintComponent();。
2)不要使用绘画方法读取文件。 绘画方法仅用于绘画。
3)您正在将奖金面板添加到框架的南方,因此该面板以其首选尺寸显示。 您需要重写面板的getPreferredSize()
方法以返回合理的大小:
@Override
public Dimension getPreferredSize()
{
return new Dimension(...);
}
阅读有关定制绘画的Swing教程中的部分,以获取更多信息和工作示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.