5
我建立一个GUI其中一个文本框必须以拉丁字符输入,其他人用阿拉伯语。为了避免切换键盘布局,我选择将其保留为阿拉伯文,并在该特定文本字段中使用DocumentFilter,以根据拉丁风格布局将阿拉伯字符替换为对应字符。 例如,如果一个类型为'\ u0628'(它是'ب'),则应该打印'F',因为它们在同一个键中。 这在阿拉伯语布局工作得很好用的所有字符除与B键,翻译成字符“لا”,并DocumentFilter.replace被称为每个字符两次。 有没有办法来控制文本参数的大小被调用的时候更换?任何其他解决方案的问题?使用DocumentFilter.replace Unicode字符
这是我原来的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);
}
谢谢你!