这是我的代码片段。
textArea.setText(someNewText)
textArea.positionCaret(textArea.getText().length());
textArea.setEditable(true);
textArea.setScrollTop(Double.MAX_VALUE);
我使用textArea.setScrollTop(Double.MAX_VALUE)
将文本区域滚动到底部(我在互联网上找到的解决方案)。它是有效的,但并不总是有效。我已经注意到,只有当垂直滚动条在调用此代码之前不可见,而在代码执行后可见时,它才能工作。当垂直滚动条在调用此代码之前可见时,滚动到底部总是有效的。如何修复它?也许我应该让垂直滚动条始终可见?如果是,那么如何-我没有找到解决方案。
EDIT:这是示例代码:
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次之后无论如何都不会滚动到底部。
如何修复它?
发布于 2018-10-07 04:00:41
这是一个bug。请参阅以下链接https://bugs.openjdk.java.net/browse/JDK-8189732
https://stackoverflow.com/questions/38790863
复制相似问题