2016-06-10 6 views
2

저는 Java를 처음 접했고 단순한 격자 (뱀과 미로 사이의 무언가)에 사각형이있는 간단한 게임을 만들고 싶습니다. 사각형의 수는 변경되지 않고 색상 만 변경됩니다.자바 : 캔버스에서 그리는 방법?

나는 이미 게임에 필요한 오브젝트를 프로그래밍했다. 이제 게임을 보여주고 싶습니다.

필자는 JFrame, JPanel 및 JButton을 만드는 방법을 알고 있지만 캔버스에서 그리는 방법을 모르겠습니다. 정확한 제목, 크기, 버튼,

import javax.swing.*; 
import java.awt.*; 

public class Test extends Canvas { 
    public static void main (String[] arg) { 
     JFrame f=new JFrame(); 
     f.setTitle("Title"); 
     f.setSize(400,500); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
     JPanel pan=new JPanel(new FlowLayout()); 
     pan.add(new JButton("hey")); 
     Test canvas=new Test(); 
     Graphics g=canvas.getGraphics(); 
     canvas.paint(g); 
     pan.add(canvas); 
     f.setContentPane(pan); 
    } 

    public Test() { 
     setBackground (Color.green); 
     setSize(300,300); 
     setVisible(true); 
    } 

    public void paint(Graphics g) { 
     Color c = g.getColor(); 
     g.setColor(Color.RED); 
     g.fillRect(10,10,80,80); 
     g.setColor(Color.BLUE); 
     g.fillRect(150,50,80,80); 
     g.setColor(c); 
    } 
} 

내가 이것을 실행

는 윈도우가 생성되지만 다른 것 (NO 녹색 배경, 아니 빨간색이되지 않습니다 :

내가 테스트 클래스를 만들어 파란색 직사각형) 오류가 감지되면 오류가 감지됩니다.

Exception in thread "main" java.lang.NullPointerException 
    at Test.paint(Test.java:25) 
    at Test.main(Test.java:15) 

무엇이 잘못 되었나요? 이 사각형을 그리는 더 좋은 방법이 있습니까?

감사합니다.

+1

캔버스는 AWT 구성 요소입니다. – ControlAltDel

+1

대신 JPanel을 사용해야합니다. 1)'Graphics g = canvas.getGraphics();'제쳐두고, Swing GUI에서 AWT 구성 요소를 사용하지 말라는 충고와 마찬가지로 이것은 거의 매일 발생합니다. 캔버스에서 할 수있는 일은'JPanel' (그리고 더 나은 것)으로 할 수 있습니다. 2)'f.setVisible (true);는 모든 컴포넌트가 추가 된 후에 수행되어야합니다 .. –

+0

"캔버스는 AWT 컴포넌트이므로, 대신 JPanel을 사용해야합니다 :"왜? " – gpasch

답변

3

주석이 두 줄

//Graphics g=canvas.getGraphics(); 
//canvas.paint(g); 

다음과 같이 페인트 방법을 변경합니다.

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

나머지는 모두 정상입니다. 희망이 당신이 진행하는 데 도움이됩니다.

관련 문제