2016-06-04 2 views
1

지금 당장은 Java awt 그래픽을 처음 사용합니다. 실제로 화면에 물건을 두는 것과 같은 기본 사항을 설명했지만, 주요 문제점은 클래스 파일 외부에서 사용할 사용자 지정 메서드를 만들려고한다는 것입니다. 내 화면 클래스java.awt.graphics의 그래픽 사용자 정의 메서드

: 내 그리기 클래스

import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; 
    public class Screen extends JPanel{ 
     Graphics g = null; 
     public void createBox(int x, int y, int width, int height){ 
      g.fillRect(x, y, width, height); 
     } 
    } 

뿐만 아니라 화면 클래스를 사용하여 :

import javax.swing.*; 
    public class Draw{ 
     public static void main(String[] args) { 

      JFrame f = new JFrame("Shapes"); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      Screen s = new Screen(); 
      s.createBox(10,10,10,10); 
      f.add(s); 
      f.setSize(512, 512); 
      f.setVisible(true); 
     } 

    } 

을 나는 그래픽 g이 경우에도; 이 선언되지 않고, 난 여전히 같은 오류 존재 얻을 :

Exception in thread "main" java.lang.NullPointerException 
at Screen.createBox(Screen:java:7) 
at Draw.main(Draw:java:8) 

에서는 createBox()는 Screen 클래스의 외부에서 사용하도록되어 있으므로 나는 아직도 fillRect 할()하지만, 다른 이름으로 (나는이 희망을 사용할 수 있습니다 말이된다).

누구든지 내가 잘못하고있는 것을 지적 할 수 있습니까? 감사.

답변

2

누구든지 내가 잘못하고있는 것을 지적 할 수 있습니까?

Graphics 개체에 대한 참조를 유지하려고하지 마십시오. 대신 paintComponent(Graphics) 메서드를 재정의하고 해당 그래픽 인스턴스 (null이 아닌 유효)를 사용하십시오. 페인트를 시작하려면 repaint()으로 전화하십시오.

이 모든 것들은 tutorial on custom painting에 있습니다. 그것을 통해 가십시오!

+0

나는 paintComponent를 사용하고 싶지 않다. 다른 클래스에서 createBox를 입력하면 화면에 사각형을 만들 수 있습니다. –

+0

것은 당신이 원하는 것을 정말로 신경 쓰지 않습니다. 이것은 사용자 정의 페인팅을 수행하는 올바른 방법 일뿐입니다. OTOH 당신은 그림 표면으로서'BufferedImage'를 사용할 것입니다 .. –

+0

그럼 내 질문에 답하지 못했습니다. 나는 내가 잘못한 것을 회화의 올바른 방식이 아닌 것으로 언급하고있다. 다른 방법으로 화면에 상자를 넣으려고했습니다. –

관련 문제