gpt4 book ai didi

java - 使用带有 unicode 字符的 DocumentFilter.replace

转载 作者:搜寻专家 更新时间:2023-11-01 00:57:05 26 4
gpt4 key购买 nike

我正在构建一个 GUI,其中一个文本字段必须输入拉丁字符,其他文本字段输入阿拉伯字符。为避免切换键盘布局,我选择以阿拉伯语维护它,并在该特定文本字段中使用 DocumentFilter 以根据拉丁语 azerty 布局将阿拉伯语字符替换为对应的阿拉伯语字符。例如,如果键入“\u0628”(它是“ب”),则应打印为“F”,因为它们在同一个键中。这对除 B 键以外的所有字符都适用,B 键在阿拉伯语布局中转换为 两个 字符“لا”,并且每个字符调用 DocumentFilter.replace 两次。调用 replace 时有没有办法控制 text 参数的大小?还有其他解决问题的方法吗?

这是我原来的 DocumentFilter.replace 代码

...
private static char[] latin = {'A','Z','E','R','T','Y','U','I','O','P',...};
private static char[] arabic = {'\u0636','\u0635','\u062B','\u0642','\u0641',...};
...
(PlainDocument) txtFileId.getDocument().setDocumentFilter(new DocumentFilter() {
@Override
public void replace(DocumentFilter.FilterBypass fb, int offset,int length, String text, AttributeSet attr) throws BadLocationException {
StringBuilder sb = new StringBuilder();
int i=0;
if (text.length()==1) {
while (text.charAt(0)!=arabic[i] && i<arabic.length)
i++;
if (text.charAt(0)==arabic[i])
sb.append(latin[i]);
}
if (text.length()==2) {
if (text.equals(new String(new char[]{'\u0627','\u0644'})))
sb.append('B');
}
super.insertString(fb, offset, sb.toString(), attr);
}

谢谢!

最佳答案

如何创建一个全局变量来跟踪您的回调是否已为此 B 事件调用?它可以是一个简单的 boolean 标志,每次生成 B 事件时都会翻转。仅当标志为真时才输出 B。

关于java - 使用带有 unicode 字符的 DocumentFilter.replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18101905/

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