2 подкласса Canvas на одной оболочке - PullRequest
0 голосов
/ 01 февраля 2012

Я хочу построить лабиринт с игроком, который двигается по доске лабиринта. Я создаю 2 подкласса Canvas: первый, который рисует лабиринт, и второй, который рисует игрок. В каждом подклассе Canvas я переопределяю метод Paint, поэтому в основном это выглядит так:

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

Итак .. мой вопрос: Что мне нужно сделать, чтобы 2 подкласса Canvas были установлены на Shell в классе ShellClass? Если я использую базовый Canvas, я пишу:

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

но что я должен написать, если это подкласс Canvas? Заранее спасибо!

1 Ответ

1 голос
/ 01 февраля 2012

При создании подкласса Canvas или Composite вы всегда должны включать конструктор с 2 аргументами, который вызывает конструктор суперкласса:

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

    ...
}

И затем вы размещаете свои подклассы так же, как и любые другие элементы управления.

...