Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition

JAVA Micro Edition Низкоуровневое программирование мобильных телефонов.

Ответ
 
Опции темы
Старый 05.11.2008, 15:31   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Получение команд в формах

Впервые решил использовать формы в Java, точнее TextBox. И у меня ни в какую не получается отловить нажатие команд. Смотрите. Я добавляю две команды com1 и com2. Они появляются под софтовыми клавишами. Отлавливаю в commandAction нажатую команду, сохраняю её в переменной. А после ТекстБокса делаю цикл:
while(com==null) Thread.sleep(80);
, где com - это переменная из commandAction. И цикл никогда не прерывается. Я, видимо, как-то жёстко не так делаю.
(Offline)
 
Ответить с цитированием
Старый 05.11.2008, 16:10   #2
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Получение команд в формах

Не надо ничего сохранять в переменной. Просто в commandAction создаешь такие конструкции:
public void commandAction(Command c, Displayable d)
{
if (c==ExitMidlet)
{
//операторы
}

if (c==Ok)
{
//операторы
}
//и т. д.
}
Где ExitMidlet, Ok - имена твоих команд.
(Offline)
 
Ответить с цитированием
Старый 05.11.2008, 16:45   #3
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Мля. Видел я такой пример. Не катит. Мне не нужно обрабатывать внутри commandAction. Хотя... Есть идея... Но это несколько криво будет...
(Offline)
 
Ответить с цитированием
Старый 05.11.2008, 18:58   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Получение команд в формах

Посмотри, как это в MP реализовано, там же можно обрабатывать комманды за пределами commandAction.
(Offline)
 
Ответить с цитированием
Старый 05.11.2008, 20:04   #5
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Я посмотрел. Там что-то очень странное и невнятное. И как я понял он там только одну команду обрабатывает. А если две? Или более? Ужос.
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 02:02   #6
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Блин. Как только уже не пробовал. По всем показателям commandAction просто напросто не вызывается вообще! ТекстБокс вызывается, команды вырисовываются (две кнопки "Далее" и "Назад"), но при нажатии на них ничего не происходит. Версия, что мидлет зависает по какой-то причие после нажатия на командную кнопку, не имеет места, так как если убираю цикл ожидания нажатия, то программа выполняется дальше, просто ТекстБокс появляется и мгновенно исчезает. Памагите :'(
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 02:42   #7
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Что-то мне сдаётся, что не работает setCommandListener. Он вообще для чего? Я просто по аналогии делал, всё вроде понятно, кроме этого метода. Но компилируется нормально.
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 08:18   #8
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Получение команд в формах

setCommandListener как раз и заставляет систему сделать активным обработчик commandAction указанного объекта.
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 14:37   #9
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

ViNT, вот! Я так и подумал! Видимо проблема в нём. commandAction не вызывается вообще. Может я setCommandListener как-то не так вызываю? Я ему передаю в качестве параметра экземпляр класса implements CommandListener. Блин. Я уже сутки не могу заставить обрабатываться команды.
- - -
Во всех примерах, что я видел, implements CommandListener делают главный класс мидлета. Это имеет значение? У меня отдельный класс для этого использован.

Последний раз редактировалось Phantom, 06.11.2008 в 14:54.
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 15:58   #10
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Получение команд в формах

Собственно, нужно указывать используемый в данный момент объект - отображаемую форму, Canvas и т.д.
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 16:07   #11
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Не, я имею ввиду в скобочках круглых.
Я пишу так:
tb.setCommandListener(f); 
, где:
tb - это ТекстБокс
f - это я не знаю как назвать правильно. Короче класс имеет вид:
public class functions implements CommandListener
 public static 
functions f// вот она переменная f
. . .
 { 
Что же не так?
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 16:12   #12
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Получение команд в формах

TextBox tx = new TextBox("", "", 10, 0);
tx.setCommandListener(объект класса, который implements CommandListener);
ну и в том классе
public void commandAction(Coomand c, Displayable d){
if(d==tx){....}
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 16:15   #13
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Так. Напишу-ка я собственно всё:
import javax.microedition.lcdui.*;

 public class 
functions implements CommandListener{
// ***********************************
 
public static functions f;
 public static 
Command com1;
 public static 
Command com2;
 public static 
Display d;
 public static 
Displayable cd;
 public static 
int com;
// ***********************************
 
public void commandAction(Command c,Displayable d){
   if(
c==com1com=1;
   else if(
c==com2com=2;
   else 
com=3;
   
a.a.destroyApp(true); // Это временно воткнул, чтобы узнать, когда же наконец этот метод вызовется!
 
}
// ***********************************
 
public static String textbox(String title,int size,int othrows Exception{
   
String s=null;
   
com=0;
   
TextBox tb=new TextBox(title,"",size,o);
   
d.setCurrent(tb);
   
com1=new Command("Ok",Command.OK,1);
   
com2=new Command("Назад",Command.BACK,2);
   
tb.addCommand(com1);
   
tb.addCommand(com2);
   
tb.setCommandListener(f);
   
c.repaint();
   
c.serviceRepaints();
   while(
com==0Thread.sleep(80);
   if(
com==1s=tb.getString();
   
d.setCurrent(c);
   return 
s;
 }
// ***********************************

По моей логике работать это должно так:
Из класса, в котором выполняется основная часть программы будет вызываться метод functions.textbox(), который должен вывести на экран ТекстБокс, ожидать пока пользователь введёт в него что-нибудь, потом нажмёт одну из двух командных клавиш: "Ok" и "Назад". При нажатии "Ok" метод должен возвратить текст, набранный в ТекстБоксе, при нажатии "Назад" метод должен возвратить null. Кроме того ТекстБокс должен переключиться обратно в канвас. Вот. Возможно криво объяснил, так как терминалогия Java у меня до сих пор подхрамывает.
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 18:48   #14
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Сделал implements CommandListener главный класс мидлета и всё заработало... Идиотизм какой-то... Где связь?
(Offline)
 
Ответить с цитированием
Старый 06.11.2008, 20:17   #15
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Получение команд в формах

   c.repaint();
   c.serviceRepaints();
   while(com==0) Thread.sleep(80);
   if(com==1) s=tb.getString();
вот это прошу прощения, полный идиотизм с точки зрения программирования. Java - объектный язык и обработка событий нормальный способ взаимодействия.
скажите зачем системе в цикле проверять com==1? если при нажатии "ОК" мы просто начнем выполнять код?
Не идите на поводу методики МР, она во многом ущербна из-за желания автора упростить язык.

public class Main extends MIDlet implements CommandListener{
    
    public static Display display;
    public static TextBox tb;
    public Command cmdOK = new Command("OK", Command.OK, 0);
    public Command cmdBack = new Command("Назад", Command.BACK, 0);
    
    public void startApp() {
        display = Display.getDisplay(this);
        display.setCurrent(tb = new TextBox("Введите", null, 50, TextField.ANY));
        tb.addCommand(cmdOK);
        tb.addCommand(cmdBack);
        tb.setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        if(d==tb && c == cmdOK)
            display.setCurrent(new Form("Вы ввели", new Item[] {new StringItem("Введено", tb.getString())}));
    }
примерно так.

Последний раз редактировалось Piligrim, 06.11.2008 в 20:35.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка и получение сообщения по TCP протоколу Electron19 Основной форум 4 11.07.2009 19:31
Получить значение по индексу snikers BlitzMax 4 22.11.2008 19:24
Получение собственного номера телефона и т.п. ARV Основной форум 11 27.02.2008 08:08
Stats: отсылка и получение Taugeshtu 2D-программирование 3 15.01.2008 21:54


Часовой пояс GMT +4, время: 00:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com