2016-04-07 49 views
1

我想創建一個Tree多列。我發現本教程here(德文)和answer(英文)。我想在一列中添加複選框,但我不知道如何去做。當我將複選框返回到JTreeTable時,執行中顯示的內容是複選框詳細信息而不是複選框對象。我如何獲得像this之類的東西,如下圖所示?如何在樹表中添加複選框

like that

+0

Isnt'JCheckBox'顯示爲'JTable'單元格的'boolean'數據的默認值? – Prashant

+1

對於[示例](http://stackoverflow.com/questions/21924846/checkbox-within-a-jxtreetable/21924930#21924930),[示例](http://stackoverflow.com/questions/31375773/how-do - 你可以使用jpanel作爲一個節點在jtree中使用/ 31376208#31376208),並且我會使用SwingX中的'JXTreeTable',它只是一個更好的實現,它會給你帶來控制你將需要使這項工作 – MadProgrammer

+0

謝謝,我不想讓JTree內的複選框,我想要做的是除了樹木的列。 – Ives

回答

2

Taking the New Swing Tree Table for a Spin所示,引here,你的RowModel實現必須返回從getColumnClass()正確的類型,然後從getValueFor()正確的值。 Boolean.class類型的值將以JCheckBox呈現。下面的實現產生圖像引用:

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; 
} 

我不能選擇複選框。

您需要在您的實現的isCellEditable()爲所需的列(S)在實施setValueFor()返回true和更新node相應。當單元編輯器結束時,將調用您的setValueFor()的實現,因此請驗證它是否會更新相同的值,稍後將返回getValueFor()。或者,您需要實施TreeModel方法,該方法通過使用EventListenerList API中規定的方案管理TreeModelListener列表; DefaultTreeModel來源code就是一個很好的例子。

+0

謝謝你,我添加複選框成功表,似乎我不需要創建新的JCheckbox對象,它使用默認的JCheckbox,我可以使用我的自定義複選框? – Ives

+0

,我無法選擇複選框 – Ives

+0

引用的例子使用'File',其實例是不可變的;我已經詳細闡述了處理可變數據的一般方法。 – trashgod

相關問題