我正在尝试创建一个聊天程序,当我输入一个字符串进入"输入"(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);
}
}
});
答案 0 :(得分:0)
我已经尝试过你在问题中发布的代码,但似乎工作正常。
我只删除了input.setEditable(false)
以添加新行,以便textarea达到其极限并开始一直向下滚动并将Event.consume()
添加到输入textarea侦听器的末尾,以便输入textarea的内部处理程序每次点击后都不会在this answer中提到的输入中添加新行。