2011-08-01 15 views
8

Bir bileşik hücrenin bir parçası olarak CellTree bulunan bir MultiSelectionModel kullanan CheckboxCells. Her şey çalışıyor gibi görünüyor.GWT CellTree seçimi

Aslında yapmaya çalıştığım şey, ağacımda seçilebilecek her öğe için arayüzümde sekmeler oluşturmaktır. Kulağa önemsiz geliyor, ama selectionChange'da MyData'u nasıl alacağımı kestiriyorum. Öğelerin seçili kalması gerekir; böylece öğelerini daha sonra seçmezseniz, sekmeler tekrar kaldırılır.

Ben sekmenin içeriği ne olması gerektiğini bilmek için sadece seçilen öğe için MyData almak gerekir.

 final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>(); 
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

     public void onSelectionChange(SelectionChangeEvent event) { 

     } 
    }); 

Tamamen eksik olanı hissediyorum. selectionChange etkinliğinde yapabileceğim tek şey, seçilen setin ne olduğunu görmek için seçim işleyicimi sorgulamaktır. Bir küresel, "bir şey değişti" dinleyici yerine belirli bir ağaç seçimine bir dinleyici ekleyebileceğim bir yolu var mı.

Herhangi bir ipucu çok takdir edilecektir.

cevap

2

Sen CellTree seçili öğeleri almak için selectionModel üzerine getSelectedSet() erişmek zorunda. Ne yazık ki, son seçilen öğeyi nasıl alacağınız artık görünüyor (SingleSelectionModel'da olduğu gibi).

final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>(); 
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

     public void onSelectionChange(SelectionChangeEvent event) { 
       Set<TableLight> selectedItems = selectionModel.getSelectedSet(); 
     } 
    }); 
+1

Evet, bu, bilgilerin içsel olarak bilindiği kadar açık bir şekilde berbat. Belki başka bir yol olacağını düşündüm. Zaten yapmak zorunda olduğum şey seçili seti almak, ardından sekme eklemek/çıkarmak için set farkını bulmak. – dpwr

4

Tamam, bunu daha sonra bulan herkes için bir yol var!

CheckboxCell'i CompositeCell'e eklediğinizde, alan değiştirildiğinde değiştirilecek bir FieldUpdater belirtebilirsiniz.

  hasCells.add(new HasCell<TableLight, Boolean>() { 

      // Cell containing checkbox 
      private Cell cell = new CheckboxCell(true, false); 

      public Cell<Boolean> getCell() { 
       return cell; 
      } 

      public FieldUpdater<TableLight, Boolean> getFieldUpdater() { 
       return new FieldUpdater<TableLight, Boolean>() { 

        public void update(int index, TableLight object, Boolean value) { 
         if (value) { 
          tablesTabPanel.addTable(object); 
         } else { 
          tablesTabPanel.removeTable(object); 
         } 
        } 
       }; 
      } 

      public Boolean getValue(TableLight object) { 
       return selectionModel.isSelected(object); 
      } 
     }); 

Ayrıca sadece karışıklığı önlemek için. Yukarıdaki MyData hakkında konuştuğumda, bu örnekte TableLight.

7

uzatılmış seçim Model ekleniyor size son seçilen eleman alacak:

gridSelectionModel = new MultiSelectionModel<MyData>(KEY_PROVIDER){ 

     public void setSelected(MyData myData, boolean selected) { 
      super.setSelected(myData, selected); 
      if (selected){ 
       System.out.println("setSelected selected " + myData); 
       // call now some ui handler to use the last selected myData element 
      } 
     } 
    }; 

umarım bu yardımcı olur.