在RichTextFx CodeArea中的行号处显示断点

时间:2015-02-22 15:40:28

标签: javafx breakpoints line-numbers richtextfx

我正在使用RichTextFx的CodeArea来突出显示自定义迷你语言代码。

现在执行此代码时,我想在当前执行的行前面显示一个小箭头。我知道具体的行号,但行号标签不能发生任何事情。

由于github项目声称将行号或断点切换显示为一个特征,因此这不是很困难。但无法获得任何工作......

提前致谢

1 个答案:

答案 0 :(得分:13)

要在线前显示任何图形,您需要设置"段图形工厂" CodeArea的。这个图形工厂只是一个函数int -> Node:给定行号,它返回一个Node,它将显示在该行的前面。

这是一个图形工厂,它生成一个指向该线的绿色三角形。只有当行等于给定的整数属性shownLine时才会显示。

class ArrowFactory implements IntFunction<Node> {
    private final ObservableValue<Integer> shownLine;

    ArrowFactory(ObservableValue<Integer> shownLine) {
        this.shownLine = shownLine;
    }

    @Override
    public Node apply(int lineNumber) {
        Polygon triangle = new Polygon(0.0, 0.0, 10.0, 5.0, 0.0, 10.0);
        triangle.setFill(Color.GREEN);

        ObservableValue<Boolean> visible = Val.map(
                shownLine,
                sl -> sl == lineNumber);

        triangle.visibleProperty().bind(visible.conditionOnShowing(t‌​riangle));

        return triangle;
    }
}

您创建的每个图形(即小绿色三角形)将观察给定的shownLine属性以确定它是否应该可见。随着线条以及线条图形的出现和移动,在不再使用图形时移除shownLine的监听器非常重要。 visible.conditionOnShowing(t‌​riangle)是一个新属性,它将停止观察visible属性(并且自动也是shownLine属性,这要归功于ReactFX的延迟绑定语义)并重置为常量{{1每当三角形不是显示窗口的一部分时。因此,由于未清理的侦听器,我们不会导致内存或CPU泄漏。

这是一个完整的可运行演示,它使用此false与RichTextFX提供的ArrowFactory相结合来显示行号和一个小三角形。此演示使用CodeArea的当前行作为LineNumberFactory属性。您将希望将其替换为包含当前执行行的属性。

shownLine

这就是结果:

CodeArea with current line indicator