2017-10-26 11 views
1

ControlsFXプロジェクトのCheckComboBoxコントロールを使用しています。あなたはITEM0でクリックするとカスタムCheckComboBox

が、それは他のすべての選択をきれいにする必要があります

は、しかし、私はカスタムルールを作成します。 再度Item0をクリックすると、引き続きチェックされます。 Item(X)を選択すると、Item0を消去してItem(X)を選択します。

アイデアは、Item0は「すべて」オプションである必要があります。

enter image description here

編集:このソリューションはControlsFXためです。

+0

可能な重複[チェックして、チェックを外し、すべての項目をチェックするときやアイテムの一部をunckeck方法](https://stackoverflow.com/questions/41229964/how-to-check-and-uncheck-all -items-when-checking-or-unckeck-some-of-the-items) –

答えて

1

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

これはかなりうまくいきます。既にチェックされている場合、「すべて」がチェックされないようにしたいという唯一の問題です。 – Marckaraujo

+0

私の意見では可能ではないかと心配です。CheckComboBoxは、CheckComboBox内の特定のチェックボックスをチェックするためのAPIを提供していません。したがって、ユーザがチェックを外そうとした場合、チェックボックスがチェックされていないことを示す場合は、データモデル 'controll.getCheckModel()。check(0);に 'All'選択を含めるように設定することができます – JKostikiadis

+0

@Marckaraujo、 IndexedCheckModelは特定のチェックボックスをチェックするためのAPIを持っていないようですが、['CheckBitSetModelBase'](https://bitbucket.org/controlsfx/controlsfx/src/ddd3706a94a7f65591220047d9f6430e1b4fe13d/controlsfx/src/main/java/org/ 'CheckComboBox'が使用するものです' .check( "All"); '.isChecked(" All ")と同じです。 ); ' –

関連する問題