Мне нужна помощь в функции отмены в Java - PullRequest
0 голосов
/ 28 ноября 2008

Я пишу текстовый редактор на Java и хочу добавить в него функцию отмены

но без класса UndoManager мне нужно использовать структуру данных, такую ​​как Stack или LinkedList, но класс Stack в Java использует параметры объекта, например: push (Object o), Not Push (String s) Мне нужны некоторые подсказки или ссылки. Спасибо

Ответы [ 4 ]

7 голосов
/ 28 ноября 2008

Если вы используете Java 5, Stack является универсальным классом. Вы можете создать его в соответствии с объектами, которые он должен содержать.

Затем вы можете использовать:

Stack<String> stack = new Stack<String>();
String string = "someString";
stack.push(string);

Также обратите внимание, что в случае, если вы используете Java 1.4 или ниже, вы все равно можете помещать объекты String в стек. Только то, что вам нужно будет явно понизить их значение, когда вы их вытолкнете (), вот так:

Stack stack = new Stack();
String string = "someString";
stack.push(string);

String popString = (String) stack.pop(); // pop() returns an Object which needs to be downcasted
3 голосов
/ 28 ноября 2008

«Структура данных», которая на самом деле является шаблоном, называется Memento . Это полезно, когда вам нужно сохранить несколько состояний и иметь возможность вернуться в предыдущее состояние. Эффективное хранение данных о состояниях зависит от того, какой текстовый редактор вы используете, если вы можете выполнить некоторое форматирование, а затем взгляните на шаблон Flyweight .

1 голос
/ 28 ноября 2008

Хммм ...

Для меня это немного похоже на случай RTFM ;-)

Если вы используете Java 1.4.2, вам просто нужно явно привести ваших объектов, когда вы получите их из стека:

Command cmd = (Command) stack.pop(); // same for peek() etc.

Если вы используете Java 1.5, используйте Generics , и явное приведение не понадобится.

0 голосов
/ 28 ноября 2008

Хорошо, я решаю это

Я должен нажать текст в тексте, а не символ с клавиатуры

спасибо, ребята

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...