2016-10-15 5 views
0

JFrameオブジェクトを作成し、背景の黒を塗りつぶして青い四角形を描画する簡単なコードを書く必要があります。ただし、repaint()メソッドはpaintComponent()メソッドを呼び出していません。repaint()はJavaのpaintComponent()を呼び出していません

これはコードです:

import java.util.Vector; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Container; 

public class Snake extends JPanel{ 
     private Vector xCoords = new Vector(); 
     private Vector yCoords = new Vector(); 

     public Snake(){ 
       xCoords.add(150); 
       yCoords.add(150); 
     } 

     public void startJFrame(){ 
       JFrame window = new JFrame(); 
       window.setSize(300, 300); 
       window.setVisible(true); 
       window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       Container c = window.getContentPane(); 
       c.setBackground(Color.black); 
     } 

     public void paintRequest(){ 
       System.out.println("Request to paint received."); 
       repaint(); 
     } 

     public void paintComponent(Graphics g){ 
       super.paintComponent(g); 
       System.out.println("paintComponent was called"); 
       g.setColor(Color.blue); 
       int x = (int)xCoords.get(0); 
       int y = (int)yCoords.get(0); 
       g.fillRect(x, y, 10, 10); 
     } 

     public static void main(String[] args){ 
       Snake mkFrame = new Snake(); 
       mkFrame.startJFrame(); 
       mkFrame.paintRequest(); 
     } 
} 

私はそれが「ペイントする要求が受信さ」が、印刷されることはありません「paintComponentが呼ばれた」印刷しているためpaintRequest()が正常に呼び出されていることを知っています。 gui側では、JFrameウィンドウが作成され、黒い背景がありますが、青い四角形はありません。事前にお手伝いいただきありがとうございます。

+0

ヒント:任意のメソッドをオーバーライドする場合は、メソッドのスペルと署名をチェックするために '@ Override'表記を使用しています。 –

+1

x/y値に 'Point'オブジェクトを使うことも考えてみてください。 – camickr

答えて

2

フレームにこれまでに追加されたSnakeはありません!

変更:

JFrame window = new JFrame(); 

へ:

JFrame window = new JFrame(); 
    window.add(new Snake()); 
+0

私はこれを忘れたとは思わない。ありがとうございました。ただし、これにより、背景はデフォルトで灰色がかった白色になり、黒色にはなりません。あなたはこれを修正する方法を知っていますか? – acn3

+0

パネルは、フレームのコンテンツペインを完全にカバーします。フレームの色を設定するのを邪魔しないでください。 –

関連する問題