2017-05-05 5 views
0

私は現在、プロジェクトのヘビとはしごのゲームを作っています。私は前に直面していなかった問題に遭遇しました。私はゲームボード上でサークルになるPlayerというクラスを持っています。ペイントコンポーネントが楕円を描いていない

paintComponentメソッドは、しかし、それはあなたが新しいコンポーネントを作成するためにJComponentを拡張してはならないではない

public class Player extends JComponent { 
    private double playerX; 
    private double playerY; 
    private double diameter; 
    private String playerColor; 
    HashMap<String, Color> colorMap = new HashMap(); 

    public Player(String playerColor, double playerX, double playerY, double diameter) { 
     this.playerColor = playerColor; 
     this.playerX = playerY; 
     this.playerY = playerY; 
     this.diameter = diameter; 
     setSize(getPreferredSize()); 
     setLocation((int) diameter, (int) diameter); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension((int) diameter * 2, (int) diameter * 2); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     super.paintComponent(g2d); 
     setDoubleBuffered(true); 
     g2d.drawOval((int) playerX, (int) playerY, (int) diameter * 2, (int) diameter * 2); 
     System.out.println(true); 
    } 
} 
+1

問題を示す正しい[mcve]を投稿してください。 – camickr

+0

@camickrあなたが探していたものが欲しいと思います。問題は、paintComponentが1回だけtrueを出力していることです。なぜそれが描画されていないのですか? –

+0

「完了」はどうですか?コードをコンパイルしてテストすることはできません。 '問題は、paintComponentが本当に印刷されないということです。' - 問題は、実際にコンポーネントをどのように使用するかのコンテキストです。実際にコンポーネントをフレームにどのように追加しますか?あなたが掲示したコードは妥当と思われます、おそらく半径は0ですか?おそらく問題はレイアウトマネージャですか?画像全体を見ることなく、あなたがしていることを推測しています。 – camickr

答えて

0

んが、paintComponent(..)をオーバーライドすることで、塗装プロセスをカスタマイズするために常に真印刷する必要があります。

カスタムペイント方式で新しいコンポーネントを作成する場合は、JPanelを使用し、paint(..)メソッドをオーバーライドします。

public class Player extends JPanel { 

    private static final long serialVersionUID = 1L; 

    private double playerX; 
    private double playerY; 
    private double diameter; 
    private String playerColor; 
    HashMap<String, Color> colorMap = new HashMap<>(); 

    public Player(String playerColor, double playerX, double playerY, double diameter) { 
     this.playerColor = playerColor; 
     this.playerX = playerY; 
     this.playerY = playerY; 
     this.diameter = diameter; 
     setSize(getPreferredSize()); 
     setLocation((int) diameter, (int) diameter); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension((int) diameter * 2, (int) diameter * 2); 
    } 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     setDoubleBuffered(true); 
     g2d.drawOval((int) playerX, (int) playerY, (int) diameter * 2, (int) diameter * 2); 
     System.out.println(true); 
    } 
} 

詳細情報here

+1

paintComponentは、彼が何をしているかによって依然として上書きするのに適切かもしれません。あなたは、彼がベースとしてJPanelのような何かを使用するべきであることは間違いありません –

関連する問題