2016-06-13 15 views
0

私はJPanelにいくつかのものを描画しようとしていますが、paintpaintComponentメソッドで問題が発生したようです。ダブルバッファリングと何か関係があるかもしれませんが、わかりません。 public void paintComponent(Graphics g)何らかの理由でメソッドが呼び出されていない、なぜか?ここJava paintComponentsが呼び出されていない

は私のコードです:

@Override 
public void paintComponents(Graphics g) { 
    super.paintComponents(g); //To change body of generated methods, choose Tools | Templates. 
    System.out.println("paintComponents!"); 

    snakeHead.DrawSphere(g); 

    if(foodShoulBeRedrawn){ 
     foodShoulBeRedrawn = false; 
     spawnFood(); 
    } 

    if(shouldSpawnBodyPart){ 
     shouldSpawnBodyPart = false; 
     snake.get(snake.size() - 1).DrawSphere(g); 

    } 

    //spawnSnake(); 
    paintCalled = true; 

    repaint(); 
} 

/* 
@Override 
public void paint(Graphics g) { 
    super.paint(g); 

    snakeHead.DrawSphere(g); 

    if(foodShoulBeRedrawn){ 
     foodShoulBeRedrawn = false; 
     spawnFood(); 
    } 

    if(shouldSpawnBodyPart){ 
     shouldSpawnBodyPart = false; 
     snake.get(snake.size() - 1).DrawSphere(g); 

    } 

    //spawnSnake(); 
    paintCalled = true; 

    repaint(); 
} 
*/ 
+3

* "これは**単数** - ' paintComponent(グラフィックス) '.. –

+1

すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)。 –

+0

私はちょうど気にしなかった、あなたはこれらの機能が何であるか知っています、とにかく私はコード全体を投稿しました。 –

答えて

3

Container#paintComponents()は、JFrameによって継承されました。 JFrameを拡張する代わりに、JPanelを拡張して、paintComponent()getPreferredSize()を上書きできるようにする必要があります。次にadd()パネルをJFrameにすると、herehereのように表示されます。

+0

2番目のリンクでは、http://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#paintComponent-java.awt.Graphics-を参照していますか? – VGR

+0

クール、ありがとう!私はJFormの助けを借りてこの作業を行ったので、NetBeans自体が自動的にすべてを追加すると理解していました。だから、ありがとう! :) –

+0

@VGR:いいえ、私が持っていたものはあまり明確ではありませんでした。何かを言ってくれてありがとう。私は天皇を「JPanel」に誘導しようとしていました。 –

0

私はJFrameのはJComponentのようpaintComponentメソッドが呼び出されることになるだろうことはありませんされていないと思います。 すべてのペイントメソッドをJPanelに入れてJFrameに組み込む必要があります。

関連する問題