Java 自定义复选框
我正在使用项目中的CheckComboBox控件 但我想创建一个自定义规则: 当您单击Item0时,它将清除所有其他选择。 如果再次单击项目0,它将保持选中状态。 如果选择项目(X),则会清除项目0并选择项目(X) 想法是Item0应该是“All”选项Java 自定义复选框,java,javafx,controlsfx,Java,Javafx,Controlsfx,我正在使用项目中的CheckComboBox控件 但我想创建一个自定义规则: 当您单击Item0时,它将清除所有其他选择。 如果再次单击项目0,它将保持选中状态。 如果选择项目(X),则会清除项目0并选择项目(X) 想法是Item0应该是“All”选项 编辑:此解决方案适用于ControlsFX。我对ControlsFX不太熟悉,但有点胡思乱想,我想我找到了解决您问题的方法。下面是一个完整的例子。我希望这些评论能填补任何问题 import org.controlsfx.control.Chec
编辑:此解决方案适用于ControlsFX。我对ControlsFX不太熟悉,但有点胡思乱想,我想我找到了解决您问题的方法。下面是一个完整的例子。我希望这些评论能填补任何问题
import org.controlsfx.control.CheckComboBox;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
public void start(Stage mainStage) throws Exception {
ObservableList<String> items = FXCollections.observableArrayList();
items.addAll(new String[] { "All", "Item 1", "Item 2", "Item 3", "Item 4" });
CheckComboBox<String> controll = new CheckComboBox<String>(items);
controll.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
public void onChanged(ListChangeListener.Change<? extends String> c) {
while (c.next()) {
if (c.wasAdded()) {
if (c.toString().contains("All")) {
// if we call the getCheckModel().clearChecks() this will
// cause to "remove" the 'All' too at least inside the model.
// So we need to manually clear everything else
for (int i = 1; i < items.size(); i++) {
controll.getCheckModel().clearCheck(i);
}
} else {
// check if the "All" option is selected and if so remove it
if (controll.getCheckModel().isChecked(0)) {
controll.getCheckModel().clearCheck(0);
}
}
}
}
}
});
Scene scene = new Scene(controll);
mainStage.setScene(scene);
mainStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
导入org.controlsfx.control.CheckComboBox;
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ListChangeListener;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类主扩展应用程序{
public void start(阶段主体)引发异常{
ObservableList items=FXCollections.observableArrayList();
addAll(新字符串[]{“All”、“Item 1”、“Item 2”、“Item 3”、“Item 4”});
CheckComboBox控件=新的CheckComboBox(项目);
controll.getCheckModel().getCheckedItems().addListener(新ListChangeListener()){
public void onChanged(ListChangeListener.change)这个功能非常好。我想防止的唯一问题是“所有”在我看来,这恐怕是不可能的。CheckComboBox没有提供API来检查CheckComboBox中的特定复选框。因此,您可以将数据模型controll.getCheckModel().check(0);
设置为包含“全部”“如果用户试图取消选中该复选框,但它会向您显示其中的复选框未选中。@Marckaraujo,虽然IndexedCheckModel
似乎没有用于检查特定复选框的API,但它确实有,这就是复选框
使用的。只需使用.check(“全部”);
。.isChecked(“全部”)也是如此。”