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)
무엇이 잘못 되었나요? 이 사각형을 그리는 더 좋은 방법이 있습니까?
감사합니다.
캔버스는 AWT 구성 요소입니다. – ControlAltDel
대신 JPanel을 사용해야합니다. 1)'Graphics g = canvas.getGraphics();'제쳐두고, Swing GUI에서 AWT 구성 요소를 사용하지 말라는 충고와 마찬가지로 이것은 거의 매일 발생합니다. 캔버스에서 할 수있는 일은'JPanel' (그리고 더 나은 것)으로 할 수 있습니다. 2)'f.setVisible (true);는 모든 컴포넌트가 추가 된 후에 수행되어야합니다 .. –
"캔버스는 AWT 컴포넌트이므로, 대신 JPanel을 사용해야합니다 :"왜? " – gpasch