java - Jpanel 未正确重绘

标签 java swing jframe jpanel refresh

我正在使用 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/

相关文章:

java - 如何在 JFrame 弹出错误后使主窗口处于非 Activity 状态

java - 手动关闭java swing窗口

java - 如何在 while 循环内声明自定义生成的字符串?

java - 顶部带有横幅的 JTabbedPane

java - 如何自定义 Eclipse 关于对话框的关于文本?

java - JLabel 未显示在 JFrame 中

java - 如何在 JFrame 中删除标题栏

java - 使用 displaytag 和 Struts 1.3 的 JSP 表格中的按钮列

java - 线程中的异常 "AWT-EventQueue-0"java.lang.StringIndexOutOfBoundsException : String index out of range: 97

Java swing 应用程序即服务