2017-10-26 19 views
1

ControlsFX 프로젝트의 CheckComboBox 컨트롤을 사용하고 있습니다. 당신이 Item0에서 클릭하면Custom CheckComboBox

는, 그것은 다른 모든 선택을 청소해야합니다

는하지만 사용자 지정 규칙을 만들려고합니다. 다시 Item0을 클릭하면 계속 확인됩니다. 항목 (X)를 선택하면 Item0을 지우고 항목 (X)을 선택합니다.

아이디어는 Item0이 "All"옵션이어야한다는 것입니다.

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")에 대해서도 마찬가지입니다 : controlsFx/control/CheckBitSetModelBase.java? at = default & fileviewer =); –