1

プロジェクトに問題があります:/

drawPacが正しく機能しない理由。黒の長方形が描画されていますが、私の画像は描画されていません:/なぜ

私は4つのクラスを作成しました。これは、JFrameを拡張するメインクラスを含まない3つのクラスのタラであり、JPanelGameが追加されています。

ファイル#1

package pacman;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;

public class Game extends JPanel { 

   Pac pacman = new Pac();

   public void Game() {
     setFocusable(true);
     setBackground(Color.BLACK);
     setDoubleBuffered(true);
   }

@Override
public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(Color.black);
    g2d.fillRect(0, 0,this.getWidth(),this.getHeight());
    drawPac(g2d);
}

public void drawPac(Graphics2D g2d){
    g2d.drawImage(pacman.image, pacman.x, pacman.y, 100, 100, this);
    }
}

ファイル#2

package pacman;
import java.awt.Image;
import javax.swing.ImageIcon;

public class Actor {
    int x,y;
    int dv;
    Image image;
    public void Actor(){
    }
}

ファイル#3

package pacman;
import pacman.Game;
import javax.swing.ImageIcon;
import java.awt.Graphics2D;

public class Pac extends Actor {

public void Pac(){

    try{
    image = new ImageIcon(Pac.class.getResource("../img/Pac00.gif")).getImage(); 
    x=0;
    y=0;
        }
    catch (Exception e){
        System.out.println("Blad prz otwieraniu");
        System.exit(0);  }
 }

}
4

2 に答える 2

2

1 - 「Pac」クラスは描画自体を担当する必要があります。同意しませんか?

2 - JPanels およびすべての JComponent の子については、ペイントではなく、paintComponent メソッドをオーバーライドする必要があります。ペイントで行っているように、ペイント コンポーネントのスーパー バージョンも呼び出す必要があります。ドキュメントを見てください。

3 - ほとんどの場合、(オリジナルに基づいて) 新しいグラフィックス コンテキストを作成することをお勧めします。だから、あなたの行:

Graphics2D g2d = (Graphics2D) g;

次のように置き換える必要があります。

Graphics2D g2d = (Graphics2D) g.create();

そして、この新しいコンテキストを使用した後 (paintComponent の最後の行で)、破棄 (g2d.dispose()) する必要があります。

4 - Pac クラスのコードは正しいですか? コンパイルですか?画像フィールドは Actor のメンバーですか?

あなたのコードには、質問で示していない問題がいくつかあると思います...

于 2012-05-16T23:38:20.847 に答える
-1

OK @lechniak update Game クラス

public class Game extends JPanel { 
 Pac pacman = new Pac();

public Game() {
  setFocusable(true);
  setBackground(Color.BLACK);
  setDoubleBuffered(true);
}
@Override
public void paint(Graphics g){
   super.paint(g);
   Graphics2D g2d = (Graphics2D) g;
   g2d.setColor(Color.black);
   g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
   drawPac(g2d);
}

public void drawPac(Graphics2D g2d){
   g2d.drawImage(pacman.image, pacman.x, pacman.y, 200, 200, this);
}

public static void main(String[] args) {
     JFrame f = new JFrame("Image Draw");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new Game());
        f.setSize(350,300);
        f.setLocation(300,300);
        f.setVisible(true);
 }
}

そしてパッククラス

//import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import javax.imageio.ImageIO;
import java.io.*;

public class Pac /*extends Actor*/ {
   int x = 0;
   int y = 0;
   BufferedImage  image;

       public Pac() {
          try {
            image = ImageIO.read(new File("/Users/hlozano/java/swing/programmerBorn.jpg"));
            //new ImageIcon(Pac.class.getResource("../img/Pac00.gif")).getImage();
            x = 0;
            y = 0;
           } catch (Exception e) {
            System.out.println("Blad prz otwieraniu " + e);
            System.exit(0);
               }
       }
}

そして画像出力

ここに画像の説明を入力

これらがお役に立てば幸いです。

于 2012-05-16T23:30:33.707 に答える