Вопрос по j2me

Модератор: Absurd

Ответить
6acypMaH
Сообщения: 19
Зарегистрирован: 03 мар 2005, 14:01
Контактная информация:

Народ, подскажите как можно обработать кнопку SELECT на мобильнике???
Есть список типа IMPLICIT, для него и надо забиндить SELECT - выбор.
Можно ли это сделать не применяя Canvas, а если нельзя плиз приведите пример как организовать связь MIDlet & Canvas так, чтобы можно было добавлять List, StringItem, ImageItem и т.д. или придется все самому рисовать (всмысле меню)!!!!
плиз если кто знает не поленитесь ответить - буду очень признателен!!!
Deady
Сообщения: 193
Зарегистрирован: 17 фев 2004, 13:13
Откуда: Москва
Контактная информация:

в канвас - самому рисовать. он на то и канвас.
проще, можно формой воспользоваться. (Form)

Код: Выделить всё

public class AlarmSettingsForm extends Form implements CommandListener {
    Command done = null;
    Command choose = null;
    Command cancel = null;
    DateField dateField = null;
    TextField textField = null;
    TextField ring = null;
    MyAlarm alarm = null;
    private static AlarmSettingsForm instance = null;

    
    private AlarmSettingsForm() {
        super("Alarm Settings");
        dateField = new DateField("Time", DateField.DATE_TIME);
        dateField.setDate(new Date());
        append(dateField);

        done = new Command("Done", Command.ITEM, 1);
        addCommand(done);
        
        choose = new Command("Choose", Command.ITEM, 2);
        addCommand(choose);
        
        cancel = new Command("Cancel", Command.ITEM, 1);
        addCommand(cancel);
        
        setCommandListener(this);

        textField = new TextField("Label", null, 32, TextField.ANY);
        append(textField);
        
        ring = new TextField("Ringtone", null, 32, TextField.ANY);
        append(ring);
    }
    
    
    public static AlarmSettingsForm getInstance() {
        if (instance == null) instance = new AlarmSettingsForm();
        return instance;
    }
    
    public void setAlarm(MyAlarm alarm) {
        this.alarm = alarm;
        if (alarm == null) {
            dateField.setDate(new Date());
            textField.setString("");
        } else {
            dateField.setDate(alarm.getDate());
            textField.setString(alarm.getLabel());
        }
    }
    public MyAlarm getAlarm() {
        alarm.setDate(dateField.getDate());
        alarm.setLabel(textField.getString());
        return alarm;
    }
    
    
    public void commandAction(Command cmd, Displayable d) {
        if (cmd == done) {
            if (alarm == null) { //new alarm
                alarm = new MyAlarm();
                if (alarm.getLabel()!=null && !alarm.getLabel().equals("")) AlarmManager.addAlarm(getAlarm());
            } else {
                AlarmManager.updateAlarm(getAlarm());
            }
            alarm = null;
            alarmMidlet.getInstance().notifyDone(alarmMidlet.ALARM_SETTINGS_ID);
        } else if (cmd == done) {
            alarm = null;
            alarmMidlet.getInstance().notifyDone(alarmMidlet.ALARM_SETTINGS_ID);
        } else if (cmd == choose) {
            FileChooser.getInstance().show();
        }
    }
    
}

select реазилуется через list (опять же, без использования canvas):

Код: Выделить всё

/*
 * AlarmManagerForm.java
 *
 * Created on 28 Февраль 2005 г., 11:04
 */

package alarm;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


public class AlarmManagerForm extends List implements CommandListener {

    private Command close = null;
    private Command newAlarm = null;
    private Command updateAlarm = null;
    private Command deleteAlarm = null;
    private MyAlarm[] alarms = null;
    
    public AlarmManagerForm() {
        super("Alarm Manager", List.IMPLICIT);
        
        close = new Command("Close", Command.EXIT, 1);
        addCommand(close);
        
        newAlarm = new Command("New Alarm", Command.SCREEN, 1);
        addCommand(newAlarm);

        updateAlarm = new Command("Edit", Command.SCREEN, 1);
        addCommand(updateAlarm);

        deleteAlarm = new Command("Delete", Command.SCREEN, 1);
        addCommand(deleteAlarm);
        
        setCommandListener(this);
        update();

    }    
    
    public void update() {
        alarms = AlarmManager.getAlarms();
        clear();
        if (alarms == null) return;
        for (int i=0; i<alarms.length; i++) append(alarms[i].getLabel(), null);
    }
    
    
    public void clear() {
        while (size()>0) delete(0);
        //for (int i=0; i<size(); i++) delete(i);
    }
    
    public void commandAction(Command cmd, Displayable d) {
        if (cmd == close) alarmMidlet.getInstance().notifyDone(alarmMidlet.ALARM_MANAGER_ID);
        else if (cmd == newAlarm) alarmMidlet.getInstance().notifyAction(alarmMidlet.GOTO_ALARM_SETTINGS);
        else if (cmd == updateAlarm) {
            if (getSelectedIndex()<0) return;
            AlarmSettingsForm.getInstance().setAlarm(alarms[getSelectedIndex()]);
            alarmMidlet.getInstance().notifyAction(alarmMidlet.GOTO_ALARM_SETTINGS);
        } else if (cmd == deleteAlarm) {
            if (getSelectedIndex()<0) return;
            AlarmManager.deleteAlarm(alarms[getSelectedIndex()]);
            update();
        }
    }
}
6acypMaH
Сообщения: 19
Зарегистрирован: 03 мар 2005, 14:01
Контактная информация:

извени, но я тчто-то не пойму, а как же ЦЕНТРАЛЬНАЯ КНОПКА SELECT НА МОБИЛЬНИКЕ будет работь. Не вижу я вной обработки (может ее и не надо, не привычно как-то после других языков прогать).
Если не сложно поясни поконкретнее, а то вроде все эти действия я и делал!!!
Deady
Сообщения: 193
Зарегистрирован: 17 фев 2004, 13:13
Откуда: Москва
Контактная информация:

работая с MIDP на уровне high-level UI (Это все, что наследует Screen), ты не заморачиваешься за кнопки. Добавляя к форме Command, ты в конструкторе Command указываешь, где примерно будет располагаться эта команда.
updateAlarm = new Command("Edit", Command.SCREEN, 1);

например, Command.EXIT - тогда за этот command будет отвечать правая верхняя кнопка на series60.
а вообще, как создателям телефонов захочется реализовать MIDP у себя в телефоне, так и будет.

если есть желание работать с определенными кнопками, то надо юзать классы из javax.microedition.lcdui.game. Но и там свои ограничения.

ЗЫ а вообще, я заметил, Java зажата в телефоне по максимуму. даже не интересно пограммить. вот если на днях принесут мне nokia 6630, я там развернусь )
6acypMaH
Сообщения: 19
Зарегистрирован: 03 мар 2005, 14:01
Контактная информация:

большое спасибо за пояснение!!!!!
dykzei
Сообщения: 42
Зарегистрирован: 22 сен 2004, 14:35

помоему речь шла об этом?

Код: Выделить всё

public class mainList extends List implements CommandListener {

  public mainList() {
    super("пример",List.IMPLICIT);
    setCommandListener(this);
    addCommand(new Command("Выход", Command.EXIT, 1));

    append("пункт1",null);
    append("пункт2",null);
    append("пункт3",null);
    append("пункт4",null);
  }

  public void commandAction(Command command, Displayable displayable) {
    if (command.getCommandType() == Command.EXIT) {
     // выход из мидлета
    }else if(command == List.SELECT_COMMAND){
      switch(getSelectedIndex()){
        default: break;
        case 0:
         // обработка пункта1
          break;
        case 1:
         // обработка пункта2
          break;
        case 2:
         // обработка пункта3
          break;
        case 3:
         // обработка пункта4
        ;
      }
    }
  }

6acypMaH
Сообщения: 19
Зарегистрирован: 03 мар 2005, 14:01
Контактная информация:

Уже все получилось!!!
спасибо кто пытался помочь!
xbit
Сообщения: 1
Зарегистрирован: 26 июн 2005, 13:02
Контактная информация:

может я чего-то не догоняю, но КАК сделать обработку кнопки SELECT в Canvas?

какой-нибудь аналог List.SELECT_COMMAND, только для Canvas ... подскажите плиз
6acypMaH
Сообщения: 19
Зарегистрирован: 03 мар 2005, 14:01
Контактная информация:

В Canvas обрабатываешь нажатия клавиш на низком уровне.
В обработке методов keyPressed или keyReleased, или keyRepeated получаешь GameAction, а потом в зависимости какой код выработался делаешь соответствующие действия - кнопке SELECT соответсвтует FIRE!
Нам нужен МИР... желательно весь!
Ответить