ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 当文本从右到左时,确定JTextArea区域中存在的文本

2019-09-01 19:01:17  阅读:289  来源: 互联网

标签:jtextarea java swing right-to-left


我有一些代码试图确定文本区域的给定垂直切片中的文本是什么,其中垂直切片被指定为Y坐标而不是线.

顺便说一下,转换为使用线数学是这个问题的一个很好的解决方法,所以这就是我将要使用的,但是我可以设想你可能只有Y坐标的情况,它看起来像这样的东西会出现,所以无论如何我都会问它.

我把我的问题简化为一个相当简约(lol Java)的例子.我们显示带有一些文本的框架,然后尝试确定最接近文本区域开头的文本的字符偏移量.我们从常识中知道它将为0,但是以编程方式解决问题就是问题.

public static void main(String[] args) throws Exception {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new RtlTest().run();
        }
    });
}

JFrame frame;
JTextArea textArea;

public void run() {
    textArea = new JTextArea(
        "\u05D4\u05D5\u05D3\u05E2\u05EA \u05D8\u05D9\u05D9\u05D2\u05E8 " +
        "\u05D8\u05E7\u05E1\u05D8 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA");

    frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.add(new JScrollPane(textArea), BorderLayout.CENTER);
    frame.setSize(400, 300);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setVisible(true);
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            measure();
        }
    });
}

public void measure() {
    try {
        System.out.println("Either the line is left to right or it's right to left " +
                           "(or a mix), so one of these two values should be 0:");
        System.out.println(textArea.viewToModel(new Point(0, 0)));
        System.out.println(textArea.viewToModel(new Point(textArea.getWidth() - 1, 0)));

        Rectangle firstLetterView = textArea.modelToView(0);
        System.out.println("This one should definitely be 0, right? " +
                           "I mean, we got the coordinates from Swing itself:");
        System.out.println(textArea.viewToModel(new Point(firstLetterView.x,
                                                          firstLetterView.y)));

        frame.dispose();
    } catch (BadLocationException e) {
        throw new IllegalStateException(e);
    }
}

输出相当令人惊讶:

Either the line is left to right or it's right to left (or a mix),
    so one of these two values should be 0:
23
23
This one should definitely be 0, right? I mean, we got the coordinates from Swing itself:
24

惊喜点:

>最靠近左上角的字符不是字符0.
>最靠近右上角的字符不是字符0.
>最接近字符0位置的字符不是字符0.

解决方法:

在代码中添加以下行:

textArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

您的输出数字将会更改 – 但您的文本将显示在文本区域的右侧.我希望这就是你想要的.

编辑:

根据this希伯来语和阿拉伯语应该是RT方向.

标签:jtextarea,java,swing,right-to-left
来源: https://codeday.me/bug/20190901/1785434.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有