我有一个ListView,其中使用TextField的onAction
事件添加项目。需要在项目上滑动才能将其删除。
以下是添加项目的代码:
private void addTask(String title) {
Label label = new Label(newTask.getText());
label.getStyleClass().add("task");
label.setOnMousePressed((e -> {
startX = e.getX();
}));
label.setOnMouseReleased(e -> {
endX = e.getX();
if (endX - startX > 100)
list.getItems().remove(list.getSelectionModel().getSelectedItem());
});
list.getItems().add(label);
}
每当项目被删除时,它下面的所有项目也会被删除。我尝试将事件侦听器添加到实际列表中,但鼠标单击不会在项目上注册。
我正在使用JFoenix自定义控件。这与它有什么关系吗?
答案 0 :(得分:0)
目前还不是很清楚你的确切问题是什么,但这里是在滑动动作中删除所选项目的代码:
private double startX;
@Override
public void start(Stage stage) throws Exception {
BorderPane root = new BorderPane();
ObservableList<String> names = FXCollections.observableArrayList(
"Julia", "Ian", "Sue", "Matthew", "Hannah", "Stephan", "Denise");
ListView<String> listView = new ListView<>(names);
listView.setOnMousePressed(e -> {
startX = e.getX();
});
listView.setOnMouseReleased(e -> {
if (Math.abs(e.getX() - startX) > 100) {
listView.getItems().remove(listView.getSelectionModel().getSelectedItem());
}
});
Scene scene = new Scene(root, 1000, 650);
stage.setScene(scene);
stage.show();
}
因此,您不需要为ListView的每个项添加侦听器,listView本身应该处理鼠标事件。
请注意,上面的代码会在左右和左右滑动中删除项目。 如果你只需要其中一个,那么左右滑动就是:
if (e.getX() - startX > 100) {
listView.getItems().remove(listView.getSelectionModel().getSelectedItem());
}
和左右:
if (startX - e.getX() > 100) {
listView.getItems().remove(listView.getSelectionModel().getSelectedItem());
}