使用CheckBoxListCell的Javafx listview不适用于拖放
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CheckBoxListCell的Javafx listview不适用于拖放相关的知识,希望对你有一定的参考价值。
我有一个qazxsw poi,带有一个名为qazxsw poi的自定义CheckBox项目。一切看起来不错,但现在我需要实现拖放以便于排序。
我知道我必须使用自定义ListView
并将拖放事件设置为单元格本身。我的问题是我已经有一个CheckBoxListItem
并且不知道如何添加事件。
评论的代码是我认为可能的方式,但CellFactory
方法不起作用。
我的主要课程:
CellFactory
和CheckBoxListItem.java:
updateItem
答案
解决方案是你必须结合你的方法。您只能模仿CheckBoxListCell.forListView()内部的功能。即,使用observableProperty和转换器创建一个新的CheckBoxListCell。我只是将您的演示重新编码到下面,它按预期工作。
public class Main extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
ListView<CheckBoxListItem> listView = new ListView<>();
ScrollPane scrollPane = new ScrollPane(listView);
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
for(int i=1; i<15; i++) {
listView.getItems().add(new CheckBoxListItem("Value"+i));
}
listView.setCellFactory(CheckBoxListCell.forListView(CheckBoxListItem::selectedProperty, new StringConverter< CheckBoxListItem>() {
@Override
public String toString(CheckBoxListItem object) {
return object.getName();
}
@Override
public CheckBoxListItem fromString(String string) {
return null;
}
}));
/*
ObjectProperty<CheckBoxListCell<CheckBoxListItem>> dragSource = new SimpleObjectProperty<>();
listView.setCellFactory(lv -> {
CheckBoxListCell<CheckBoxListItem> cell = new CheckBoxListCell<CheckBoxListItem>(){
@Override
public void updateItem(CheckBoxListItem item , boolean empty) {
super.updateItem(item, empty);
if (item == null) {
setGraphic(null);
}else {
setGraphic(?????);
}
}
};
cell.setOnDragDetected(event -> {
//TODO
});
cell.setOnDragOver(event -> {
//TODO
});
cell.setOnDragDropped(event -> {
//TODO
});
return cell ;
});
*/
Scene scene = new Scene(scrollPane, 350, 450);
stage.setScene(scene);
stage.show();
}
@Override
public void stop() {
System.exit(0);
}
}
以上是关于使用CheckBoxListCell的Javafx listview不适用于拖放的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX : 使用 JavaFX 嵌入浏览器而不是可用的 webview