Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написание своего TextField 
:(
    Опции темы
Samuil
  Дата 12.3.2007, 04:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Начал писать свой TextField и столкнулся с проблеммой: как повесить на одну кнопку несколько букв и перебирать , как эть делается в TextField.


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
javastic
Дата 12.3.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



Делаешь счётчик в каждом обработчике нажатой кнопки, далее по индексу. Например отлавил нажатие 1 , а там три if'a:
if ( count == 1 ) // буква A
if ( count == 2 ) // буква B
if ( count == 3 ) // буква C

и т.д.


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Samuil
Дата 13.3.2007, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



javastic, использовать Thread?



--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
javastic
Дата 13.3.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



по желанию. попробуй вначале просто сделать внутри keyPressed'a


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Dancer
Дата 13.3.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



внутри KeyPressed это конечно, да. Но, не забудь так же запускать Timer, который будет тебе давать время на то, чтобы ты мог изменить букву, заасаниную на одну и ту же кнопку. То есть, нажал циферку 2 1раз, появилась буква А/а (ну или какую назначил), запускается таймер, ну, пусть он будет расчитан на 500мс, далее если ты нажмёшь циферку 2 в течении того пока таймер ещё не стартовал, то появится буковка на месте выведенной "А/а", следующая из твоего списка, например "B/b". А если ты нажмёшь циферку 2 позже, то есть после того как 500мс прошли, то буквочка A/a останется в предыдущей позиции, а на следующей позиции появится нова A/a которую можно будет изменять в B/b и т.д.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Samuil
Дата 13.3.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



Dancer, Приведи пожалуйста пример с таймером, просто с ним я пока не знаком. smile 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
W0LF
Дата 13.3.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



 smile smile
Timer


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
kapi
Дата 15.3.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.8.2006

Репутация: 1
Всего: 1



Код

public class TextFieldMy {
    private final String ABC [] ={"",""," ","","a","b","c","","","d","e"
                                      ,"f","","","","","g","h","i","",""
                                      ,"","","","","j","k","l","","",""
                                      ,"","","","","","m","n","o","",""
                                      ,"","","","","","","","","p","q"
                                      ,"r","s","","","","","","","",""
                                      ,"","","","t","u","v","","","",""
                                      ,"","","","","","","","","",""
                                      ,"w","x","y","z"};
    public boolean isActive=false;
    private boolean wasPressed =false;
    private boolean isOtherButton=false;
    private long lastUpdate=0;
    private long lastPressed=0;
    public String text = "";
    public String letter = "";
    public String answer ="";
    public int index = 0;
    private int prevKey;
    private int currKey;
/*----------------------------------------------------------------------------------------------*/
    public TextFieldMy(){
        isActive = true;
        prevKey = 49;
        currKey = 1;
    }
/*----------------------------------------------------------------------------------------------*/
    protected void pressed (int key){
        lastUpdate = System.currentTimeMillis();
         wasPressed = true;
         currKey = key;
        System.out.println("Key: " + key);
         if (isSameAsPrev()){
              index++;
             if(index >2){
                 if(!(key == 55 | key == 57)){
                     index = 0;
                 }else{
                     if (index >3)
                     index=-1;
                 }
             }

         }else{
            isOtherButton = true;
            text=text+ABC[(prevKey-48)*(prevKey-48)+index];
            if(ABC[(prevKey-48)*(prevKey-48)+index] != " ")
             answer = answer + ABC[(prevKey-48)*(prevKey-48)+index];
            prevKey = 49;
            lastUpdate = System.currentTimeMillis();
            index = 0;
            letter = new String("");
         }
        lastPressed =System.currentTimeMillis();
       // if(isOtherButton)
        prevKey = currKey;
        letter = new String(ABC[(currKey-48)*(currKey-48)+index]);
        System.out.println("T= "+text);
        System.out.println("A ="+answer);

    }
/*----------------------------------------------------------------------------------------------*/
    protected void useJoker(String rigtA){
        
    }
/*----------------------------------------------------------------------------------------------*/
    protected void update(){
        if ((wasPressed&timeToSet()) ){
            wasPressed =false;
            text=text+ABC[(prevKey-48)*(prevKey-48)+index];
            if (ABC[(prevKey-48)*(prevKey-48)+index] != " "){
                answer = answer + ABC[(prevKey-48)*(prevKey-48)+index];
            }

            lastUpdate = System.currentTimeMillis();
            index = 0;
            prevKey = 49;
            isOtherButton =false;
            letter = new String("");
            Quiz.needToUpdate = true;
        }
    }
/*----------------------------------------------------------------------------------------------*/
    private boolean isSameAsPrev (){
        if(currKey == prevKey)
            return true;
        else{
            return false;
        }
    }
/*----------------------------------------------------------------------------------------------*/
    private boolean timeToSet (){
        if ((System.currentTimeMillis() - lastUpdate > 600 ) | (!isSameAsPrev())){
            return true;
        }else
            return false;
    }
/*----------------------------------------------------------------------------------------------*/    
}




немножко не оптимально правда. smile 
PM MAIL   Вверх
W0LF
Дата 15.3.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Но сегодня говорил со своим манагером...
Он сказал, что ему больше нравится, если например отобразить текстфилд красиво, но изменять его так - при нажатии на него высвечивать TextBox и там изменять.
Просто так легче набирать. Классная смена языка, T9 и т.п.

Добавлено @ 18:44 
Что можете сказать по этому поводу?


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Samuil
Дата 16.3.2007, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



kapi, Спасибо, сейчас поюзаю smile 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
javastic
Дата 16.3.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



Цитата(W0LF @ 15.3.2007,  18:34)
Но сегодня говорил со своим манагером...
Он сказал, что ему больше нравится, если например отобразить текстфилд красиво, но изменять его так - при нажатии на него высвечивать TextBox и там изменять.
Просто так легче набирать. Классная смена языка, T9 и т.п.

Добавлено @ 18:44 
Что можете сказать по этому поводу?

В качестве экономии памяти вполне нормально. А также удобно если ты делаешь заполнение некой формы. Просто бывают случаи где впринципе не нужны T9, и постоянное переключение с языков.


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Samuil
Дата 16.3.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в(Job)ываю
**


Профиль
Группа: Участник
Сообщений: 705
Регистрация: 26.4.2006
Где: Uzbekistan.Tashke nt

Репутация: 5
Всего: 6



kapi, Прокомментируй пожалуйста методы, ато чет не совсем понятно smile 


--------------------
Выбор уже сделан, остается его только осознать   
smile    smile 
      smile  

user posted image
PM MAIL ICQ   Вверх
kapi
Дата 19.3.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.8.2006

Репутация: 1
Всего: 1



Вообщем этот классик написал , что б юзать на Канвасе в игрушке. Сдесь вводяться только буквы, без перемещения курсора. Помещаешь метод  pressed (int key) в канвасовский KEYPRESSED. Результат твоего ввода в  public String text . 
Код

public class TextFieldMy {      /*0  1  2   3   4    5    6   7  8   9   10*/
    private final String ABC [] ={"",""," ","","a","b","c","","","d","e"                      // это карта символов. Поясняю 
                                                           /*16 17  18 ........*/
                                      ,"f","","","","","g","h","i","",""                                         //кнопка"1" - пуста, букв нет.
                                      ,"","","","","j","k","l","","",""                                           // кнопка"2"(sqr(2) = 4), поэтому с 4 индекса массива идут А,В,С
                                      ,"","","","","","m","n","o","",""                                        // кнопка"3"(sqr(3) = 9),  9 индекс - D,E,F  ... и т.д.
                                      ,"","","","","","","","","p","q"
                                      ,"r","s","","","","","","","",""
                                      ,"","","","t","u","v","","","",""
                                      ,"","","","","","","","","",""
                                      ,"w","x","y","z"};
    public boolean isActive=false;
    private boolean wasPressed =false;
    private boolean isOtherButton=false;
    private long lastUpdate=0;
    private long lastPressed=0;
    public String text = "";      //ваш текст
    public String letter = "";    // активная буква
    public String answer ="";
    public int index = 0;
    private int prevKey;
    private int currKey;
/*----------------------------------------------------------------------------------------------*/
    public TextFieldMy(){
        isActive = true;
        prevKey = 49;
        currKey = 1;
    }
/*----------------------------------------------------------------------------------------------*/
    protected void pressed (int key){
        lastUpdate = System.currentTimeMillis();
         wasPressed = true;
         currKey = key;
        System.out.println("Key: " + key);
         if (isSameAsPrev()){
              index++;
             if(index >2){
                 if(!(key == 55 | key == 57)){
                     index = 0;
                 }else{
                     if (index >3)
                     index=-1;
                 }
             }

         }else{
            isOtherButton = true;
            text=text+ABC[(prevKey-48)*(prevKey-48)+index];
            if(ABC[(prevKey-48)*(prevKey-48)+index] != " ")
             answer = answer + ABC[(prevKey-48)*(prevKey-48)+index];
            prevKey = 49;
            lastUpdate = System.currentTimeMillis();
            index = 0;
            letter = new String("");
         }
        lastPressed =System.currentTimeMillis();
       // if(isOtherButton)
        prevKey = currKey;
        letter = new String(ABC[(currKey-48)*(currKey-48)+index]);
        System.out.println("T= "+text);
        System.out.println("A ="+answer);

    }
/*----------------------------------------------------------------------------------------------*/
//    protected void useJoker(String rigtA){      
//        
//  }
/*----------------------------------------------------------------------------------------------*/
//    protected void update(){                     //этот метод тебе не нада
//       if ((wasPressed&timeToSet()) ){
//            wasPressed =false;
//            text=text+ABC[(prevKey-48)*(prevKey-48)+index];
//            if (ABC[(prevKey-48)*(prevKey-48)+index] != " "){
//                answer = answer + ABC[(prevKey-48)*(prevKey-48)+index];
//            }
//
//            lastUpdate = System.currentTimeMillis();
//            index = 0;
//            prevKey = 49;
//            isOtherButton =false;
//            letter = new String("");
//            Quiz.needToUpdate = true;
//        }
//    }
/*----------------------------------------------------------------------------------------------*/
    private boolean isSameAsPrev (){           //проверка: если нажата таже кнопка то это перебор букв одной кнопки
        if(currKey == prevKey)
            return true;
        else{
            return false;
        }
    }
/*----------------------------------------------------------------------------------------------*/
    private boolean timeToSet (){               // когда перебираешь буквы одной клавиши и прошло 600мс между нажатиями то буква вводится
        if ((System.currentTimeMillis() - lastUpdate > 600 ) | (!isSameAsPrev())){
            return true;
        }else
            return false;
    }
/*----------------------------------------------------------------------------------------------*/    
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.3637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.