ListView滚动条行为

时间:2014-04-14 23:59:49

标签: listview javafx javafx-8

通常,当将滚动条移动到可滚动窗口的中间时,即使在底部附加更多文本,文本位置也将是静态的;相反,滚动条的光标慢慢向上移动 ListView显示相反的行为:当滚动条的光标位于中间某处时,它保持其位置,同时文本向上移动。参见示例程序:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ListViewTest extends Application  {

    ListView<String> listview= new ListView<String>();
    private ObservableList<String> items =FXCollections.observableArrayList ();

    public void start(Stage stage) {
        listview.setItems(items);
        Scene scene = new Scene(new StackPane());
        final VBox vbox = new VBox();
        vbox.getChildren().addAll(listview);
        ((StackPane) scene.getRoot()).getChildren().add(vbox);
        stage.setScene(scene);
        stage.setHeight(200);
        stage.show();

        Task<Integer> testTask = new Task<Integer>() {
            @Override protected Integer call() throws Exception {
                try {Thread.sleep(500);} catch (InterruptedException e) {   }
                for (int i=0;i<50;i++) {
                    try {Thread.sleep(300);} catch (InterruptedException e) {   }
                    final int j=i;
                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            items.add(""+j);
                        }
                    });
                }
                return 0;
            }
        };
        new Thread(testTask).start();
    }
}

可以停止/更改吗?或者,我怎样才能确定最顶层位置当前可见的项目编号?然后scrollTo()可用于保持位置。

0 个答案:

没有答案