Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875

Как в JTextField сделать ввод русских букв не зависимо от раскладки клавиатуры?

30.10.2019, 22:50. Показов 6382. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в JTextField сделать ввод русских букв независимым от раскладки клавиатуры?
Я предполагаю существование трех путей:
1. Прописать что-то такое в коде, что изменит раскладку клавиатуры на русскую.
2. Переопределить что-то такое от класса JTextField, что будет автоматом менять английские символы на русские.
3. Сделать еще что-то такое, что решит эту проблему...
Ребята с большим опытом, подскажите, пожалуйста, как это сварганить
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2019, 22:50
Ответы с готовыми решениями:

Как ограничить ввод всех английских букв и некоторых русских?
Как ограничить ввод всех английских букв и некоторых русских в maskedTextBox?

Как запретить ввод любых символов кроме русских букв и пробела.
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, как запретить ввод любых символов кроме русских букв и пробела в строке...

Как сделать шаблон для русских букв?
Как сделать шаблон для русских букв? То есть вот эта строка не работает: if(ereg((""),$obj,$data)) выдает ошибку: Warning:...

28
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
31.10.2019, 16:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sdasdaw Посмотреть сообщение
уже 2.4 Гб занято
и всё это код?
0
 Аватар для sdasdaw
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
31.10.2019, 16:51
Лучший ответ Сообщение было отмечено alicesmagic как решение

Решение

Gungala, нет, там ни строки моего кода (кроме как настройки под запуска сервера)
ассеты, текстуры и прочее

Сами сервера само писные естественно килобайты-мегабайты весят.

Тут возможно прикол для тех, кто пишет какую-то библиотеку или работает с 10-100 людьми одновременно. Коммитов получается бешенное количество, ветвей, вот и 10 гб как раз пригодится.

alicesmagic, я вам в примере не зря указывал indexes как static. Это сделано чтоб успешно проверять не повторяются ли проверки по индексам.
Отправил pull request.
+ У вас почему-то тормозит GUI (вплане ввода и переобразования в русский). Возможно вина look and feel

Добавлено через 7 минут
Gungala, впрочем, у тебя под блогом, я оставлял пару сообщений
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
31.10.2019, 16:54  [ТС]
Цитата Сообщение от sdasdaw Посмотреть сообщение
я вам в примере не зря указывал indexes как static. Это сделано чтоб успешно проверять не повторяются ли проверки по индексам.
Отправил pull request.
+ У вас почему-то тормозит GUI (вплане ввода и переобразования в русский). Возможно вина look and feel
Я так и думала, что это скорее всего повлияет. Спасибо большущее за помощь!!!
Кстати, у меня GUI не тормозит вообще... на любой раскладке с лету все пишется.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
31.10.2019, 17:14
Цитата Сообщение от sdasdaw Посмотреть сообщение
впрочем, у тебя под блогом, я оставлял пар
я поэтому и говорю, что может тебе и нужно столько пространства, но тому, кто пишет обычную программу, не задействующую кучу текстур, звуковых файлов и т.п., столько не нужно

Добавлено через 1 минуту

Не по теме:

ну и да, завязывай там писать, это мой блог всё-таки :D

0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
31.10.2019, 17:42
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
 
public class TextOnly
{
    public JLayeredPane swap;
    
    
    public TextOnly()
    {
        make_Window();
        make_Element();
    }
    
    
    private void make_Window()
    {
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(800, 600));
        panel.setOpaque(false);
        
        JFrame win = new JFrame("Only");
        swap = new JLayeredPane();
        swap = win.getLayeredPane();
        win.add(panel);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setResizable(false);
        win.getContentPane().setBackground(Color.WHITE);
        win.pack();
        win.setLayout(null);
        win.setLocationRelativeTo(null);
        win.setVisible(true);
    }
    
    
    private void make_Element()
    {
        JTextField tf = new JTextField();
        tf.addKeyListener(new KeyAdapter()
        {
            String[] arrRU = {"й", "ц", "у", "к", "е", "н"};
            int[] arrKey = {81, 87, 69, 82, 84, 89};
            
            public void keyTyped(KeyEvent e)
            {
                char c = e.getKeyChar();
                if ((c != '!') && (c != '?'))
                {
                    e.consume();
                }
            }
            
            public void keyPressed(KeyEvent e)
            {
                for (int i = 0; i < arrKey.length; i++)
                {
                    if (e.getKeyCode() == arrKey[i])
                    {
                        if (Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK))
                        {
                            ((JTextField) e.getSource()).setText(((JTextField) e.getSource()).getText() + arrRU[i].substring(0, 1).toUpperCase());
                        }
                        else
                        {
                            ((JTextField) e.getSource()).setText(((JTextField) e.getSource()).getText() + arrRU[i]);
                        }
                        break;
                    }
                }
            }
        });
        tf.setBounds(100, 275, 600, 50);
        tf.setDocument(new maxText(35));
        tf.setForeground(Color.BLACK);
        tf.setLayout(null);
        tf.setHorizontalAlignment(JTextField.RIGHT);
        swap.add(tf, new Integer(0), 0);
    }
    
    
    public static void main(String[] args)
    {
        new TextOnly();
    }
}
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
31.10.2019, 19:33  [ТС]
Nidl, в 81-й строке new maxText(35)... А где этот класс?
Вообще да. Тоже четко работает...
0
 Аватар для sdasdaw
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
31.10.2019, 19:42
alicesmagic, только не тестируйте перемещение каретки и вставку текста с буфера.
0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
01.11.2019, 08:07
Цитата Сообщение от sdasdaw Посмотреть сообщение
только не тестируйте перемещение каретки
нет проблем
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK))
                        {
                            try
                            {
                                ((JTextField) e.getSource()).getDocument().insertString(((JTextField) e.getSource()).getCaretPosition(), arrRU[i].substring(0, 1).toUpperCase(), null);
                            }
                            catch (BadLocationException e1){}
                            //((JTextField) e.getSource()).setText(((JTextField) e.getSource()).getText() + arrRU[i].substring(0, 1).toUpperCase());
                        }
                        else
                        {
                            try
                            {
                                ((JTextField) e.getSource()).getDocument().insertString(((JTextField) e.getSource()).getCaretPosition(), arrRU[i], null);
                            }
                            catch (BadLocationException e1){}
                            //((JTextField) e.getSource()).setText(((JTextField) e.getSource()).getText() + arrRU[i]);
                        }
                        break;
Цитата Сообщение от sdasdaw Посмотреть сообщение
вставку текста с буфера
Полагаю вы имеете ввиду что можно через CTR+V без препятсвенно вставить англ текст ? заблокируйте фокус JTextField этим setEditable(false)

Добавлено через 22 минуты
alicesmagic,
я часто юзаю этот класс для ограничения ввода необходимого числа символов, работает как для Area так и для Field
и это тот случай когда код настоящий класс по моим критериям который самодостаточен, универсальный кусочек кода а не резанная "змея" на 10 и более агрызков под видом классов в которых неделю концы искать надо.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import javax.swing.text.*;
 
@SuppressWarnings("serial")
public class maxText extends PlainDocument
{
    private int limit;
    private boolean toUppercase = false;
     
    maxText(int limit)
    {
        super();
        this.limit = limit;
    }
     
    maxText(int limit, boolean upper)
    {
        super();
        this.limit = limit;
        toUppercase = upper;
    }
     
    public void insertString
            (int offset, String  str, AttributeSet attr)
            throws BadLocationException 
            {
        if (str == null) return;
         
        if ((getLength() + str.length()) <= limit)
        {
            if (toUppercase) str = str.toUpperCase();
            super.insertString(offset, str, attr);
        }
    }
}
2
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.11.2019, 03:12  [ТС]
sdasdaw, нашелся небольшой досадный баг в работе кода подмены букв. Если при наборе остановится, стереть последний введенный символ бэкспейсом и затем снова ввести его же, то подмены не произойдет, и введется английский символ. Понятное дело, что какой дурак будет стирать символ, чтобы потом снова вводить его же, однако такие случаи редко, но будут происходить. В общем, я вышла из положения вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class IndexesLangInput {
    private int lastOffset;
    private int lastLength;
    private String lastText;
    private boolean isPair = false;
 
    public boolean isEqual(int lastOffset, int lastLength, String lastText) {
        boolean result = isPair &&
                this.lastOffset == lastOffset &&
                this.lastLength == lastLength &&
                lastText.equals(this.lastText);
        isPair = !isPair;
 
        if (!result) {
            this.lastOffset = lastOffset;
            this.lastLength = lastLength;
            this.lastText = lastText;
        }
        return result;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2019, 03:12

Как сделать вывод русских букв?А то выводятся каракули
Здравствуйте! Как сделать вывод русский букв? А то я пишу:printf(&quot;текст&quot;); и при выполнении выводятся каракули :( Я уже в нэте...

Ввод русских букв
Создал функцию для проверки ввода только русских и английских букв в которую отсылаю Key с метода onKeyPress. Проблема в том что код...

Ввод русских букв
Не могу понять почему при вводе русских символом программа начинает ругаться. Можно ли как-нибудь решить эту проблему? #include...

Ввод русских букв
Создал функцию для проверки ввода только русских и английских букв в которую отсылаю Key с метода onKeyPress. Проблема в том что код...

Ввод русских букв
Вот я видел лично много заданий в ТУРБО паскале наподобие ,вывести все согласны русские строчные буквы и т.д,а как собственно вводить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru