2012-03-13 22 views
1

私はJFrameを再描画して移動するためのボックスを取得しようとしていますが、何らかの理由でそれが機能しないことがわかりません。私はおそらく何か本当に愚かなことを知っているが、ここで私のクラスです:(それは、お尻の痛みをフォーマットするためにも申し訳ありません...)それは私にframe.add(正方形)行にエラーを与えます。奇妙なJFrameの問題

import javax.swing.JFrame; 
import javax.swing.WindowConstants; 

public class Runner extends JFrame{ 

final static int FRAME_WIDTH = 1000; 
final static int FRAME_HEIGHT = 600; 
final static int BOX_WIDTH = 50; 
final static int BOX_HEIGHT = 50; 

public static void main (String[] args){ 

    JFrame frame = new JFrame(); 
    frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    frame.setTitle("Animation"); 
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    frame.setVisible(true); 

    Component square = new Component(); 
    Dimensions.setBoxDimensions(BOX_WIDTH, BOX_HEIGHT); 

    frame.add(square); 
    frame.setVisible(true); 

    for (int i = 0; i < 100; i++){ 
     Dimensions.setPosition(i,i); 
     square.repaint(); 
     frame.setVisible(true); 
    } 
} 
} 



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

public class Component extends JFrame{ 

public void paintComponent (Graphics g){ 
    Graphics2D g2 = (Graphics2D) g; 
    g2.fillRect(Dimensions.xPos, Dimensions.yPos, Dimensions.boxWidth,   Dimensions.boxHeight); 
} 
} 





public class Dimensions { 

public static int boxHeight = 50; 
public static int boxWidth = 50; 
public static int xPos = 0; 
public static int yPos = 0; 

public static void setBoxDimensions(int width, int height){ 
    boxHeight = height; 
    boxWidth = width; 
} 
public static void setPosition(int x, int y){ 
    xPos = x; 
    yPos = y; 
} 
} 

答えて

0

コンポーネントクラスはJFrameなので、JFrameをJFrameに追加することはできません。 JPanelをJFrameに追加し、代わりにJPanelにペイントすることができます。

または、代わりにjava.awt.Componentを拡張しようとしている可能性がありますか?

import javax.swing.JPanel; 
public class MyComponent extends JPanel{ 

    public void paintComponent (Graphics g){ 
      Graphics2D g2 = (Graphics2D) g; 
      g2.fillRect(Dimensions.xPos, Dimensions.yPos, Dimensions.boxWidth,       Dimensions.boxHeight); 
    } 
    } 

そして、あなたは、あなたがこれを行うことができコンポーネントをしたいとき:

JPanel square = new MyComponent(); 
+0

したがって、JPanelパネル=新しいJPanel(); 、次にpanel.add(square); ?? – Evan

+0

私は助けになるいくつかの例を追加しました。 –

+0

独自のクラスコンポーネントに名前を付けることはできますが、java.awt.Componentがあるので問題が発生することがあります。だから私は便宜のためMyComponentという名前を付けました。 –

0

それはあなたのJFrameの「ペイント」メソッドをオーバーライドすることをお勧めします。それははるかに簡単です。

@override 
public void paint(Graphics g){ 
    super(); 
    /* 
     put the code to draw your shape of shapes here 
    */ 
} 

JFrameを更新する場合はいつでも、JFrameの再描画メソッドを呼び出すことができます。