Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建带有滚动窗格和动态加载的聊天视图_Java_Javafx_Xmpp - Fatal编程技术网

Java 创建带有滚动窗格和动态加载的聊天视图

Java 创建带有滚动窗格和动态加载的聊天视图,java,javafx,xmpp,Java,Javafx,Xmpp,我目前正在使用JavaFX开发一个xmpp聊天应用程序,并希望创建一个聊天视图,其灵感来自电报 我当前的问题是消息加载系统。特别是预加载。我想在用户向上滚动时预加载消息。问题是,当我将消息视图添加到包装在滚动窗格中的VBox时,滚动窗格会滚动到顶部。但我希望视口在顶部添加内容时保持原样。我真的不知道如何像电报中那样顺利地解决这个问题。我已经写了一些东西,将ScrollPane的v值设置为添加的偏移量,但是函数有时会出错,并且不是很平滑 以下是加载消息的触发器和重置滚动窗格V值的高度侦听器:

我目前正在使用JavaFX开发一个xmpp聊天应用程序,并希望创建一个聊天视图,其灵感来自电报

我当前的问题是消息加载系统。特别是预加载。我想在用户向上滚动时预加载消息。问题是,当我将消息视图添加到包装在滚动窗格中的VBox时,滚动窗格会滚动到顶部。但我希望视口在顶部添加内容时保持原样。我真的不知道如何像电报中那样顺利地解决这个问题。我已经写了一些东西,将ScrollPane的v值设置为添加的偏移量,但是函数有时会出错,并且不是很平滑

以下是加载消息的触发器和重置滚动窗格V值的高度侦听器:

    // Chat View scrolling listener
    ChangeListener<Object> changeListener = (observable, oldValue, newValue) -> {
        if(chatScrollBox.getVvalue() <= 0.01) {
            updateMessages(userHandler.getUserList(), true);
        }
    };
    chatScrollBox.vvalueProperty().addListener(changeListener);

    // Reset the vvalue when something added
    chatBox.heightProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
        double offset = newValue.doubleValue() - oldValue.doubleValue();
        chatScrollBox.setVvalue((scrollDown ? 1.0d : getVvalueFromOffset(offset)));

        if(currentChat != null) {
            int cacheSize = (chatStorage.get(currentChat) == null ? 0 : chatStorage.get(currentChat).size()-1);
            if(cacheSize <= 10) {
                chatBox.layout();
                chatScrollBox.setVvalue(1.0d);
            }
        }
    });
//聊天视图滚动侦听器
ChangeListener ChangeListener=(可观察、旧值、新值)->{
if(chatScrollBox.getVvalue()