Jpanel没有正确地重新粉刷

时间:2017-12-09 01:17:43

标签: java swing jframe jpanel refresh

我正在使用java swing进行pacman游戏。 在我的代码中,我在组件面板中使用了2个jpanel 第一个是地图,第二个是pacman。 现在我试图在点击按钮时将pacman移动到其他单元格。它被移动但旧图片不会被删除。image before clickingimage after clicking 你可以看到新的pacman出现,但旧的并没有消失。还有一些垃圾也出现了。 这是为pacman创建jpanel的代码

JLabel pacman = new JLabel("", new ImageIcon("pacman.png"), JLabel.CENTER);
    player = new JPanel(new BorderLayout());
    player.setBounds(n*1, n*1, n, n);
    //pacman.setOpaque(true);
    pacman.setBackground(new Color(0, 0, 0, 0));
    player.add(pacman);
    //player.setOpaque(true);
    player.setBackground(new Color(0, 0, 0, 0));
    contentPane.setLayout(null);

    JPanel panel = new JPanel();
    panel.setBounds(0, 0, 1000, 1000);
    panel.setLayout(null);
    panel.add(player);  
    panel.setBackground(new Color(0, 0, 0,0));
    contentPane.add(panel);

按钮actionPreformed方法中的代码是:

            panel.remove(player);
            player.setLocation(new Point(n*1, n*2));
            panel.add(player);
            panel.revalidate();
            panel.repaint();

我怎样才能使旧的pacman消失?

1 个答案:

答案 0 :(得分:1)

player.setBackground(new Color(0, 0, 0, 0));

不要使用透明色。 Swing无法正确处理透明度。

为了完全透明,有一个简单的解决方案。只需使组件透明:

player.setOpaque( false );

如果您需要部分透明度,请查看Backgrounds With Transparency以获得解决方案。