Javafx TextArea不会自动滚动

时间:2018-04-07 08:46:42

标签: java javafx-8

我正在尝试创建一个聊天程序,当我输入一个字符串进入"输入"(textarea)并按"输入",它将被添加到"输出&# 34;(textarea)和输出是"滚动"(滚动窗格)的内容。我想让它在输入后自动滚动到底部并且输出中的文本发生变化。我尝试使用更改侦听器,但它没有滚动到底部。我已经搜索过这个问题,但没有一个解决方案可以帮助我。如果代码看起来很混乱(Java FX新手)

,请道歉
BorderPane border=new BorderPane();
Scene chatScene=new Scene(border,entreeStage.getWidth(),entreeStage.getHeight());
 chatScene.getStylesheets().add(Main.class.getResource("entreeAurora.css").toExternalForm());

 ToolBar toolbar2=new ToolBar(teach,glueSeparator,exit);toolbar2.setId("toolbar2");
 output=new TextArea();output.setEditable(false);

 ScrollPane scroll=new ScrollPane();
 scroll.setContent(output);
 scroll.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);scroll.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);output.setId("output");
 scroll.setFitToHeight(true);scroll.setFitToWidth(true);

 input =new TextArea();input.setId("input");input.setPrefHeight(175);
 border.setTop(toolbar2);border.setBottom(input);border.setCenter(scroll);
 output.textProperty().addListener(new ChangeListener<Object>() {
        @Override
        public void changed(ObservableValue<?> observable, Object oldValue,
                Object newValue) {

            output.setScrollTop(Double.MAX_VALUE); 
        }
    });
 input_text=input.getText();

 input.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent Event) {
        output_text=output.getText();input_text=input.getText();
        if(Event.getCode()==KeyCode.ENTER) {
            output.setText(output_text+"You: "+input_text+"\n");
            output.appendText("");
            output.setScrollTop(Double.MAX_VALUE);
        input.setEditable(false);input.setText("");

        }
        }
     });

     input.addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
         @Override
         public void handle(KeyEvent Event) {
             if(Event.getCode()==KeyCode.ENTER) {
                 input.setEditable(true);

             }
         }
     });

1 个答案:

答案 0 :(得分:0)

我已经尝试过你在问题中发布的代码,但似乎工作正常。

我只删除了input.setEditable(false)以添加新行,以便textarea达到其极限并开始一直向下滚动并将Event.consume()添加到输入textarea侦听器的末尾,以便输入textarea的内部处理程序每次点击后都不会在this answer中提到的输入中添加新行。