在JTextArea中强制执行RTL顺序

时间:2015-06-01 17:41:39

标签: java text bidirectional

我试图强制JTextArea(和我的应用程序中的其他文本组件)允许用户键入RTL。这适用于阿拉伯语等输入,但我还必须能够将其设置为将其应用于标准文本。因此,如果我输入“你好!”它将显示为“!olleh”。

我尝试过使用applyOrientation()方法并将文本区域设置为RTL,如下所示:

jTextPane1.getDocument().putProperty(
        TextAttribute.RUN_DIRECTION,
        TextAttribute.RUN_DIRECTION_RTL);

到目前为止我没有成功。有人建议我尝试使用Bidi库,但这些库似乎专注于解释已经双向的文本。当我应用上述内容时,我得到了右对齐文本,但它仍然是字符顺序的LTR。这里有什么我想念的吗?有没有办法设置Java本身在查找哪个方向文本条目应该移动克拉时检查的值?

2 个答案:

答案 0 :(得分:0)

组件方向怎么样?

boolean rtl = true;
t_text.setComponentOrientation(rtl ? 
    ComponentOrientation.RIGHT_TO_LEFT : 
    ComponentOrientation.LEFT_TO_RIGHT);
你怎么说你好!并且!olleh没有这样的事情会发生:)这是逆向不是从右到左。 RTL 我是Soley!!Soley am I 它显示从右到左的单词。

顺便说一句,使用 JTextPane 而不是JTextArea,我认为JTextArea不支持RTL。这就是我想在某个地方进行JtextPane RTL的时候读到的内容。

好吧,如果你想反转输入字符串,请使用:

public static String getReverse(String str) {
   return new StringBuffer(str).reverse().toString();
}

但是,如果要反转所有单词,请在颠倒整个输入后将其拆分:

String[] list = getReverse("I am soley!").split(" ");
String[] ret = new String[list.length];
int len = list.length;
for(String w:list){
   ret[--len] = s;
}
list = null;
// you have your words reversed in ret array

答案 1 :(得分:0)

我的问题是由RealSkeptic指出的\ u202e和\ u202c字符解决的。一个会强制跟随它的所有字符进入RTL形式,另一个强制跟随它的所有字符进入LTR形式。这是一个快速而肮脏的修复,但对于我的问题,它提供了我需要的解决方案。