|  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) 
 |