javax.swing.text.View.createFragment java7中的奇怪行为

时间:2013-02-21 00:47:53

标签: java xml swing java-7 jtextcomponent

我遇到了上述方法的奇怪行为。 有一个遗留组件用于显示xml文件内容,它在java6中工作,但是当我切换到1.7_10时,它失败,因为结束偏移超出了视图的界限。

我对此问题进行了一些研究,发现以下方法javax.swing.text.ParagraphView.findEdgeSpan(View,int,int,int,int)

这是方法的代码:

/**
 * Binary search for the longest non-breakable fragment at the view edge.
 */
private float findEdgeSpan(View v, int axis, int fp, int p0, int p1) {
    int len = p1 - p0;
    if (len <= 1) {
        // further fragmentation is not possible
        return v.getMinimumSpan(axis);
    } else {
        int mid = p0 + len / 2;
        boolean startEdge = mid > fp;
        // initial view is breakable hence must support fragmentation
        View f = startEdge ?
            v.createFragment(fp, mid) : v.createFragment(mid, fp);
        boolean breakable = f.getBreakWeight(
                axis, 0, f.getMaximumSpan(axis)) > View.BadBreakWeight;
        if (breakable == startEdge) {
            p1 = mid;
        } else {
            p0 = mid;
        }
        return findEdgeSpan(f, axis, fp, p0, p1);
    }
}

它创建视图的片段然后在此片段上运行,但偏移边界取自外部视图。传递给createFragment的债券可能会超出f边界。

有人可以解释这是否是正确的行为?

javax.swing.text.View.createFragment的javadoc中:

Parameters:
    p0 the starting offset >= 0. This should be a value greater or equal to the element starting offset and less than the element ending offset.
    p1 the ending offset > p0. This should be a value less than or equal to the elements end offset and greater than the elements starting offset.

据我所知,p1不应该大于view的endOffset,不是吗?

0 个答案:

没有答案