2017-02-02 4 views
0

부모 클래스를 사용하고 싶습니다. Component (AWT GUI 클래스 중 가장 높은 클래스입니다). 프로그래밍에 초보자는 아니지만 스스로 가르치고 제 질문에 예제 코드를받는 데 문제가 있습니다. 여기에 내 코드가있다 :Java AWT에서 그래픽 드로잉을 표시하는 가장 간단한 방법은 무엇입니까?

import java.awt.Frame; 
public class DrawSquare extends Frame{ 
    public DrawSquare(){ 
     setBounds(0,0,100,100); 
     setVisible(true); 
    } 
    public static void main(String[]args){ 
     new DrawSquare(); 
    } 
} 

기본적으로 나는 부모 클래스와 똑같은 일을하고 싶다. Window (부모 클래스)는 테두리가없는 반면 Frame에는 테두리와 같은 옵션이 더 많이 포함되어 있다고 가정하고 있지만이 간단한 코드를 Frame으로 만 만들 수있었습니다.

스윙 btw가 아닌 ​​AWT를 사용하고 싶습니다. 내 테스트에 따르면

+0

질문을 이해하지 못하고 있지만 어디서부터 그래픽을 시작해야합니까? – gpasch

+0

이 프로그램은 프레임을 확장하여 화면 모서리에 정사각형 100x100을 만듭니다. 다른 것을 확장하면 표시되지 않습니다. – christgrinder

+0

어쨌든 왜 스윙을 피하기를 원하십니까? 현재 문서 (예 : [this] (https://docs.oracle.com/javase/tutorial/uiswing/painting/))는 Swing 용이며 아무 것도 사용하지 않습니다. – VGR

답변

0

: 아마도 그것은에 추가 할 무언가를 필요로하기 때문에

class C extends Component { 
    public C() { setSize(200, 200); setVisible(true); } 
    public void paint(Graphics g) { 
    g.drawRect(0, 0, 100, 100); 
    } 
} 

가 표시되지 않습니다.

class C extends Container { 
    public C() { setSize(200, 200); setVisible(true); } 
    public void paint(Graphics g) { 
    g.drawRect(0, 0, 100, 100); 
    } 
} 

은 컨테이너이므로 다른 것들이 추가되어야하므로 표시되지 않습니다.

class C2 extends Window { 
    public C2() { super(new Frame()); setLocation(100, 100); setSize(200, 200); setVisible(true); } 
    public void paint(Graphics g) { 
    g.drawRect(0, 0, 100, 100); 
    } 
} 

은 표시 할 수 있지만 작업 표시 줄에 표시되지 않으므로 어딘가에 추가하지 않으면 쓸모없는 것입니다.

그래서

class C extends Frame { 
    public C() { setSize(200, 200); setVisible(true); } 
    public void paint(Graphics g) { 
    g.drawRect(0, 0, 100, 100); 
    } 
} 

는 구성 요소와 컨테이너 모두가 그 첫 번째로 당신의 솔루션입니다.

+0

고마워요, 이것은 제가 찾고 있던 것입니다. super라는 키워드를 사용하지 않았기 때문에 Window를 작동시키는 방법을 알아낼 수 없었습니다. 저는이 일을하고있었습니다 : public C (Window owner) {}. 이제는 옵션으로 창이 있지만 복잡한 것처럼 보입니다. 나는 캔버스로 주변을 둘러 보았지만 그 중 하나를 표시 할 수 없었다. 컴포넌트 및 컨테이너가 표시되지 않는 이유에 대해 지정한 이유를 이미 알게되었습니다. – christgrinder

+0

오버라이드 (override)되는 paint 메소드의 각각은, 최초로 super 메소드를 호출 할 필요가 있습니다. '가장 단순한'접근 방식이 항상 강하지는 않습니다. –