在 JTextArea 中强制 RTL 顺序
Forcing RTL order in a JTextArea
我试图强制 JTextArea(以及通过我的应用程序的其他文本组件)允许用户键入 RTL。这适用于阿拉伯语等输入,但我还必须能够将其设置为将其应用于标准文本。因此,如果我键入 "hello!",它将显示为“!olleh”。
我试过使用 applyOrientation() 方法并将文本区域设置为具有 RTL,如下所示:
jTextPane1.getDocument().putProperty(
TextAttribute.RUN_DIRECTION,
TextAttribute.RUN_DIRECTION_RTL);
到目前为止我还没有成功。有人建议我尝试 Bidi 库,但这些库似乎侧重于对已经双向的文本的解释。当我应用上面的内容时,我得到了右对齐的文本,但它在字符顺序方面仍然是 LTR。我在这里缺少什么吗?有没有办法设置 Java 本身在寻找文本输入应移动克拉的方向时检查的值?
组件方向如何?
boolean rtl = true;
t_text.setComponentOrientation(rtl ?
ComponentOrientation.RIGHT_TO_LEFT :
ComponentOrientation.LEFT_TO_RIGHT);
你说的你好!并且 !olleh 不会发生这样的事情 :) 这是反向的,而不是从右到左的。 I am Soley! 的 RTL 是 !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
RealSkeptic 指出的 \u202e 和 \u202c 字符解决了我的问题。一个将强制其后的所有字符变为 RTL 格式,另一个将其后的所有字符强制变为 LTR 格式。这是一个快速而肮脏的修复,但对于我的问题,它提供了我需要的解决方案。
我试图强制 JTextArea(以及通过我的应用程序的其他文本组件)允许用户键入 RTL。这适用于阿拉伯语等输入,但我还必须能够将其设置为将其应用于标准文本。因此,如果我键入 "hello!",它将显示为“!olleh”。
我试过使用 applyOrientation() 方法并将文本区域设置为具有 RTL,如下所示:
jTextPane1.getDocument().putProperty(
TextAttribute.RUN_DIRECTION,
TextAttribute.RUN_DIRECTION_RTL);
到目前为止我还没有成功。有人建议我尝试 Bidi 库,但这些库似乎侧重于对已经双向的文本的解释。当我应用上面的内容时,我得到了右对齐的文本,但它在字符顺序方面仍然是 LTR。我在这里缺少什么吗?有没有办法设置 Java 本身在寻找文本输入应移动克拉的方向时检查的值?
组件方向如何?
boolean rtl = true;
t_text.setComponentOrientation(rtl ?
ComponentOrientation.RIGHT_TO_LEFT :
ComponentOrientation.LEFT_TO_RIGHT);
你说的你好!并且 !olleh 不会发生这样的事情 :) 这是反向的,而不是从右到左的。 I am Soley! 的 RTL 是 !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
RealSkeptic 指出的 \u202e 和 \u202c 字符解决了我的问题。一个将强制其后的所有字符变为 RTL 格式,另一个将其后的所有字符强制变为 LTR 格式。这是一个快速而肮脏的修复,但对于我的问题,它提供了我需要的解决方案。