繁体   English   中英

在其他JPanel内部重绘JPanel

[英]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()contentPanebonusPanel但是没有用...谢谢您的帮助!

更新:有一张图片,我会更好地解释我想要的... 在此处输入图片说明

我将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM