我希望能够将垂直滚动设置为RichTextFX中InlineStyleTextArea
的顶部或底部。通过this线程的外观,moveTo(..)
应该可以解决问题。但它对我不起作用。我还尝试了selectRange(..)
和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();
}
}
答案 0 :(得分:2)
@Tomas Mikula在this github线程中提供了答案。我以为我也把答案放在这里。
你的例子的问题是moveTo / selectRange 在实例化皮肤之前,解决方法不起作用。如果在你的 例如,您将在Platform.runLater中包围selectRange 给你想要的结果。另请注意,范围在 字符索引,而不是行号。
Platform.runLater(() -> area.selectRange(10000, 10100));
在代码中 这是由文本区域之后的用户交互产生的 已经显示,你将不再需要Platform.runLater。
答案 1 :(得分:0)
您可以这样做:
int pos = 1100;
area.moveTo(pos);
area.requestFollowCaret();