2013-05-30 3 views
1
public class Points extends JPanel { 

    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D) g; 

    g2d.drawLine(60, 20, 80, 90); 
} 
} 

나는 Graphics2D g2d = (Graphics2D) g;이 무엇을해야할 지 잘 모르겠다.자바 - 스윙 - 그래픽 2D

이것은 JFrame에 나중에 추가되는 단순한 JPanel입니다.

오랫동안 코드의이 줄을 붙잡고있는 누군가가 나에게 조언을 해줄 수 있다면 정말 도움이 될 것입니다.

답변

1

성명은

Graphics2D g2d = (Graphics2D) g; 

단지 Graphics2DGraphics 개체를 캐스팅합니다. Graphics2D에서 제공하는 메소드에 액세스하는 데 사용됩니다. 당신이 그런 rotatetranslate과 고급 방법에 대한 요구 사항이없는, 그래서 만약 GraphicsdrawLine 방법이있다이 경우 불필요한, 당신은

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawLine(60, 20, 80, 90); 
} 
+0

개체로이 작업을 수행 할 수 있다는 것을 알지 못했습니다. 임 꽤 프로그래밍에 익숙하지 않고 기초에 대해 배웠을 때 코딩에 뛰어 들었으므로 튜토리얼에서 건너 뛴 부분이 많습니다. – user2347921

+0

마지막으로 한 가지만 객체를 하위 클래스로 캐스팅 할 수 있습니다 , 권리 ? – user2347921

+0

서브 클래스뿐만 아니라. 이 경우'Graphics2D'는'Graphics'의 서브 클래스이므로 참조'g'를 캐스트하거나 더 정확하게 캐스팅합니다.그러나 더 일반적으로 Object가 인터페이스를 구현하면 해당 인터페이스에도 캐스트 할 수 있습니다. Object ** is-a ** 유형의 다른 객체를 제공 할 수 있습니다. – Reimeus

1

이전 Java 코드와의 호환성 문제입니다. Graphics2D 짧은 Graphics 더 강력하다 : 문서에 설명 된대로

Graphics2D

Graphics에서 상속 및 몇 가지 추가 그래픽 기능을 제공하는 클래스입니다.

이제 방법 paintComponent(Graphics g)Graphics2D 그렇게하더라도 현재의 Java와 JPanel의 후드 아래에있는 그래픽이 Graphics2D 전에부터 존재, 서명은 기존의 암호를 해독하기 위해 변경되지 않았습니다.

런타임에 g이 전달되면 Graphics2D이지만보다 고급 작업을 호출 할 수 있도록 캐스트해야합니다.

0

는 그것은으로 그래픽스 문맥을 캐스팅 사용할 수 있습니다 Graphics2D 개체입니다. Graphics2D은 보통 Graphics 개체로는 회전, 변형, 앤티 엘리 어싱 등을 허용하지 않기 때문에 유용합니다. Graphics2D을 사용할 때 Graphics에서 사용할 수있는 모든 방법을 사용할 수 있습니다.

0

Graphics2D으로 g을 전송하면 Graphics2D 클래스의 고급 기능을 사용할 수 있습니다.