JFoenix ListView正在删除所选项下面的所有项目

时间:2017-01-23 14:34:49

标签: java listview javafx

我有一个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自定义控件。这与它有什么关系吗?

1 个答案:

答案 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());
 }