2012-01-25 2 views
3

Graphics도 모두 Graphics2D에 포함되어있는 경우 왜 기본값이 Graphics2D이 아니겠습니까?
거의 모든 그림을 재정의하여 Graphics2D 개체를 캐스팅/만들 것 같습니다.왜 Swing은 'Graphics2D'가 아닌 'Graphics'를 기본으로합니까?

@Override 
public void paintComponent(Graphics paramGraphics){ 
    super.paintComponent(paramGraphics); 
    Graphics2D g = (Graphics2D) paramGraphics.create(); 
    // RenderingHints etc. 
} 
+0

모든 그래픽이 실제로 Graphics2D로 보장되는 것은 아닙니다. 예, 그렇습니다. 화면에 그려 넣으면 믿습니다. 그러나 인쇄하는 경우 항상 그렇지 않을 수도 있습니다. –

답변

3

Graphics 만 지원하는 AWT와의 호환성. Swing의 구성 요소는 Graphics 개체를 반환하는 getGraphics 메서드가있는 java.awt.Component을 확장합니다. Swing이 생성되었을 때 (Java 1.1/1.2) Java는 공분산을 알지 못했습니다. 반환 유형이 메소드의 서명에 포함되지 않은 경우에도 다른 (원래의 서브 클래스) 리턴 유형을 가진 대체 메소드는 허용되지 않습니다. 오늘날의 언어 기능을 사용하면이 작업이 허용되며 다르게 수행됩니다. 즉, 반환 유형이 Graphics2D으로 변경됩니다. 그 당시 유일한 방법은 새 메서드 (예 : getGraphics2D)를 추가하거나 AWT와의 상호 운용성을 완전히 없애는 것입니다.

+0

1.7에서도 contravariant 매개 변수를 사용할 수 없습니다.이 매개 변수는 아마도 가장 오래된 (1D?)'Graphics'을 자주 보게됩니다. 좀 더 구체적인 리턴 타입을 위해서'create2D'와 같은 것이 트릭을 할 수있었습니다. –