2016-04-07 31 views
1

Çok sütunlu bir Tree oluşturmak istiyorum. Bu eğitimi here (Almanca) ve bu answer (İngilizce) buldum. Bir sütuna onay kutularını eklemek istiyorum, ancak nasıl yapılacağını bilmiyorum. Bir onay kutusunu JTreeTable'a döndürdüğümde, yürütme sırasında bir şey onay kutusu değil onay kutusu ayrıntıdır. Aşağıda resmedilen this gibi bir şeyi nasıl alabilirim?Ağaç tablosuna nasıl ekleyebilirim

Taking the New Swing Tree Table for a Spin gösterildiği gibi

like that

+0

Isnt 'JCheckBox',' JTable' hücresinin 'boolean' verileri için varsayılan olarak görüntüleniyor mu? – Prashant

+1

[Örnek] için (http://stackoverflow.com/questions/21924846/checkbox-within-a-jxtreetable/21924930#21924930), [örnek] (http://stackoverflow.com/questions/31375773/how-do -you-make-bileşenleri-of-jpanel-as-a-düğüm-in-jtree-kullanılabilir/31376208 # 31376208) ve kişisel olarak, ben SwingX gelen JXTreeTable kullanacağım, sadece size verecek daha iyi bir uygulama Bu işi – MadProgrammer

+0

yapman gerekecek kontrol etmek için teşekkürler, Jtrees içindeki onay kutularına izin vermek istemiyorum, yapmak istediğim ağaçların yanında sütunda. – Ives

cevap

2

, here, RowModel sizin uygulanması getColumnClass() doğru türünü ve getValueFor() gelen doğru değeri döndürmesi gerekir gösterdi. Boolean.class tipi değerler JCheckBox ile işlenecektir. Aşağıdaki uygulamalar görüntü gösterdi üretmek:

image

@Override 
public Class getColumnClass(int column) { 
    switch (column) { 
     case 0: 
      return Date.class; 
     case 1: 
      return Long.class; 
     case 2: 
      return Boolean.class; 
     case 3: 
      return Boolean.class; 
     case 4: 
      return Boolean.class; 
     default: 
      assert false; 
    } 
    return null; 
} 

@Override 
public Object getValueFor(Object node, int column) { 
    File f = (File) node; 
    switch (column) { 
     case 0: 
      return new Date(f.lastModified()); 
     case 1: 
      return f.length(); 
     case 2: 
      return f.canRead(); 
     case 3: 
      return f.canWrite(); 
     case 4: 
      return f.canExecute(); 
     default: 
      assert false; 
    } 
    return null; 
} 

ben onay kutusunu seçemezsiniz.

buna göre setValueFor() sizin uygulanmasında node istenen sütuna (ler) için isCellEditable() sizin uygulanmasında true dönmek ve güncellemeniz gerekir. Hücre editörü sonlandırıldığında, setValueFor() uygulamanız çağrılır, bu nedenle daha sonra getValueFor() tarafından döndürülen aynı değerini güncelleştirdiğinden emin olun. İsteğe bağlı olarak, bir EventListenerList API'sinde belirtilen şemayı kullanarak TreeModelListener listesini yöneten TreeModel yöntemlerini uygulamak isteyeceksiniz; DefaultTreeModel kaynağı code iyi bir örnektir.

+0

Teşekkür ederim, tabloya onay kutusunu ekledim, yeni JCheckbox nesneleri yaratmaya ihtiyacım yok gibi görünüyor, varsayılan JCheckbox'ı kullanıyorum, kişiselleştir onay kutusunu kullanabilir miyim? – Ives

+0

ve onay kutusunu işaretleyemiyorum – Ives

+0

Belirtilen örnek, "File" ifadesini kullanır; Değiştirilebilir verileri işlemek için genel yaklaşım üzerinde ayrıntılı olarak çalıştım. – trashgod