To jest część mojego kodu.JavaFX: textArea.setScrollTop (Double.MAX_VALUE) nie zawsze działa
textArea.setText(someNewText)
textArea.positionCaret(textArea.getText().length());
textArea.setEditable(true);
textArea.setScrollTop(Double.MAX_VALUE);
używam textArea.setScrollTop(Double.MAX_VALUE)
do przewijania textarea do dołu (roztwór znalazłem w internecie). Działa, ale nie zawsze. Zauważyłem, że nie może działać tylko wtedy, gdy pionowy pasek przewijania nie jest widoczny przed wywołaniem tego kodu i widoczny po wykonaniu kodu. Kiedy pionowy pasek przewijania jest widoczny przed wywołaniem tego kodu, przewijanie do dołu działa zawsze. Jak to naprawić? Może powinienem zrobić pionowy pasek przewijania zawsze widoczny? Jeśli tak, to w jaki sposób - nie znalazłem rozwiązania.
EDIT: To jest przykładowy kod:
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();
}
}
Jest to wynik, kiedy wciśnięty przycisk 4 razy: Jak widać nie przewiń do dołu. Po ponownym naciśnięciu przycisku (po raz piąty) uzyskano następujący wynik:
Teraz, jak widać, przewijano go na sam dół. Próbowałem dodać:
ScrollPane scrollPane = (ScrollPane) textArea.lookup(".scroll-pane");
scrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
do przewijania zawsze widoczne - jest to widoczne, ale po 4 razy i tak nie przewiń do dołu.
Jak to naprawić?
To jest błąd, więc otworzyłem raport o błędzie. Zobacz https://bugs.openjdk.java.net/browse/JDK-8189732 –