2013-05-18 3 views
0

두 JPanels 사이에 선을 그립니다. 내 코드를 NULL 포인터를주는 것으로 확인하십시오. 예외 : "g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);"두 JPanels 사이의 선 그리기

코드 :

Draw(JPanel one , JPanel two) 
{ 
    //Draw Line 
    Graphics2D g=null; 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
    RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.setColor(Color.lightGray); 
    2d.fillRect(0, 0, getWidth(), getHeight()); 
    g2d.setColor(Color.black); 
    Stroke s = new BasicStroke(4.0f); 


    // For getting the points of JPanel ona and two// 

    int x1 = one.getX() + one.getWidth()/2; 
    int y1 = one.getY() + one.getHeight()/2; 
    int x2 = one.getX() + one.getWidth()/2; 
    int y2 = two.getY() + two.getHeight()/2; 

    //Drawing line 
    g2d.drawLine(x1, y1, x2, y2); 
} 

답변

4

당신이 g2dNULL 값을 저장 캐스팅되기 때문에. 이 코드에서

봐 : 첫 번째 줄에서

Graphics2D g=null; 
Graphics2D g2d = (Graphics2D) g; 

, gNULL입니다. 그리고 그것은 캐스팅되어 g2d에게 할당됩니다. 따라서 g2d은 사용할 수 없다는 것을 의미하는 NULL이됩니다.

+0

무엇을 쉽게 사용할 수있는 예제가 없습니다 그래? 제안? – Asd

+0

업데이트 된 답변 확인. –

+0

모든 구성 요소의'페인트 '를 무시하는 것은 대단히 권장되지 않습니다. 부모 컨테이너의'paint' 메소드를 오버라이드 (override)했을 경우 여전히 제대로 작동하지 않을 것이라는 점도 상당히 확신합니다. 비슷한 질문으로 얼마간 시간을 보내고 그 문제로 빠져 나옵니다. – MadProgrammer

1

몇 가지 옵션이 있습니다.

기본 전제는 현재 컨테이너 (및 그 자식)의 맨 위에 "페인트 할"방법이 필요하다는 것입니다.

상위 컨테이너의 paint 메서드를 재정의 할 수 있지만이 방법은 많은 불쾌한 부작용을 초래할 수 있으므로 권장하지 않습니다.

더 나은 솔루션 자세한 내용은 JRootPane의 유리 창

  • 확인 here을 활용하는 것. (이 자바 7에 알려진 또는 JLayer)는 예를 들어
  • 확인 here

또한 동일한 결과를 달성하기 위해 JXLayer를 사용할 수 있지만 나는