ListView(中)
设置每一个单元格的高度
listView.setFixedCellSize(50);
阻止获得焦点
listView.setFocusTraversable(false);
索引为2的元素默认获取焦点(可以和设置选中效果共存)
listView.getFocusModel().focus(2);
选中索引为0的元素
效果图
自定义Callback用于展示和修改listView
Callback<ListView<Data>, ListCell<Data>> cell = TextFieldListCell.forListView(new StringConverter<Data>() { @Override public String toString(Data object) { if (object == null) { return ""; } return object.getName(); } @Override public Data fromString(String string) { return new Data(string); } }); listView.setCellFactory(cell);
设置选中要进行编辑索引为2的数据
listView.edit(2);
开始修改监听
listView.setOnEditStart(new EventHandler<ListView.EditEvent<Data>>() { @Override public void handle(ListView.EditEvent<Data> event) { System.out.println("开始编辑"); System.out.println("event.getIndex() = " + event.getIndex()); System.out.println("event.getNewValue() = " + event.getNewValue()); } });
取消编辑监听(当前选中项输入框被移除是调用,也就是不管有没有条件数据都会调用)
listView.setOnEditCancel(event -> { System.out.println("取消编辑"); });
完成编辑监听(使用该方法时需要手动设置新数据,该方法声明后会导致cell中的fromString方法失效)
listView.setOnEditCommit(event -> { System.out.println("完成编辑"); System.out.println("event.getNewValue().getName() = " + event.getNewValue().getName()); // 设置新数据 observableList.set(event.getIndex(), event.getNewValue()); });
效果图
其他几种编辑效果
ComboBoxListCell
Callback<ListView<Data>, ListCell<Data>> cell = ComboBoxListCell.forListView(new StringConverter<Data>() { @Override public String toString(Data object) { return object.getName(); } @Override public Data fromString(String string) { return new Data(string); } }, new Data("F"), new Data("G")); listView.setCellFactory(cell);
效果图
传入可观察列表
ObservableList<Data> observableList1 = FXCollections.observableArrayList(observableList.subList(0, observableList.size())); Callback<ListView<Data>, ListCell<Data>> cell = ComboBoxListCell.forListView(new StringConverter<Data>() { @Override public String toString(Data object) { return object.getName(); } @Override public Data fromString(String string) { return new Data(string); } }, observableList1); listView.setCellFactory(cell);
效果图
ChoiceBoxListCell
ObservableList<Data> observableList1 = FXCollections.observableArrayList(observableList.subList(0, observableList.size())); Callback<ListView<Data>, ListCell<Data>> cell = ChoiceBoxListCell.forListView(new StringConverter<Data>() { @Override public String toString(Data object) { return object.getName(); } @Override public Data fromString(String string) { return new Data(string); } }, observableList1); listView.setCellFactory(cell);
效果图
CheckBoxListCell(设置除了B默认选中)使用此方法进行设置可以不用将listView设置为可编辑
ObservableList<Data> observableList1 = FXCollections.observableArrayList(observableList.subList(0, observableList.size())); Callback<ListView<Data>, ListCell<Data>> cell = CheckBoxListCell.forListView(new Callback<Data, ObservableValue<Boolean>>() { @Override public ObservableValue<Boolean> call(Data param) { SimpleBooleanProperty sbp = new SimpleBooleanProperty(true); if (param.getName().equals("B")) { sbp.set(false); } return sbp; } }, new StringConverter<Data>() { @Override public String toString(Data object) { return object.getName(); } @Override public Data fromString(String string) { return new Data(string); } }); listView.setCellFactory(cell);
效果图