Java-программирование (1-ые посты) 28.11.2014 / 16:55 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Цитата RblSb: Проблема в том, что я не знаю как остановить исполнение кода в менюТы же совсем не про это спрашивал, а про CommandListener? Два разных вопроса, имхо. При переходе на другой экран, "выполнение кода" в меню и так прекращается, только поток на паузу поставь (там флаг поставь в цикл).
__________________
let live Изменено aNNiMON (28.11 / 16:56) (всего 1 раз) |
28.11.2014 / 17:00 | | RblSb Пользователь Сейчас: Offline
Регистрация: 25.07.2011
| aNNiMON, так и делаю
l.run=false; //флаг для run() на отрисовку в цикле t.interrupt(); //теперь можно завершить поток new WriteText().text(1,"Ширина карты",""+Map.mapx,3,TextField.NUMERIC); //текстбокс selectmenu(screen); //обновление текста меню, по идее должно происходить после выхода из текстбокса, но судя по отладке происходит сразу после перехода в текстбокс
именно поэтому решил делать обработку команд отдельно от CommandAction, ибо так реализовано в МП-исходнике.
Изменено RblSb (28.11 / 17:02) (всего 2 раза) |
28.11.2014 / 17:02 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| RblSb, кстати, анонимный класс тебе в помощь. Вот вместо: new WriteText().text("Текст",""+Map.name,3,TextField.NUMERIC);
Map.name=WriteText.gtext;
Можно написать: final TextBox textbox = new TextBox("Текст",""+Map.name,3,TextField.NUMERIC);
textbox.addCommand(new Command("Назад",Command.BACK,2));
textbox.addCommand(new Command("OK",Command.OK,1));
textbox.setCommandListener(new CommandListener() {
public void commandAction(Command command,Displayable displayable) {
if (command == ok) {
Map.name = textbox.getString();
}
Main.display.setCurrent(backscreen);
}
});
Ну и переключения экрана, остановка потока остаются в силе. Правда я хз, поможет ли это, зато от статического поля избавишься, Map.name будет напрямую изменяться по нажатию ok в текстбоксе. __________________
let live Изменено aNNiMON (28.11 / 17:08) (всего 4 раза) |
28.11.2014 / 17:08 | | RblSb Пользователь Сейчас: Offline
Регистрация: 25.07.2011
| aNNiMON, сударь, похоже на то что нужно, сейчас буду пробовать правда несколько многовато каждый вызов текстбокса писать нужно, но это после трех дней поиска инфы уже не волнует. |
28.11.2014 / 17:09 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| RblSb, я так понимаю, таких текстбоксов у тебя много? Можно, чтоб каждый раз не создавать новый текстбокс, использовать старый. В общем, подробнее с кодом распиши, поможем.
__________________
let live Изменено aNNiMON (28.11 / 17:10) (всего 1 раз) |
28.11.2014 / 17:20 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| RblSb, ну какой еще "вызов текстбокса"? Достаточно приостановить поток канваса (флаг установить, можно даже не завершать поток, а пусть ганяет вхолостую пока ты вводишь что-то, например boolean input = false, run = true;
final TextBox textbox = new TextBox("Текст",""+Map.name,3,TextField.NUMERIC);
textbox.addCommand(new Command("Назад",Command.BACK,2));
textbox.addCommand(new Command("OK",Command.OK,1));
textbox.setCommandListener(new CommandListener() {
public void commandAction(Command command,Displayable displayable) {
if (command == ok) {
Map.name = textbox.getString();
}
Main.display.setCurrent(MyMenuCanvas.this);
input = false;
}
});
public void run() {
while (run) {
if (input) { try { Thread.sleep(300); } catch (InterruptedException ex) {} continue; }
// А тут пошла отрисовка меню
}
}
public void keyPressed(int keyCode) {
if (keyCode == 53) { input = true; Main.display.setCurrent(textbox); }
// ....
}
Изменено Naik (28.11 / 17:22) (всего 2 раза) |
28.11.2014 / 19:12 | | RblSb Пользователь Сейчас: Offline
Регистрация: 25.07.2011
| aNNiMON, сударь, нет, в общем получается не больше 4-ех в разных классах. А как можно твой код зациклить? То есть чтобы после закрытия одного текстбокса появлялся другой.
|
28.11.2014 / 19:14 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| RblSb, Зачем? Просто обрабатывать нажатие кнопки и очищать, Забудь про паскал, почитай про событийную модель интерфейса. http://ru.m.wikipedia.org/wiki...ное_программированиеП.С. потоки зашиты в прошивку, тебе не нужно никаких потоков на формах, только обработчики событий. Изменено Naik (28.11 / 19:20) (всего 3 раза) |
28.11.2014 / 19:26 | | RblSb Пользователь Сейчас: Offline
Регистрация: 25.07.2011
| Naik, потому что мне нужно ввести два текста за одно нажатие, и цикл - самое простое решение. Хотя может в этом случае больше подойдет TextField, но он некрасивый гг.
Изменено RblSb (28.11 / 19:27) (всего 1 раз) |
28.11.2014 / 19:28 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| RblSb, При первом нажатии кнопки Ок сохраняешь текст в строке 1, очищаешь поле, при втором сохраняешь в строке 2 и закрываешь. И хоть целый массив так заполняй
Изменено Naik (28.11 / 19:29) (всего 1 раз) |
Всего сообщений: 16875 Фильтровать сообщения Поиск по теме Файлы топика (794)
|