【问题标题】:Jpanel is not repainting properlyJpanel 没有正确重绘
【发布时间】:2018-05-23 06:57:24
【问题描述】:

我正在使用 java swing 制作 pacman 游戏。 在我的代码中,我在组件面板中使用了 2 个 jpanels 第一个用于地图,第二个用于 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();

我怎样才能让老吃豆人消失?

【问题讨论】:

  • Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同的语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。

标签: java swing jframe jpanel refresh


【解决方案1】:
player.setBackground(new Color(0, 0, 0, 0));

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

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

player.setOpaque( false );

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多