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

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

30.10.2019, 22:50. Показов 6241. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru