Вопрос по j2me
Модератор: Absurd
Народ, подскажите как можно обработать кнопку SELECT на мобильнике???
Есть список типа IMPLICIT, для него и надо забиндить SELECT - выбор.
Можно ли это сделать не применяя Canvas, а если нельзя плиз приведите пример как организовать связь MIDlet & Canvas так, чтобы можно было добавлять List, StringItem, ImageItem и т.д. или придется все самому рисовать (всмысле меню)!!!!
плиз если кто знает не поленитесь ответить - буду очень признателен!!!
Есть список типа IMPLICIT, для него и надо забиндить SELECT - выбор.
Можно ли это сделать не применяя Canvas, а если нельзя плиз приведите пример как организовать связь MIDlet & Canvas так, чтобы можно было добавлять List, StringItem, ImageItem и т.д. или придется все самому рисовать (всмысле меню)!!!!
плиз если кто знает не поленитесь ответить - буду очень признателен!!!
в канвас - самому рисовать. он на то и канвас.
проще, можно формой воспользоваться. (Form)
select реазилуется через list (опять же, без использования canvas):
проще, можно формой воспользоваться. (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();
}
}
}
извени, но я тчто-то не пойму, а как же ЦЕНТРАЛЬНАЯ КНОПКА SELECT НА МОБИЛЬНИКЕ будет работь. Не вижу я вной обработки (может ее и не надо, не привычно как-то после других языков прогать).
Если не сложно поясни поконкретнее, а то вроде все эти действия я и делал!!!
Если не сложно поясни поконкретнее, а то вроде все эти действия я и делал!!!
работая с 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, я там развернусь )
updateAlarm = new Command("Edit", Command.SCREEN, 1);
например, Command.EXIT - тогда за этот command будет отвечать правая верхняя кнопка на series60.
а вообще, как создателям телефонов захочется реализовать MIDP у себя в телефоне, так и будет.
если есть желание работать с определенными кнопками, то надо юзать классы из javax.microedition.lcdui.game. Но и там свои ограничения.
ЗЫ а вообще, я заметил, Java зажата в телефоне по максимуму. даже не интересно пограммить. вот если на днях принесут мне nokia 6630, я там развернусь )
большое спасибо за пояснение!!!!!
помоему речь шла об этом?
Код: Выделить всё
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
;
}
}
}
Уже все получилось!!!
спасибо кто пытался помочь!
спасибо кто пытался помочь!
может я чего-то не догоняю, но КАК сделать обработку кнопки SELECT в Canvas?
какой-нибудь аналог List.SELECT_COMMAND, только для Canvas ... подскажите плиз
какой-нибудь аналог List.SELECT_COMMAND, только для Canvas ... подскажите плиз
В Canvas обрабатываешь нажатия клавиш на низком уровне.
В обработке методов keyPressed или keyReleased, или keyRepeated получаешь GameAction, а потом в зависимости какой код выработался делаешь соответствующие действия - кнопке SELECT соответсвтует FIRE!
В обработке методов keyPressed или keyReleased, или keyRepeated получаешь GameAction, а потом в зависимости какой код выработался делаешь соответствующие действия - кнопке SELECT соответсвтует FIRE!
Нам нужен МИР... желательно весь!