2014-02-19 167 views
0

我有一個填充了數據的表。我有一個組合框,用戶應該能夠選擇其中一個選項,點擊過濾按鈕,表格將顯示過濾結果。我試圖使用tableRowSorter.setRowFilter方法,但似乎無法弄清楚它是如何工作的。有人會介意解釋該方法的工作原理,或者有任何建議嗎?謝謝使用組合框過濾JTable結果

+0

未必是最有效的方式,但你可以做一個新的表與過濾的結果並刷新框架。 – ola

回答

0

瞭解更多關於Sorting and Filtering in JTable。 下面是簡單的例子與RowFilter,檢查:

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.RowFilter; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableRowSorter; 

public class Example extends JFrame { 

    private JTable table; 
    private DefaultTableModel model; 
    private TableRowSorter<DefaultTableModel> sorter; 

    public Example() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     initComponents(); 
     pack(); 
     setVisible(true); 

    } 

    public static void main(String... strings) { 
     new Example(); 
    } 

    private void initComponents() { 
     JPanel p = new JPanel(); 
     final JComboBox<String> box = new JComboBox<>(new String[]{"","1","2","3"}); 
     JButton b = new JButton("filter"); 
     b.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       RowFilter<DefaultTableModel, Object> rf = RowFilter.regexFilter(box.getSelectedItem().toString(), 0); 
       sorter.setRowFilter(rf); 
      } 
     }); 
     p.add(box); 
     p.add(b); 

     table = new JTable(model = new DefaultTableModel(3,3)); 
     sorter = new TableRowSorter<DefaultTableModel>(model); 
     table.setRowSorter(sorter); 

     add(p,BorderLayout.SOUTH); 
     add(new JScrollPane(table)); 
    } 
}