JavaFX ScrollPane setVvalue() не работает должным образом
Я тестирую класс JavaFX ScrollPane и понял, что он работает не так, как я ожидаю, я не знаю почему. У меня есть следующий код:
public class Client3 extends Application {
int indexMsg = 0;
Button send;
GridPane root;
ScrollPane msgPane;
GridPane msgPaneContent;
FlowPane writePane;
TextField writeMsg;
Scene scene;
@Override
public void start(Stage primaryStage) {
root = new GridPane();
root.setAlignment(Pos.CENTER);
root.setVgap(10);
root.setPadding(new Insets(10, 10, 10, 10));
msgPane = new ScrollPane();
msgPane.setPrefSize(280, 280);
msgPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
msgPaneContent = new GridPane();
msgPaneContent.setPrefWidth(270);
msgPaneContent.setVgap(10);
writePane = new FlowPane(10, 10);
writePane.setAlignment(Pos.CENTER);
writePane.setPrefWidth(280);
writeMsg = new TextField();
writeMsg.setPrefWidth(150);
writeMsg.setPromptText("Write your message");
writePane.getChildren().add(writeMsg);
GridPane.setConstraints(msgPane, 0, 0);
GridPane.setConstraints(writePane, 0, 1);
msgPane.setContent(msgPaneContent);
root.getChildren().addAll(msgPane, writePane);
writeMsg.setOnAction((ev) -> {
if (!writeMsg.getText().isEmpty()) {
TextArea msg = new TextArea(writeMsg.getText());
msg.setMaxWidth(135);
msg.setPrefRowCount(msg.getLength() / 21 + 1);
msg.setWrapText(true);
GridPane.setConstraints(msg, 0, indexMsg);
indexMsg++;
writeMsg.deleteText(0, writeMsg.getText().length());
msgPaneContent.getChildren().add(msg);
msgPane.setVvalue(1.0);
}
});
scene = new Scene(root, 300, 300);
primaryStage.setTitle("Chat App");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
В основном у меня есть GridPane
как корень с ScrollPane
и GridPane
как его дети. ScrollPane
имеет детей GridPane
, E сть TextField
с EventHandler
который генерирует TextArea
внутри GridPane
(ScrollPane
дети). каждый TextArea
Объект создается в вертикальном направлении, вниз. Я хочу установить полосу прокрутки всегда на максимальное значение (setVvalue(1.0)
) каждый раз новый TextArea
добавлен. Дело в том, что он, кажется, не работает должным образом, потому что вертикальное значение никогда не устанавливается на максимум после обработки события, но кажется, что оно установлено на максимальное значение, которое было до его обработки (нижняя часть предыдущая TextArea добавлена).
Любое решение для этого? Заранее спасибо.