如何在JavaFX中使两个ListView一起滚动

如何在JavaFX中使两个ListView一起滚动,javafx,Javafx,我有两个并列的列表视图,其中一个上隐藏了滚动条。有没有简单的方法可以让我用滚动条滚动其中一个,另一个会自动跟随 我想我可能可以将属性绑定在一起,但在ListView上似乎找不到任何滚动条位置类型属性。您可以从ListView和绑定中获取滚动条 例如: import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; im

我有两个并列的列表视图,其中一个上隐藏了滚动条。有没有简单的方法可以让我用滚动条滚动其中一个,另一个会自动跟随


我想我可能可以将属性绑定在一起,但在ListView上似乎找不到任何滚动条位置类型属性。

您可以从ListView和绑定中获取
滚动条

例如:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.ScrollBar;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        HBox root = new HBox();

        // Declare ListView's
        ListView listView1 = new ListView<String>();
        ListView listView2 = new ListView<String>();

        // Fill Data inside ListView
        ObservableList<String> list = FXCollections.observableArrayList();
        for (int i = 0; i < 100; i++) {
            list.add("Value " + i);
        }
        listView1.setItems(list);
        listView2.setItems(list);

        root.getChildren().addAll(listView1, listView2);

        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();

        // Bind the ListView scroll property
        Node n1 = listView1.lookup(".scroll-bar");
        if (n1 instanceof ScrollBar) {
            final ScrollBar bar1 = (ScrollBar) n1;
            Node n2 = listView2.lookup(".scroll-bar");
            if (n2 instanceof ScrollBar) {
                final ScrollBar bar2 = (ScrollBar) n2;
                bar1.valueProperty().bindBidirectional(bar2.valueProperty());
            }
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.Node;
导入javafx.scene.scene;
导入javafx.scene.control.ListView;
导入javafx.scene.control.ScrollBar;
导入javafx.scene.layout.HBox;
导入javafx.stage.stage;
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
HBox根=新的HBox();
//声明ListView的
ListView listView1=新建ListView();
ListView listView2=新建ListView();
//在ListView中填充数据
ObservableList=FXCollections.observableArrayList();
对于(int i=0;i<100;i++){
列表。添加(“值”+i);
}
listView1.setItems(列表);
listView2.setItems(列表);
root.getChildren().addAll(listView1、listView2);
场景=新场景(根,400400);
初级阶段。场景(场景);
primaryStage.show();
//绑定ListView滚动属性
节点n1=listView1.lookup(“.滚动条”);
if(滚动条的n1实例){
最终滚动条1=(滚动条)n1;
节点n2=listView2.lookup(“.scroll bar”);
if(滚动条的n2实例){
最终滚动条2=(滚动条)n2;
bar1.valueProperty().bindBidirective(bar2.valueProperty());
}
}
}
公共静态void main(字符串[]args){
发射(args);
}
}