这是我的一段代码。JavaFX:textArea.setScrollTop(Double.MAX_VALUE)并不总是有效
textArea.setText(someNewText)
textArea.positionCaret(textArea.getText().length());
textArea.setEditable(true);
textArea.setScrollTop(Double.MAX_VALUE);
我用textArea.setScrollTop(Double.MAX_VALUE)
滚动文本区域的底部(解决方案,我在互联网上找到)。它有效,但并非总是如此。我注意到,只有在调用此代码之前垂直滚动条不可见并且代码执行后才可见,它才能工作。在调用此代码之前,垂直滚动条可见时,滚动到底部始终工作。如何解决它?也许我应该让垂直滚动条始终可见?如果是,那么如何 - 我没有找到解决方案。
编辑: 这是示例代码:
public class JavaFxApp1 extends Application{
private TextArea textArea;
@Override
public void start(Stage stage) throws Exception {
Button button=new Button("Press here");
textArea=new TextArea();
VBox vbox = new VBox(button,textArea);
button.setOnAction((event)->{
textArea.appendText("###This is a very long string:some text some text some text some text some"
+ " text some text some text some text some text some text"
+ " text some text some text some text some text some text"
+ " text some text some text some text some text some text .\n");
textArea.selectEnd();
textArea.deselect();
textArea.setScrollTop(Double.MAX_VALUE);
});
textArea.setEditable(true);
textArea.setWrapText(true);
textArea.setStyle("-fx-font-size:14px;-fx-focus-color: transparent;-fx-font-family: monospace;");
Scene scene=new Scene(vbox);
stage.setTitle("SomeTitle");
stage.setScene(scene);
stage.setMinHeight(400);
stage.setMinWidth(800);
stage.show();
}
}
这是当我按下按钮4次结果: 正如你看到它没有滚动至底部。在我再次按下按钮(第五次)后,我得到以下结果: 现在,如您所见,它被滚动到底部。 我尝试添加:
ScrollPane scrollPane = (ScrollPane) textArea.lookup(".scroll-pane");
scrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
,使滚动条始终可见 - 它是可见的,但经过4次反正不滚动至底部。
如何解决?
这是一个错误,所以我打开了一个错误报告。请参阅https://bugs.openjdk.java。net/browse/JDK-8189732 –