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 добавлена).

Любое решение для этого? Заранее спасибо.

0 ответов

Другие вопросы по тегам