Oracle docs说“selectIndices”:此方法允许同时设置一个或多个选择。 selectIndices(int index,int ... indices) https://docs.oracle.com/javafx/2/api/javafx/scene/control/MultipleSelectionModel.html
它不接受int []数组。它接受以逗号分隔的整数:
list.getSelectionModel().selectIndices(0,2);
但是如何在程序中执行此操作? 我可以在ListView中手动选择多个项目。
答案 0 :(得分:0)
它接受int[]
数组,但仅作为第二个参数。唯一的不便是确保您传递至少一个索引的第一个参数
幸运的是,selectIndices
's contract还包含一个允许您将值作为第一个参数传递的部分:
它将忽略任何不在有效范围内的值(即大于或等于零,并且小于基础数据模型中的项目总数)。
因此,您可以安全地将-1
作为第一个参数传递,并将所有索引作为第二个参数选择。
private static void select(ListView<?> listView, int divisor, int remainder) {
MultipleSelectionModel<?> selectionModel = listView.getSelectionModel();
// create array of indices to select
final int size = listView.getItems().size();
int selectionSize = size / divisor;
if (size % divisor > remainder) {
selectionSize++;
}
int[] selectedIndices = new int[selectionSize];
for (int i = 0, value = remainder; i < selectionSize; i++, value += divisor) {
selectedIndices[i] = value;
}
// unselect currently selected items
selectionModel.clearSelection();
// select indices in the array
selectionModel.selectIndices(-1, selectedIndices);
}
@Override
public void start(Stage primaryStage) {
ListView<Integer> listView = new ListView<>();
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
for (int i = 0; i < 99; i++) {
listView.getItems().add(i);
}
Button btn = new Button("Select Even");
btn.setOnAction(evt -> select(listView, 2, 0));
Button btn2 = new Button("Select Odd");
btn2.setOnAction(evt -> select(listView, 2, 1));
Scene scene = new Scene(new VBox(10, listView, btn, btn2));
primaryStage.setScene(scene);
primaryStage.show();
}