2017-01-23 123 views
0

我有一个ListView,其中使用TextField的onAction事件添加项目。在物品上滑动需要将其移除。 这里是添加一个项目代码:JFoenix ListView将删除所选下方的所有项目

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

请发表[MCVE。 –

回答

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()); 
} 
+0

出于某种原因,列表项上的点击不会在列表中注册。如果我将光标拖到项目之外,它将起作用。 – theTechnoKid

+0

好吧,那么你应该分享你创建你的列表视图的代码。或者甚至更好的写一些小而完整的应用程序,以便我可以在我身边重现它。 – Enigo

+0

@theTechnoKid btw,刚发现JFoenix中有很多bug,所以你应该先试试我的代码,如果它按预期工作,切换到JFoenix。如果它不起作用 - 最有可能是一个错误,你可以在github上提交新的问题。 – Enigo