gpt4 book ai didi

java - Google IME 或 Redhat 日语 IME 候选窗口未针对 Swing 文本字段正确定位

转载 作者:行者123 更新时间:2023-12-01 19:18:29 28 4
gpt4 key购买 nike

是否需要实现任何输入法接口(interface)才能使 ime 候选窗口显示在光标位置? Windows 默认 ime 似乎显示在正确的位置,但 google ime 和 RedHat ime 则不然。这是一些示例代码:

import javax.swing.JFrame;
import javax.swing.JTextField;

class ime
{
public static void main(String args[])
{
JFrame f = new JFrame("TextField Example");
JTextField t1, t2;
t1 = new JTextField("Welcome to Javatpoint.");
t1.setBounds(50, 100, 200, 30);
t2 = new JTextField("AWT Tutorial");
t2.setBounds(50, 150, 200, 30);
f.add(t1);
f.add(t2);
f.setSize(400, 400);
f.setLayout(null);
f.setVisible(true);
}
}

屏幕截图:

google ime not positioned correctly

答案:这是已知的 Swing bug 。我能想到的唯一解决方法是创建一个新窗口,其中的文本字段覆盖在顶部(不是完整的解决方案,仍然需要处理窗口移动/调整大小等):

public class FakeTextField implements FocusListener
{

JFrame frame;
JTextField textfield;

JFrame frame2 = new JFrame();
JTextField textfield2;

public FakeTextField(JFrame frame, JTextField textfield, JTextField textfield2)
{
this.frame = frame;
frame2.setAlwaysOnTop(true);

this.textfield = textfield;
this.textfield2 = textfield2;
textfield.addFocusListener(this);
textfield2.addFocusListener(new FocusListener()
{
@Override
public void focusGained(FocusEvent e)
{
}

@Override
public void focusLost(FocusEvent e)
{
frame2.setVisible(false);
}

});

frame2.add(textfield2);
}

@Override
public void focusGained(FocusEvent e)
{
try
{
textfield2.setText(textfield.getText());
frame2.setUndecorated(true);
}
catch(Exception err)
{

}
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setSize(textfield.getSize());
frame2.setLocation(textfield.getLocationOnScreen());
frame2.setVisible(true);
}

@Override
public void focusLost(FocusEvent e)
{
}

}

最佳答案

下面实际上是一条评论,而不是一个答案,但我无法像回答一样格式化评论。

这就是我在希伯来语 Swing GUI 中的做法(从右到左书写)

java.awt.im.InputContext ic = t1.getInputContext(); // 't1' is the JTextField from the code you posted.
ic.selectInputMethod(new java.util.Locale("iw", "IL");

iw 是希伯来语的语言代码。
IL 是以色列的国家代码

关于java - Google IME 或 Redhat 日语 IME 候选窗口未针对 Swing 文本字段正确定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59390082/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com