我正在使用 java swing 制作 pacman 游戏。 在我的代码中,我在组件面板中使用 2 个 jpanels 第一个用于 map ,第二个用于吃 bean 人。 现在我试图在单击按钮时将 pacman 移动到其他单元格。它已移动,但旧图片未删除。 image before clicking , image 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();
我怎样才能让旧的吃 bean 人消失?
最佳答案
player.setBackground(new Color(0, 0, 0, 0));
不要使用透明颜色。 Swing 无法正确处理透明度。
为了实现完全透明,有一个简单的解决方案。只需使组件透明即可:
player.setOpaque( false );
如果您需要部分透明度,请查看 Backgrounds With Transparency寻求解决方案。
关于java - Jpanel 未正确重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47724360/