2012-02-01 5 views
0

미로 보드로 이동하는 플레이어와 함께 미로를 만들고 싶습니다. 나는 2 개의 서브 클래스 인 Canvas을 생성한다. 미로를 그리는 첫 번째 선수와 선수를 그리는 secend. 내가 Paint의 메소드를 오버라이드 (override) Canvas의 모든 서브 클래스에서 그렇게 basicly은 다음과 같습니다Canvas의 서브 클래스가 하나의 쉘에

public class MazeCanvas extends Canvas { 

// override 
public void paint(Graphics win) { 
} 

} 

public class PlayerCanvas extends Canvas { 

// override 
public void paint(Graphics win) { 
} 

} 

public class ShellClass implements ActionListener { 
public void run() { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.open(); 
      Button goButton = new Button(shell, SWT.PUSH); 
      goButton.addActionListener(shell); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 
    public void actionPerformed(ActionEvent e) { 

    if (e.getSource() == goButton) { 
     //here I want to repaint the obj of PlayerCanvas ; 
    } 
    } 

그래서 .. 내 질문은 : 무엇을 내가 Canvas의 두 서브 클래스가 될 것이라고 위해해야 ​​할 ShellShellClass에 설정 하시겠습니까? 내가 Canvas를 기본 사용하는 경우 내가 쓰기 :

Canvas canvas = new Canvas(shell, SWT.MAX); 

하지만 나는 그것이 Canvas의 서브 클래스 인 경우에 작성해야합니까? 미리 감사드립니다.

답변

1

Canvas 또는 Composite 서브 클래스, 당신은 항상 슈퍼 클래스의 생성자를 호출이 개 인수 생성자, 포함해야한다 :

public class MazeCanvas extends Canvas { 
    public MazeCanvas(Composite parent, int style) { 
     super(parent, style); 
     ... // anything else you need to initialize your subclass 
    } 

    ... 
} 

을 그리고 당신은 당신의 서브 클래스는 다른 컨트롤을 배치하는 것과 동일한 방식으로 배치합니다.

+0

이 시도했지만 오류가 발생했습니다 '생성자 캔버스 (합성, int) 정의되지 않았습니다' – URL87

+0

그것은 정의됩니다 : http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc. isv/reference/api/org/eclipse/swt/widgets/Canvas.html # Canvas (org.eclipse.swt.widgets.Composite, % 20int) 그리고 여러분의 질문은이 생성자를 호출 할 수 있음을 보여줍니다. 그래서 나는이 오류가 어떻게 나타날 수 있는지 보지 못했다. –

+1

"import java.awt.Canvas"를 "import org.eclipse.swt.widgets.Canvas"로 변경하고 이제는 작동합니다! 감사 ! – URL87

관련 문제