2012-03-13 5 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)하는 것이 좋습니다. 그렇게하는 것이 훨씬 쉽습니다.

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

JFrame을 업데이트하려는 경우 언제든지 JFrame의 다시 칠하기 메소드를 호출 할 수 있습니다.