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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Индикатор раскладки клавы, как реализовать? 
V
    Опции темы
maxlab
Дата 31.8.2007, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте !
Подскажите куда копать smile Помнится что w1nd об этом упоминал... в ветке про "Странное поведение JPasswordField"


--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
eXcile
Дата 31.8.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



попробуй так
Код

InputContext ic = InputContext.getInstance();
Locale loc = ic.getLocale();

--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
dorogoyIV
Дата 31.8.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



maxlab, уточни наверное - тебе надо в трее индикатор или JLabel(например) ?
PM MAIL   Вверх
maxlab
Дата 1.9.2007, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(dorogoyIV @ 31.8.2007,  13:48)
maxlab, уточни наверное - тебе надо в трее индикатор или JLabel(например) ?

Обычный лайбл на модальном диалоговом окне авторизации. 
С InputContext и getLocale я уже баловался прежде чем задавать вопрос в форум. Вне зависимости от раскладки клавы (США/Рус) возвращается всегда "ru_RU". Но наверное это правильно... getLocale() возвращает текущую локаль хост машины. А как добраться до раскладки, не догнал... Операционка Kubuntu 7.04, JVM из репозитария JDK-SUN-6.00.00
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
w1nd
Дата 2.9.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Вот пример.
Код
import java.awt.GridBagLayout;
import java.awt.Window;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.WeakHashMap;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class JInputLocaleIndicator extends JLabel {

    private static class MonitoringThread extends Thread {
     
        private static final long REFRESH_TIMEOUT = 1000L;

        public MonitoringThread() {
         setPriority(NORM_PRIORITY);
         setDaemon(true);
     }
        
        public void run() {
         while (!interrupted()) {
             synchronized (indicatorLists) {
                 for (Map.Entry<Window, List<JLabel>> entry : indicatorLists.entrySet()) {
                        Locale locale = entry.getKey().getInputContext().getLocale();
                     for (JLabel label : entry.getValue()) {
                         label.setText(locale.getLanguage());
                         label.setToolTipText(locale.getDisplayLanguage());
                     }
                 }
                }
             
             try {
                    Thread.sleep(REFRESH_TIMEOUT);
                }
             catch (InterruptedException thrown) {
                 break;
                }
         }
        }
     
    }
    
    private static Map<Window, List<JLabel>> indicatorLists = new WeakHashMap<Window, List<JLabel>>();
    
    static {
     MonitoringThread monitoringThread = new MonitoringThread();
     monitoringThread.start();
    }

    public JInputLocaleIndicator() {
        addHierarchyListener(
         new HierarchyListener() {
                public void hierarchyChanged(HierarchyEvent event) {
                    if ((event.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0) {
                        Window window = SwingUtilities.getWindowAncestor(JInputLocaleIndicator.this); 

                        synchronized (indicatorLists) {
                         List<JLabel> indicators = indicatorLists.get(window);

                         if (isDisplayable()) {
                             if (indicators == null) {
                                 indicatorLists.put(window, indicators = new ArrayList<JLabel>());
                             }
                             
                             indicators.add(JInputLocaleIndicator.this);
                            }
                            else {
                             if (indicators != null) {
                                 indicators.remove(JInputLocaleIndicator.this);
                             }
                            }
                        }
                    }
                }
         }
        );
    }
    
    public static void main(String... args) {
        JFrame frame = new JFrame();
        JInputLocaleIndicator indicator = new JInputLocaleIndicator();
        
        frame.setLayout(
            new GridBagLayout()
        );
        
        frame.add(indicator);
        frame.setSize(512, 384);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
}


Это сообщение отредактировал(а) w1nd - 2.9.2007, 19:35


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
eXcile
Дата 3.9.2007, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(maxlab @  1.9.2007,  06:54 Найти цитируемый пост)
С InputContext и getLocale я уже баловался прежде чем задавать вопрос в форум. Вне зависимости от раскладки клавы (США/Рус) возвращается всегда "ru_RU". Но наверное это правильно... getLocale() возвращает текущую локаль хост машины.

дело обстоит следующим образом. прежде чем привести этот кусочек кода я протестировал на своей машине. У тебя всегда возвращает ru, следует это из-за того, что по умолчанию у тебя стоит русский , у меня например по дефолту англ и при загрузке апплета всегда вылазиет eng (видимо при загрузке jvm она устанавливает язык который является дефолтным). Но если ты во время выполнения апплета изменишь раскладку, последующий вызов getLocale вернет тебе язык из текущей раскладки.
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
dorogoyIV
Дата 3.9.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



w1nd, если не трудно объясни плиз зачем столько кода писать? когда достаточно такого:
Код

  thread=new Thread()
  {
   public void run()
   {
    while(true)
    {
     try
     {
      thread.sleep(1000);
     }
     catch(Exception ex){}

     Locale locale=getInputContext().getLocale();
     jlabel.setText(locale.getLanguage());
     jlabel.setToolTipText(locale.getDisplayLanguage());
    }
   }
  };
  thread.start();

предполагаю, что там какие то проверки происходят? в общем не понятно мне

Это сообщение отредактировал(а) dorogoyIV - 3.9.2007, 14:27
PM MAIL   Вверх
w1nd
Дата 4.9.2007, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(dorogoyIV @  3.9.2007,  14:19 Найти цитируемый пост)
в общем не понятно мне

 smile 

1. Ваш поток не останавливается, если индикатор не отображён.
2. Если вы подобный поток запускаете в каждом окне/индикаторе, то это слишком накладно - у меня он оин на всех.
3. Поток - не демон и не даст завершить приложение без System.exit()
4. Не вижу связи с окном. Если компонент использовать повторно в другом окне, будут сюрпризы.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
maxlab
Дата 4.9.2007, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(eXcile @ 3.9.2007,  04:46)
У тебя всегда возвращает ru, следует это из-за того, что по умолчанию у тебя стоит русский , у меня например по дефолту 

Да я по всякому пробовал... и переключал тоже...
Кстати пример от w1nd ведет себя аналогично smile При запуске отображается "ru" и при переключении расклатки по <Alt>+<Shift> никаких изменений smile Сейчас попробую под виндой побаловаться
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
eXcile
Дата 4.9.2007, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(maxlab @  4.9.2007,  07:42 Найти цитируемый пост)
Сейчас попробую под виндой побаловаться

у меня под ВИндой все и происходит, на линухе не тестил
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
maxlab
Дата 4.9.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здается мне что под Linux надо JNI заюзать... что не есть гуд. Пуре ява не получится smile

Для w1nd - special thanks - за хороший пример! В фак его smile



Это сообщение отредактировал(а) maxlab - 4.9.2007, 09:47
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
maxlab
Дата 13.9.2007, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(maxlab @ 4.9.2007,  09:44)
Здается мне что под Linux надо JNI заюзать... 

Надо JNI
--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




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


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

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