如何在java 2D中为很长的文本获取像素x处的字符串偏移量

问题描述

我正在尝试在 java swing 中制作我自己的自定义编辑器。 我需要找到一种方法获取用户在很长的字符串上单击鼠标的偏移量。 我尝试使用以下函数计算值:

public final int offsetToX(int line,int offset) {

    FontMetrics fm = painter.getFontMetrics();

    getLineText(line,linesegment);

    int segmentOffset = linesegment.offset;
    float x = horizontalOffset + painter.getInsets().left;

    linesegment.count = offset;
    return (int) (x + Utilities.getTabbedTextWidth(linesegment,fm,x,painter,0));
}

问题是,当 OS UI 比例未设置为 1(即 OS 级别的文本大小设置为 100% 以上)在高 dpi 时,上面计算的值开始从实际值开始减少用户在距离字符串开头更远的地方单击鼠标时的偏移量。

我认为它与分数度量有关。 目前我正在使用 JRE 标志:-Dsun.java2d.uiScale.enabled=false 作为解决此问题的方法。但我想以正确的方式做到这一点,类似于记事本的做法,而不管字符串的长度。

我使用的是 JDK 9。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)