为了账号安全,请及时绑定邮箱和手机立即绑定

JavaFX - CheckListView 的 SelectionModel

JavaFX - CheckListView 的 SelectionModel

喵喵时光机 2023-08-04 18:59:08
问题描述我有一个包含多个项目(复选框)的 CheckListView。我更改了选择模式(下面的代码)以允许多项选择。但是,当我选择多行(如下图所示)并按空格键时,只有“当前选定行”会更改状态。我想要/需要:当我按空格时,切换所有选定的行状态。我尝试调查处理程序,但我对要更改的内容感到困惑。任何帮助是极大的赞赏。        @FXML        private CheckListView<String> checkListPermissoes;        @Override        public void initialize(URL url, ResourceBundle rb) {            ...  checkListPermissoes.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

这是一个简单的解决方法,只需将 keyListener 注册到列表中,然后当您按 Space 时处理 JavaFx 未处理的项目:


代码:


public class Controller implements Initializable {

    @FXML private CheckListView<String> list;


    @Override

    public void initialize(URL location, ResourceBundle resources) {


        list.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);


        list.getItems().addAll("Apple", "Lemon", "Orange", "Banana");


        list.setOnKeyPressed(event -> {

            if (event.getCode().equals(KeyCode.SPACE)) {

                revertCheck(list.getSelectionModel().getSelectedIndices());

            }

        });


    }


    private void revertCheck(ObservableList<Integer> selectedIndices) {

        selectedIndices.forEach(index -> {

            // If needed to skip the selected index which is handled by JavaFx

            if (!index.equals(list.getSelectionModel().getSelectedIndex())) {

                if (list.getCheckModel().isChecked(index)) {

                    list.getCheckModel().clearCheck(index);

                } else {

                    list.getCheckModel().check(index);

                }

            }

        });

    }

}

.fxml :


<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.AnchorPane?>

<?import org.controlsfx.control.CheckListView?>

<AnchorPane xmlns="http://javafx.com/javafx"

            xmlns:fx="http://javafx.com/fxml"

            fx:controller="checklist.Controller">

<CheckListView fx:id="list"/>

</AnchorPane>


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信