2012-10-09 219 views

回答

0

我想我已經得到了它的工作是這樣的:

聲明的臨時表和表模型的一些全局變量來保存隱藏的列:

private JTable hiddenTable = new JTable(); 
private DefaultTableColumnModel hiddenModel = new DefaultTableColumnModel(); 

然後使用過濾器方法來按下每個鍵,以將要隱藏的列添加到臨時表模型,同時將它們從主表模型中移除。然後你再告訴他們當字符串加入他們回到主表,並從暫時的消除他們一致:

private void filterList() { 

     // Hide columns 
     for (TableColumn column : table.getColumns()) { 
      if (!((String) column.getHeaderValue()).toLowerCase().contains(
        searchBox.getText().toLowerCase().trim())) { 
       hiddenModel.addColumn(column); 
       table.getColumnModel().removeColumn(column); 
      } 
     } 

     // Show columns 
     for (TableColumn column : hiddenTable.getColumns()) { 
      if (((String) column.getHeaderValue()).toLowerCase().contains(
        searchBox.getText().toLowerCase().trim())) { 
       table.getColumnModel().addColumn(column); 
       hiddenModel.removeColumn(column); 
      } 
     } 
    } 

這裏唯一的問題是,重新添加到表時列失去它們的順序。

0

您可以使用自定義的TableModel實現來封裝您的真實模型以進行過濾。每當列更改時只需通知TableModelListeners。

1

在Java中是否有任何實現過濾JTable(使用搜索JTextField)的列(標題值)而不是其行?

  • 是具有看看RowFilter並申請所需的列

我需要根據列在搜索時找到該字符串顯示/隱藏。

  • 不是一件容易的事,因爲它需要很多的努力,和優秀的知識約Java Essential classesSwing和作爲一個專家JTable

  • 我不會走這條路,用正確的ColumnRender,那麼欄應該高亮顯示,而不是屏幕上的JTables Column跳過(隱藏 - >顯示--->隱藏等)

  • 有一些關於的例子3210,RowSorter,從來沒有需要,從來沒有嘗試過。

+0

另請參閱本問答(http://stackoverflow.com/q/7137786/230513)關於響應表頭的點擊。 – trashgod