gpt4 book ai didi

JavaFX - CheckListView 的 SelectionModel

转载 作者:行者123 更新时间:2023-12-02 09:31:06 24 4
gpt4 key购买 nike

问题描述
我有一个包含多个项目(复选框)的 CheckListView。我更改了选择模式(下面的代码)以允许多项选择。但是,当我选择多行(如下图所示)并按空格键时,只有“当前选定行”会更改状态。

我想要/需要:当我按空格键时,切换所有选定的行状态。

我尝试研究处理程序,但我对要更改的内容感到困惑。

非常感谢任何帮助。

enter image description here

        @FXML
private CheckListView<String> checkListPermissoes;


@Override
public void initialize(URL url, ResourceBundle rb) {
... checkListPermissoes.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

最佳答案

这里有一个简单的解决方法,只需向列表注册一个 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>

关于JavaFX - CheckListView 的 SelectionModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57966065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com