我在每个单元格中都有一个自定义的cellFactory和一个按钮。单击任何其他节点时,将选择列表中的行,但是如果单击按钮,则不会选择该行。

我的cellFactory:

public class OrderListViewCell extends ListCell<Order> {
    @FXML
    private Pane container;

    @FXML
    private Button button;

    private FXMLLoader mLLoader;

    @Override
    protected void updateItem(Order order, boolean empty) {
        super.updateItem(order, empty);

        if(empty || order == null) {

            setText(null);
            setGraphic(null);

        } else {
            if (mLLoader == null) {
                mLLoader = new FXMLLoader(getClass().getResource("/FXML/order-cell.fxml"));
                mLLoader.setController(this);
                try {
                    mLLoader.load();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
            setText(null);
            setGraphic(container);
        }

    }
}

最佳答案

默认情况下,单击控件可能不允许选择列表单元格。在这种情况下,您必须手动处理选择。
包括一个单击的处理程序以按钮以选择基础列表单元。就像是 ...

    try {
          mLLoader.load();
          button.setOnMouseClicked(e -> getListView().getSelectionModel().select(getItem()));
    }catch (IOException e) {
        e.printStackTrace();
   }


请记住,您将不会获得listCell的:focused:selected选择样式,因为按钮将具有焦点。

09-25 16:07