首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有unicode字符的DocumentFilter.replace

使用带有unicode字符的DocumentFilter.replace
EN

Stack Overflow用户
提问于 2013-08-07 11:12:53
回答 1查看 138关注 0票数 5

我正在构建一个GUI,其中一个文本字段必须以拉丁字符输入,另一个文本字段必须以阿拉伯语输入。为了避免切换键盘布局,我选择了用阿拉伯语进行维护,并在特定的文本框中使用DocumentFilter来根据拉丁文的布局将阿拉伯字符替换为对应的字符。例如,如果一个类型'\u0628‘(它是'ب'),这应该打印'F’,因为在他们是在相同的键。这可以很好地处理所有字符,但B键除外,B键将阿拉伯语布局中的两个字符"لا“转换为DocumentFilter.replace,每个字符调用DocumentFilter.replace两次。在调用替换时,是否有控制文本参数大小的方法?这个问题还有其他解决办法吗?

这是我最初的DocumentFilter.replace代码

代码语言:javascript
复制
...
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);
}

谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2013-08-10 04:44:04

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18101905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档