2017-12-09 28 views
1

私は、Java swingを使用してパックマンゲームを作っています。 私のコードでは、コンポーネントパネルの2つのjpanelsを使用します。 最初のものはマップのもので、2番目のものはパックマンのものです。 ボタンがクリックされたときにパックマンを他のセルに移動しようとしました。移動はされましたが、古い画像は削除されません。 image before clickingimage after clicking 新しいパーマンが表示されていますが、古いものは表示されませんでした。ゴミ箱も出てきました。 これはボタンactionPreformedメソッド内パックマンのためのJPanelを作成するためのコード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); 

コードでは、次のとおりです。

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

どのように私は古いパックマンが消えることができますか?

+1

Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –

答えて

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

透明色を使用しないでください。スイングは透明性を正しく処理しません。

完全な透明性のために、簡単な解決策があります。ただ、部品を透明にする:

player.setOpaque(false); 

あなたは解決策のためのBackgrounds With Transparencyをチェックアウトした後、部分的透明性が必要な場合。