2011-05-21 44 views
6

我使用的是來自SwingX組件的JXTable。如果我使用setSortable(boolean flag)方法,那麼它將啓用或禁用所有列的排序。使用SwingX排序JXTable

由於我的要求,我想禁用排序幾列,並啓用排序其他列。

任何人都可以幫助實現這一功能嗎?


感謝您的回覆。你能幫我用setSorterClass(String sorterClassName)禁用一列的排序嗎?你能給我任何代碼examplex嗎?這對我非常有幫助。

回答

2

我認爲,至少根據我在網上發現的情況,您可以通過爲該列設置 setSorterClass(null)來實現。

正如我們可以在the cached web site上看到的那樣,由於swinglabs教程頁面顯示爲關閉,我敢打賭它與最近在java.net服務上的混亂有關。 「 」JXTables默認啓用了列排序,您可以使用setSortingEnabled(boolean allowSort)禁用所有列排序,也可以使用具有空排序器類名稱的setSorterClass(String sorterClassName)禁用單列排序。

就我個人而言,我認爲沒有意義阻止用戶在選定的表格列上進行排序。無論如何,如果用戶想要對他/她應該能夠這樣做的列進行排序,那麼最終我相信最好允許用戶減少更多,當然當他/她能夠做到這樣的細節時控制他/她的觀點。

+0

同意「沒有意見阻止用戶在所選表列上排序」+1 – mKorbel 2011-05-21 12:56:16

+0

已過時(或更精確:不再存在於1.6; - )api。 – kleopatra 2011-06-14 12:59:49

+0

@kleopatra利益。我不知道這個事實。我無法找到更好的答案,因爲使用網頁是由java.net遷移的結果(更像是對我造成的破壞:))。我想知道,你會有什麼建議? – Boro 2011-06-14 13:46:24

1

我想你應該在TableRowSorter API看看,看看JXTable是否支持它想:

TableModel myModel = createMyTableModel(); 
JTable table = new JTable(myModel); 
table.setRowSorter(new TableRowSorter(myModel)); 

TableRowSorter有一個API方法isSortable()

公共布爾isSortable(INT列)

如果指定的列 可排序則返回true;否則,是錯誤的。

參數:column - 列到 檢查分選,在 底層模型而言

返回:如果 列可排序

+0

感謝您的回覆。你能幫助我知道如何使用setSorterClass(String sorterClassName)來禁用一列的排序。你能給出任何代碼示例。這對我非常有幫助。 – user711466 2011-05-25 15:04:17

+0

-1用於傳播非swingx'ish方法。如果您不知道SwingX/JXTable,則沒有義務回答;-) – kleopatra 2011-06-14 13:02:14

4

SwingX支持每列排序屬性在TableColumnExt的級別上。它的默認值是true,列創建

table.getColumnExt(myColumnIndex).setSortable(false) 

之後,或者在創建時禁用它,使用自定義ColumnFactory,像

ColumnFactory factory = new ColumnFactory() { 

    @Override 
    public void configureTableColumn(TableModel model, TableColumnExt column) { 
     super.configureTableColumn(model, column); 
     if (... your condition to disable sortable) { 
      column.setSortable(false); 
     } 
    } 
} 
table.setColumnFactory(factory); 
table.setModel(model); 

JXTable將採取列屬性同步到分揀機的護理,如果它是SortController類型(這是默認值)

+0

+1很好地解釋並介紹瞭如何執行此操作。感謝您糾正/更新我。 :) – Boro 2011-06-15 08:04:59