ListView.scrollTo以大量项目运行缓慢

时间:2014-03-10 18:09:25

标签: java listview javafx javafx-2

下面代码中的scrollTo方法效果很慢。有没有办法加快它或可能是一些替代变体?我需要在应用程序中显示近100000个项目。可能还有一些替代组件。感谢。

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        final ListView<String> listView = new ListView<>();
        Button button = new Button("goto");
        button.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                int i = 99998;
                System.out.println("before scroll");
                long startTime = System.currentTimeMillis();
                listView.scrollTo(i);
                long elapsedTime = System.currentTimeMillis() - startTime;
                System.out.println(elapsedTime);
                listView.getFocusModel().focus(i);
            }
        });
        List<String> items = new ArrayList<>();
        for (int i = 0; i < 100000; i++) {
            items.add(UUID.randomUUID().toString());
        }
        listView.setItems(FXCollections.observableArrayList(items));
        StackPane pane = new StackPane();
        VBox vbox = new VBox();
        vbox.getChildren().add(button);
        vbox.getChildren().add(listView);
        pane.getChildren().add(vbox);
        stage.setScene(new Scene(pane));
        stage.show();
    }
}

0 个答案:

没有答案