2

我希望能够将垂直滚动设置到 RichTextFX 的顶部InlineStyleTextArea底部从这个线程的外观来看,moveTo(..)应该可以解决问题。但这对我不起作用。我也试过selectRange(..)and positionCaret(..)。下面是我的测试程序,我是否误解了上面链接的线程中提到的“重新定位插入符号的解决方法”?

import org.fxmisc.richtext.InlineStyleTextArea;

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.layout.HBox;
    import javafx.stage.Stage;

    public class RichTextFXTest extends Application {

    @Override
    public  void start(Stage stage) {

        InlineStyleTextArea<StyleInfo> area = new InlineStyleTextArea<>(
                new StyleInfo(), styleInfo -> styleInfo.toCss());
                area.setPrefSize(300, 300);
        area.setWrapText(false);
                area.setEditable(false);

                StringBuilder largeText = new StringBuilder();

                for (int i = 0; i < 5000; i++) {
                largeText.append("Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n");
                }

                area.replaceText(largeText.toString());

                // None of the two rows below works.
                //area.selectRange(1000, 1100);
                //area.moveTo(1100);
                //area.positionCaret(1100);

                HBox rootLayout = new HBox();
                rootLayout.setPrefSize(300, 300);
                rootLayout.getChildren().add(area);

                Scene scene = new Scene(rootLayout);
                stage.setScene(scene);
                stage.show();
     }

     // Style class
        class StyleInfo {
            String toCss() {
                return "-fx-fill: red;
            } 
    }

    public static void main (String[] args) {
            launch();
    }
}
4

2 回答 2

1

@Tomas Mikula 在这个github 线程中提供了答案。我想我也会把答案放在这里。

您的示例的问题是 moveTo/selectRange 解决方法在皮肤被实例化之前不起作用。如果在您的示例中,您将 selectRange 包含在 Platform.runLater 中,这将为您提供所需的结果。另请注意,范围是在字符索引中给出的,而不是行号。

Platform.runLater(() -> area.selectRange(10000, 10100));

在文本区域已经显示后用户交互产生的代码中,您将不再需要 Platform.runLater。

于 2015-10-12T08:48:23.677 回答
1

你可以做:

int pos = 1100;
area.moveTo(pos);
area.requestFollowCaret();
于 2020-09-03T19:52:55.620 回答