Переключить InputMethod с помощью awt.InputContext не удалось в LinuxLinux

Ответить
Anonymous
 Переключить InputMethod с помощью awt.InputContext не удалось в Linux

Сообщение Anonymous »

Недавно у меня возникла проблема с переключением метода ввода в моем приложении Swing, работающем на Linux, вот мой опыт:

ОС: ubuntu22.04
Рабочий стол: Gnome, X11
Среда ввода метода: ibus 1.5.26
InputMethod установлено: ibus-mozc
JDK: версия openjdk "21.0.10"

Ниже приведен пример моей программы:

Код: Выделить всё

import javax.swing.*;
import java.awt.*;
import java.awt.im.InputContext;
import java.util.Locale;

public class Main {
public static void main(String[] args) {
//create jframe
JFrame frame = new JFrame();
frame.setSize(400, 300);
frame.setBackground(Color.black);
frame.setLayout(null);
frame.setLocation(300, 300);

//create jpanel
JPanel panel = new JPanel();
panel.setSize(400, 300);
panel.setBackground(Color.yellow);
panel.setLayout(null);

frame.add(panel);

//create jTextfield
JTextField textField = new JTextField();
textField.enableInputMethods(true);
textField.setSize(200, 50);
textField.setLocation(50, 50);

//create button
Button button = new Button("Click");
button.setSize(50, 50);
button.setBackground(Color.cyan);
button.setLocation(300, 50);

//when button is clicked, change input method to japanese
button.addActionListener(e -> {
InputContext inputContext = textField.getInputContext();
System.out.println(inputContext.getLocale());
System.out.println("change im to japanese");
inputContext.selectInputMethod(Locale.JAPAN);
System.out.println(inputContext.getLocale());
});

panel.add(textField);
panel.add(button);

frame.setVisible(true);
}
}
В программе я создал текстовое поле для ввода текста и кнопку для изменения метода ввода и печати журнала.
Но когда я нажал кнопку, журнал распечатался следующим образом:

Код: Выделить всё

en_US
change im to japanese
en_US
И во второй раз, когда я попробовал эту инициализацию с использованием китайского метода ввода (первый раз был английский (США)), журнал по-прежнему отображался, как указано выше. Я также пробовал это в Windows, все получилось.
После этого я пытался искать материалы по этому поводу, но там слишком редкая информация, и я не могу иметь о ней четкое представление.
Итак, есть ли кто-нибудь, кто знает, что такое awt InputContext в Linux, и может сказать мне, почему это не работает? Я очень ценю это.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»