2 subclase de Canvas en una sola carcasa

Quiero construir un laberinto con jugadores que se muevan en el tablero del laberinto. Creo 2 subclases Canvas: el primero en dibujar el laberinto y el segundo en dibujar al jugador. En cada subclase de Canvas Anulo el método de Paint tan básicamente se ve así:

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  ; 
    }
    }

Entonces ... mi pregunta es: ¿qué tengo que hacer para que las 2 subclases de Canvas se establecerá en el Shell en la clase ShellClass? Si uso básico Canvas Yo escribo :

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

pero que tengo que escribir si es una subclase de Canvas? ¡Gracias por adelantado!

preguntado el 01 de febrero de 12 a las 04:02

1 Respuestas

Al subclasificar Canvas or Composite, siempre debe incluir un constructor con 2 argumentos, que llame al constructor de superclase:

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

    ...
}

Y luego colocas tus subclases de la misma manera que colocarías cualquier otro control.

Respondido 01 Feb 12, 11:02

Intenté esto pero obtengo el error 'El constructor Canvas (Composite, int) no está definido' - URL87

@ URL87 Está definido: help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/… Y su pregunta muestra que puede llamar a este constructor. Entonces no veo cómo podría aparecer este error. - Alexey Romanov

Tenía "import java.awt.Canvas", lo cambié a "import org.eclipse.swt.widgets.Canvas" y ahora funciona. Gracias ! - URL87

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.