2012-10-09 99 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