我试图强制JTextArea(和我的应用程序中的其他文本组件)允许用户键入RTL。这适用于阿拉伯语等输入,但我还必须能够将其设置为将其应用于标准文本。因此,如果我输入“你好!”它将显示为“!olleh”。
我尝试过使用applyOrientation()方法并将文本区域设置为RTL,如下所示:
jTextPane1.getDocument().putProperty(
TextAttribute.RUN_DIRECTION,
TextAttribute.RUN_DIRECTION_RTL);
到目前为止我没有成功。有人建议我尝试使用Bidi库,但这些库似乎专注于解释已经双向的文本。当我应用上述内容时,我得到了右对齐文本,但它仍然是字符顺序的LTR。这里有什么我想念的吗?有没有办法设置Java本身在查找哪个方向文本条目应该移动克拉时检查的值?
答案 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形式。这是一个快速而肮脏的修复,但对于我的问题,它提供了我需要的解决方案。