Форум: "Прочее";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизJava - как вам оно Найти похожие ветки
← →
VirEx © (2006-07-22 16:51) [40]
> [38] iZEN © (22.07.06 16:26)
> В J2ME классов ArrayList и LinkedList нет, так что используйте
> Vector.
о чем и речь
> О, ужас. Вы что читали? Какие книги такие пространные примеры
> приводят?
я ничего не читал, и это рабочий пример
> Для конкатенации строк лучше использоать класс StringBuffer,
> а не прямое присваивание s1 + s2/ Пример:
> StringBuffer sbf = new StringBuffer();
> String result = sbf.append(s1).append(s2);
>
> Неплохо бы изучить Java Collection Framework.
я не приводил работу со строками, о чем это вы? :)
а еще можно же так: s+=s1
учить Java Collection Framework? вы об этом? :) :
String str = "abc";
char data[] = {"a", "b", "c"};
String str = new String(data);
String cde = "cde";
String c = "abc".substring(2,3);
String d = cde.substring(1, 2);
к тому же каждый класс по своему имеет плюсы и минусы при использовании в конкретных задачах (StringBuffer хорош в многопоточных приложениях - "String buffers are safe for use by multiple threads."), поэтому всё зависит от ситуации (String после компиляции не так сильно увеличит размер апплета чем StringBuffer, или я не прав?)
конкатенация (от concat) - не думаю что это включат в русский словарь поэтому не стОит увлекаться "американизацией"/"янкинизацией", иначе вас другие не поймут :)
> В Eclipse нажать в редакторе [Ctrl]+[Shift]+[T] и код автоматически
> отформатируется. Настроить свои правила форматирования можно
> в настройках редактора java-кода среды.
у меня и так машина слабая, какие еще IDE, да еще и на яве?
юзаю AsmEdit 2.2, хотя сейчас больше пользую Notepad++
← →
VirEx © (2006-07-22 17:18) [41]
> iZEN
посмотрел я на вашем сайте примеры мидлетов на j2me - почему не используете switch?:
public void commandAction(Command c, Displayable d) {
if (c == splash.getMoreCommand()) {
splash.suspend();
//ball.start();
Display.getDisplay(this).setCurrent(game);
} else if (c == splash.getExitCommand()) {
splash.suspend();
ball.pause();
this.destroyApp(true);
} else if (c == game.getStartGameCommand()) {
можно так:
public void commandAction(Command c, Displayable d) {
switch(c) {
case(splash.getMoreCommand()){
splash.suspend();
Display.getDisplay(this).setCurrent(game);
}
break;
case(splash.getExitCommand()){
splash.suspend();
ball.pause();
this.destroyApp(true);
}
break;
default: /* to do */ ;
}
← →
DiamondShark © (2006-07-22 17:34) [42]
> можно так:
А точно можно? Неконстантные выражения в case?
← →
VirEx © (2006-07-22 18:07) [43]
> [42] DiamondShark © (22.07.06 17:34)
>
> > можно так:
>
> А точно можно? Неконстантные выражения в case?
а что мешает объявить новую переменную как константу (final) и присвоить ей значение "неконстанты"?
его класс:
package floresiris.livetech.ball.ui;
...
public class Splash extends PopupForm {
private Command more, exit;
private ImageItem splashImage;
/**
* Конструктор без параметров.
*/
public Splash(String title) {
super(title);
more = new Command(I18NResources.getString(I18NResources.ID_GAME_MORE), Command.OK, 1);
exit = new Command(I18NResources.getString(I18NResources.ID_GAME_EXIT), Command.EXIT, 2);
this.addCommand(more);
this.addCommand(exit);
try {
String path = "/images/firefox.png";
Image image = Image.createImage(path);
splashImage = new ImageItem(I18NResources.getString(I18NResources.ID_GAME_NAME), image, ImageItem.LAYOUT_CENTER, "");
this.append(splashImage);
} catch (Exception e) {}
}
public Command getMoreCommand() {
return more;
}
public Command getExitCommand() {
final Command e_= exit;
return e_;
}
}
← →
VirEx © (2006-07-22 18:10) [44]хм... с int проходит а с Command нет :(
← →
VirEx © (2006-07-22 18:22) [45]тогда делаем так (ограничиваемся типами команд):
public int getExitCommand() {
return exit.getCommandType();
}
а ловим так:
public void commandAction(Command c, Displayable d) {
switch(c) {
case(Command.EXIT){
splash.suspend();
ball.pause();
this.destroyApp(true);
}
break;
← →
iZEN © (2006-07-22 18:25) [46]
> VirEx © (22.07.06 16:51) [40]
> > [38] iZEN © (22.07.06 16:26)
> > Для конкатенации строк лучше использоать класс StringBuffer,
>
> > а не прямое присваивание s1 + s2/ Пример:
> > StringBuffer sbf = new StringBuffer();
> > String result = sbf.append(s1).append(s2);
> >
> > Неплохо бы изучить Java Collection Framework.
>
> я не приводил работу со строками, о чем это вы? :)
это к слову пришлось. Потому что многие начинающие, не зная основ строк java пытаются в цикле формировать длинную строку. И конечно получают жуткие тормоза. Ведь конкатенация (присоединение) строк друг к дружке в 100-200 раз медленнее, чем это можно сделать через StringBuffer.
> VirEx © (22.07.06 16:51) [40]
> а еще можно же так: s+=s1
>
> учить Java Collection Framework? вы об этом? :) :
> String str = "abc";
> char data[] = {"a", "b", "c"};
> String str = new String(data);
> String cde = "cde";
> String c = "abc".substring(2,3);
> String d = cde.substring(1, 2);
Нет. Это другое.
Collection Framework API создавался для удобного манипулирования списком объектов, вернее, ссылками на группу объектов, которые могут быть разных типов (принадлежать к разным классам). К нему относятся интерфейсы Map, List и др. классы-контейнеры, которые могут хранить и манипулировать хранящимися ссылками на другие объекты.
> VirEx © (22.07.06 16:51) [40]
>
> к тому же каждый класс по своему имеет плюсы и минусы при
> использовании в конкретных задачах (StringBuffer хорош в
> многопоточных приложениях - "String buffers are safe for
> use by multiple threads."), поэтому всё зависит от ситуации
> (String после компиляции не так сильно увеличит размер апплета
> чем StringBuffer, или я не прав?)
Не сильно. Это из разряда: "экономия на спичках" выливается в тормозааа.
> VirEx © (22.07.06 16:51) [40]
>
> конкатенация (от concat) - не думаю что это включат в русский
> словарь поэтому не стОит увлекаться "американизацией"/"янкинизацией",
> иначе вас другие не поймут :)
Конкатенация - сложение - общеупортебимый в информатике термин.
> VirEx © (22.07.06 16:51) [40]
>
> > В Eclipse нажать в редакторе [Ctrl]+[Shift]+[T] и код
> автоматически
> > отформатируется. Настроить свои правила форматирования
> можно
> > в настройках редактора java-кода среды.
>
> у меня и так машина слабая, какие еще IDE, да еще и на яве?
Eclipse писалась с прицелом на эффективное использование на обычных машинах. Внутри используются нативные вызовы для построения интерфейса (GUI) средствами операционной системы.
> VirEx © (22.07.06 16:51) [40]
>
> юзаю AsmEdit 2.2, хотя сейчас больше пользую Notepad++
Напрасно. Редакторы с подсветкой синтаксиса хороши, когда нужно просто смотреть код. Но когда дело доходит до рефакторинга кода, то IDE незаменимы.
> VirEx © (22.07.06 17:18) [41]
> > iZEN
> посмотрел я на вашем сайте примеры мидлетов на j2me - почему
> не используете switch?
Потому что switch неэффективен. И ссылки не понимает. Понимает только объекты примитивного типа int и константы типа char.
← →
VirEx © (2006-07-22 18:30) [47]
> [45] VirEx © (22.07.06 18:22)
т.е.
ловим так:
public void commandAction(Command c, Displayable d) {
switch(с.getCommandType()) {
case(Command.EXIT){
splash.suspend();
ball.pause();
this.destroyApp(true);
}
break;
← →
DiamondShark © (2006-07-22 19:20) [48]
> Потому что switch неэффективен. И ссылки не понимает. Понимает
> только объекты примитивного типа int и константы типа char.
Ограничение примитивными типами как раз и позволяет сделать switch максимально эффективным.
А вообще, странный какой-то switch, подозрительный.
Параметр Command c -- какой-то сложный объект?
А методы getXXX возвращают те же экземпляры, что приходит в пораметр?
Бр-рр... Ну и зависимости...
← →
iZEN © (2006-07-22 19:49) [49]
> VirEx © (22.07.06 18:22) [45]
>
> тогда делаем так (ограничиваемся типами команд):
> public int getExitCommand() {
> return exit.getCommandType();
> }
>
> а ловим так:
> public void commandAction(Command c, Displayable d) {
> switch(c) {
> case(Command.EXIT){
> splash.suspend();
> ball.pause();
> this.destroyApp(true);
> }
> break;
Это ты что хотел этим показать?
Что Command.EXIT — целочисленная константа и ничего более.
Это не тип!
Таких "команд", с позволения сказать, во всём приложении по формам может быть много разбросано, а обработчик у меня на всех один...как тогда я узнаю, что Command.EXIT относится к открытой форме, а не к закрытой, которая тоже, в принципе, может генерировать события (нить, например, там может быть) типа Command с тем же самым целочисленным идентификатором EXIT?
Нет уж, я как-нибудь через идентификатор объекта/ссылки обойдусь, ведь она у всех объектов будет разная.
Ссылки на объект, имеющие одинаковое значение, являются ссылками на один и тот же объект. Поэтому и использую блок if-else, чтобы определить, какая команда (событие о команде) откуда пришла.
Кроме того, целочисленные константы Command.EXIT, Command.OK, Command.BACK и др. определены на уровне KVM телефона, и она располагает надписи софт-клавиш на экране, исходя из предназначения команды/события и тех дизайнерских требований, которые заложили в систему экранного меню разработчики телефона. Скажем, если я создам:
exit = new Command(I18NResources.getString(I18NResources.ID_GAME_EXIT), Command.OK, 2);
вместо
exit = new Command(I18NResources.getString(I18NResources.ID_GAME_EXIT), Command.EXIT, 2);
то на экране телефона пункт софт-клавиши отобразиться уже в другом углу или вообще будет представлять из себя пункт меню. Тем не менее, активизация этой команды пользователем ничего не меняет — CommandListener перехватит именно эту команду (ссылку Command c), но, естественно, с другим идентификатором — Command.OK. Так же он поступит (он у меня один на всех) с другими командами-событиями от других форм, в которых тоже может быть идентификатор Command.OK. Так что ориентироваться на тип команды нельзя, вместо этого лучше знать её ссылку, что и делаю я, возвращая её в методах форм:
public Command getMoreCommand() {
return more;
}.
← →
VirEx © (2006-07-22 19:54) [50]
> [48] DiamondShark © (22.07.06 19:20)
Command - объкт, а switch понимает только примитивы int, char
← →
iZEN © (2006-07-22 20:03) [51]
> DiamondShark © (22.07.06 19:20) [48]
>
>
> > Потому что switch неэффективен. И ссылки не понимает.
> Понимает
> > только объекты примитивного типа int и константы типа
> char.
>
> Ограничение примитивными типами как раз и позволяет сделать
> switch максимально эффективным.
>
> А вообще, странный какой-то switch, подозрительный.
> Параметр Command c -- какой-то сложный объект?
> А методы getXXX возвращают те же экземпляры, что приходит
> в пораметр?
> Бр-рр... Ну и зависимости...
>
Не всё так страшно.
Можно полностью инкапсулировать обработку команд в той форме, на которой они и происходят. Это у меня обработчик один, но на самом деле интерфейс CommandListener может реализовать любая форма и отлавливать внутри себя свои события, только надо объявить, что форма имплементирует этот интерфейс:
public class Splash extends PopupForm implements CommandListener {
...
Сказать, чтобы она ловила события (можно в конструкторе после добавления команд):
this.setCommandListener(this);
и реализовать метод слушателя:
public void commandAction(Command c, Displayable d) {
if (c == splash.getMoreCommand()) {
splash.suspend();
//ball.start();
Display.getDisplay(this).setCurrent(game);
}
...
}
Правда, при этом возникнут сложности с переходами между формами, а значит надо будет либо параметризовать (при создании), какая форма (game, например) будет следующей, когда закроется она. Либо вводить глобальную область видимости, когда формы приложения будут знать обо всех остальныхэкземплярах и отображать, когда следует (то есть городить огород с нарушением инкапсуляции или изобретать способ получения ссылок на другие формы).
← →
VirEx © (2006-07-22 20:04) [52]
> [49] iZEN © (22.07.06 19:49)
> Что Command.EXIT — целочисленная константа и ничего более.
> Это не тип!
я знаю, про то и речь что switch не понимает ничего кроме примитивов, а эта константа в j2me означает тип Command, поэтому максимум что можно сделать через оператора switch - проверить на тип команды (т.е. константу в данном случае)
(остальное что ты мне объясняешь в своём посте я знаю :) )
← →
iZEN © (2006-07-22 20:05) [53]Поправочка.
Внутренний код формы будет другим:
public void commandAction(Command c, Displayable d) {
if (c == this.getMoreCommand()) {
this.suspend();
Display.getDisplay(this).setCurrent(game);
}
...
}
← →
iZEN © (2006-07-22 20:13) [54]И ещё поправочка (пишу впопыхах).
Код вызова:
Display.getDisplay(this).setCurrent(game);
вместо this требует ссылку на объект класса MIDlet или на объект его наследника. Так что опять придётся думать над тем, как параметризовать форму (которая до этого ничего не знала о мидлете) ссылкой на её хозяина — экземпляр BallMIDlet.
Впрочем, это у меня показано на примере PopupForm, где производится достаточно гибкая параметризация ссылками на мидлет (owner) и объект Displayable (after), который будет отображатся после автоматического закрытия экземпляра PopupForm.
← →
pasha_golub © (2006-07-24 22:22) [55]Это что же за жизнь пошла... чтобы две строки склеить надо классами пользоваться.
← →
Ketmar © (2006-07-24 22:26) [56]>pasha_golub © (24.07.06 22:22) [55]
это фигня. скоро чтобы сложить 2 и 3 надо будет создать пять классов. %-)
← →
Mike Kouzmine © (2006-07-24 23:39) [57]Да и сейчас многие пишут имея всего один класс.
← →
iZEN © (2006-07-25 11:24) [58]
> Mike Kouzmine © (24.07.06 23:39) [57]
> Да и сейчас многие пишут имея всего один класс.
и большой switch/case в единственном методе commandAction...
← →
iZEN © (2006-07-25 11:27) [59]
> pasha_golub © (24.07.06 22:22) [55]
>
> Это что же за жизнь пошла... чтобы две строки склеить надо
> классами пользоваться.
Это — к Sun, создателю языка. Нет бы усовершенствовать класс String до уровня StringBuffer, тогда бы все проблемы с конкатенацией решились. Не захотела, почему-то.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.046 c