通常,当将滚动条移动到可滚动窗口的中间时,即使在底部附加更多文本,文本位置也将是静态的;相反,滚动条的光标慢慢向上移动 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()可用于保持位置。