Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Получение данных из TextBox


Автор: zexak 16.9.2009, 17:19
В проекте имеется несколько классов. Так вот в одном из классов расположен TextBox:
Код

...
public TextBox GlobalText;
...
GlobalText = new TextBox("Название поля", null, 1000, TextField.ANY);
GlobalText.addCommand(exitCommand);
GlobalText.addCommand(okCommand);
GlobalText.setCommandListener(this);
....
//Привел код этого TextBox'a, думаю что остальной код будет лишним+будет мусолить глаза :)


Так вот, из остальных классов требуется вывод введенных значений этого GlobalText'a, а вот реализовать это-меня затрудняет. При любой попытке это сделать выводится значение "null"

Как добавить значение TextBox в память и запрашивать его из других классов?

Автор: Dancer 16.9.2009, 18:34
либо глобальная переменная
public class MyClass {
    public static TextBox GlobalText = null;
.....
}

И вызов будет таким: 
import MyClass;
......
if(MyClass.GlobalText != null ) {
    System.out.println("Expected Text: " + MyClass.GlobalText.getString());
}
-----------------------------

либо статический метод у данного класса организовываем и дёргаем метод где нужно:
public class MyClass {
    private static TextBox GlobalText = null;

    public static String getTextFromGlobalText() {
        return (GlobalText != null) ? GlobalText.getString() : null;
    }
.....
}
И вызов будет таким: 

import MyClass;
....
    System.out.println("Expected Text: " + MyClass.getTextFromGlobalText());

------------------
Если нужно на каждом объекте это дело иметь, то тогда не делаем статическую переменную, но тогда нужно будет на нужном тебе объекте дёргать либо метод, либо обращаться к public переменной и вызывать метод getString() на твоей переменной.

========
Да и кстати, в WTK есть UIDemo, посмотри там исходники, всё на пальцах в общем то показанно.

Автор: zexak 16.9.2009, 20:47
Наверно покажусь навязчивым, но все же:

C:\...\src\Test2.java:7: '.' expected
import Test;
              ^
C:\...\src\Test2.java:7: ';' expected
import Test;
               ^
2 errors
com.sun.kvem.ktools.ExecutionException
Build failed

Как я понимаю, WTK не доволен знаками препинания... Но как бы не менял, ни в какую...

Использовал глобальную переменную.

Автор: hamsterKSU 17.9.2009, 10:02
Цитата(Dancer @  16.9.2009,  17:34 Найти цитируемый пост)
public class MyClass {    public static TextBox GlobalText = null;.....}


не вздумай такого делать. если и решаешся на глобальную переменную то делай ее хотя бы типа String

Добавлено через 3 минуты и 57 секунд
блин ну что же не понятного-то. 
уже приводили пример тебе.

В твоем случае можно так поступить:
У тебя ведь есть главный класс(класс приложения/главный поток/ или слой доступа к данным) он обычно сингелтон(класс-одиночка).

Вот в нем и заводишь переменную типа String.

В твоей формочке реализуешь обновление этого поля. 
Либо по нажатию кнопки какой-то (типа save, ok) или реагируешь на изменение поля.

Добавлено через 5 минут и 48 секунд
а если сам не могешь понять что да как, то  кинь свои классы сюда - поможем.

 И еще поставь себе нормальное IDE, а то возишься в WTK и блокноте -  производительность труда увеличиться

Автор: zexak 17.9.2009, 20:36
Поставил Eclipse, конечно же хороший редактор  smile 
А так, в литературе, которая есть на руках, не встречал способа записи данных в память и извлечения их оттуда... Вы уж меня извините за то, что вас так допекаю  smile  но я в этом  smile 
А насчет вариантов переноса, то при просмотре примеров WTK, я наткнулся на WMADemo и думал, что данные нужно переносить методом(я процитирую):
Код

sender = new SMSSender(smsPort, display, destinationAddressBox, sendingMessageAlert);


Вот примерно так я хотел перенаправлять данные из класса в класс(наивный, да?)
Насчет глобальной переменной, ну, наверно уже наглею, но могли бы вы написать какой-нить мидлет для примера, в котором будет реализована глобальная переменная  smile 

Автор: W0LF 18.9.2009, 10:22
а в чем собственно проблема? делаете ее статической и юзаете из других классов

Автор: hamsterKSU 18.9.2009, 10:55
Цитата(zexak @ 17.9.2009,  19:36)
Поставил Eclipse, конечно же хороший редактор  smile 
А так, в литературе, которая есть на руках, не встречал способа записи данных в память и извлечения их оттуда... Вы уж меня извините за то, что вас так допекаю  smile  но я в этом  smile 
А насчет вариантов переноса, то при просмотре примеров WTK, я наткнулся на WMADemo и думал, что данные нужно переносить методом(я процитирую):
Код

sender = new SMSSender(smsPort, display, destinationAddressBox, sendingMessageAlert);


Вот примерно так я хотел перенаправлять данные из класса в класс(наивный, да?)
Насчет глобальной переменной, ну, наверно уже наглею, но могли бы вы написать какой-нить мидлет для примера, в котором будет реализована глобальная переменная  smile

блин, я же тебе уже показывал пример  как это делать в другой ветке http://forum.vingrad.ru/forum/topic-272549.html

А то что там SmsSender - то это класс для отправки смс(он реализует логику). а параметры в него передали через конструктор.

Между прочим  в римере который лежит в ветке http://forum.vingrad.ru/forum/topic-272549.html
реализованы  два способа, через метод setData и через коструктор.

Посмотри внимательно 

Автор: Dancer 18.9.2009, 11:16
Дык, а причём тут мидлет то собственно?
Посмотри книжки по Java вообще.

вот 2 файла, кладёшь их в одну директорию и компилишь: javac *.java
запускаешь: java test1

Надеюсь принцип понятен и код объяснений не требует.
==============================================

file test.java
Код

final public class test {
    private static int var = 0;
    public static int global_var = -1;

    private test() {
    }

    public static int getVar() {
        return var;
    }

    public static void setVar(int i) {
        var = i;
    }
} // class test


file test1.java
Код

public class test1 {

    public static void main(String args[]) {
        Log("test.getVar()==" + test.getVar());
        test.setVar(10);
        Log("test.getVar()==" + test.getVar());
// это сделать будет нельзя 
//        test.var = -10; 
//        Log("test.var==" + test.var);
// так как var закрытая переменная
// с ней работаем лишь через методы getVar() и setVar()
// но все остальные классы которые будут обращаться test.getVar() всегда будут
// получать одно и то же значение этой переменной, так как данная переменная
// статическая (static)

// к переменной global_var можно обращаться напрямую, так как она public
        Log("test.global_var==" + test.global_var);
        test.global_var = -10; 
        Log("test.global_var==" + test.global_var);
// так как переменная global_var статическая, из других классов всегда будем иметь
// одно значение этой переменной, когда будем её читать

    }

    public static void Log(String s) {
        System.out.println(s);
    }
} // class test1

Автор: hamsterKSU 18.9.2009, 12:56
P.S. классы принято называть с большой буквы. 
подчеркивание только в константах. 
если переменная состоит из двух слов то второе слово просто пишется с большой буквы - не global_var, а globalVar

Добавлено через 1 минуту и 7 секунд
а то в записи test.getVar() непонятно куда мы обращаеться к экземляру класса или к самому классу

Автор: ivanovpv 29.9.2009, 17:01
Не робяты... Это не Java у вас, а какой-то бейсик, ей-бо...
1) Дело совсем не в J2ME, а вообще в ООП
2) Через статику - это что называется brute-force (фу как грубо....)
3) Такие вещи положено делать через геттеры и сеттеры

Автор: hamsterKSU 30.9.2009, 22:52
про ООП полностью согласен - пример с гетерами/сетерами и конструкторами приводился ранее, но человек не хотит этого понимать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)