- Удалить
TurtleGraphics TG = new TurtleGraphics();
- Заменить
TG
на this
Это должно привести вас в правильном направлении.
@ Редактировать
Хорошо, у нас нет кода для TurtleGraphics, поэтому мы не можем сказать 100%, но:
Первое: в вашем gui задании вы определяете
TurtleGraphics TG = new TurtleGraphics();
theTurtle turtle = new theTurtle();
TurtleGraphics ETG = new ExtendedTurtleGraphics();
Итак то, что вы создали здесь, имеет такую структуру
TurtleGraphics TG
theTurtle turtle
ExtendedTurtleGraphics ETG {
TurtleGraphics TG // You define a new instanct of TurtleGraphics called TG in the ETG object
theTurle turtle // You defined a new instance of theTurtle called turtle in the ETG object
}
Обратите внимание, что теперь у вас есть два объекта turtle и два объекта TurtleGraphicsObject (или фактически три, потому что ETG также является TurtleGraphics, как только он расширяет TurtleGraphics)
Хорошо, тогда в функции «about» ExtendedTurtleGraphics вы запускаете команды для «черепахи», но имейте в виду, что команды выполняются для следующей черепахи:
TurtleGraphics TG
theTurtle turtle
ExtendedTurtleGraphics ETG {
TurtleGraphics TG
theTurle turtle // <- this one
}
Так что в основном «черепаха» Вы определили в классе "мой GUI" не меняется, когда вы запускаете метод "о" в ETG. Это объясняет, почему вывод консоли работает в методе about, но вы ничего не увидите.
Исправление было бы удалить две строки при инициализации My Gui:
TurtleGraphics TG = new TurtleGraphics(); // remove this one
theTurtle turtle = new theTurtle(); // remove this one
TurtleGraphics ETG = new ExtendedTurtleGraphics();
Затем удалите эту строку из ExtendedTurtleGraphics:
TurtleGraphics TG = new TurtleGraphics(); // Remove this one
В ExtendedTurtleGraphics заставьте theTurtle опубликовать c. После этого ваша структура будет выглядеть следующим образом:
My Gui: ExtendedTurtleGraphi c ETG {// Объект ExtendedTurtleGraphics представляет собой TurtleGraphi c
the Turle Turtle}
И теперь в моем классе Gui замените все вхождения "TG" на "ETG" и все вхождения "turtle" на "ETG.turtle"
Это означает, что каждый раз, когда вы хотите что-то с turtle ваш доступ к экземпляру turtle из ETG, а затем, когда вы вызываете метод about в ExtendedTurtleGraphics, вы изменяете тот же объект.
@ Второе редактирование:
Добавление конструктора в MyActionListener с аргументом ETG, например:
class MyActionListener implements ActionListener {
private ExtendedTurtleGraphics ETG;
public MyActionListener(ExtendedTurtleGraphics ETG){
this.ETG = ETG;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == commandbox) {
String command = commandbox.getText();
isSaved = false;
ETG.turtle.getCommand(command, ETG);
commandbox.setText("");
}
}
}
В My Gui измените регистрацию слушателя Action следующим образом:
commandbox.addActionListener(new MyActionListener(ETG));