Фильтрация JTable

Я делаю вычислительный проект, который требует от меня создать JTable, через который можно фильтровать. Мне удалось добавить функцию сортировки, но я не могу добавить функцию фильтра. Самый близкий пример, который я могу найти, который похож на то, что я хочу, - это TableFilterDemoProject с возможностью его запуска и исходным кодом по адресу http://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html

Я пытаюсь добавить возможность фильтровать мой код к этому коду

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.lang.*;
//////////////////
import javax.swing.RowFilter;
import javax.swing.event.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.Dimension;
import java.awt.Component;
//////////////////


public class CompFrame
{

JFrame myMainWindow = new JFrame("This is my title");

JPanel  firstPanel = new JPanel(); //a panel for first tab

//first panel components
JScrollPane myScrollTable;


public void runGUI()
{
    myMainWindow.setBounds(10, 10, 1296, 756); //set position, then dimensions
    myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    myMainWindow.setLayout(new GridLayout(1,1));


    createFirstPanel(); //call method to create each panel

    myMainWindow.getContentPane().add(firstPanel); //adds the tabbedpane to mainWindow

    myMainWindow.setVisible(true); //make the GUI appear
}

public void createFirstPanel()
{
    firstPanel.setLayout(null);



    String[] aHeaders = {"Athlete ID","Forename","Surname"}; 
    String[][] sampleData = new String[3][3]; //rows,cols   
    sampleData[0][0] = "JS98";   
    sampleData[0][1] = "John";   
    sampleData[0][2] = "Smith";
    sampleData[1][0] = "DB56";   
    sampleData[1][1] = "David";   
    sampleData[1][2] = "Bower";
    sampleData[2][0] = "LL86";   
    sampleData[2][1] = "Lex";   
    sampleData[2][2] = "Luthor";





    JTable myTable = new JTable(sampleData,aHeaders);

    myTable.setAutoCreateRowSorter(true); //Sorts by a-z or 0-9 in the columns when a header is clicked

    myScrollTable = new JScrollPane(myTable); 
    myScrollTable.setSize(1282,600); 
    myScrollTable.setLocation(0,120); 
    System.out.println("Creating compare table");

    firstPanel.add(myScrollTable);
}

public static void main(String[] args)
{
    CompFrame cf = new CompFrame();
    cf.runGUI();
}
}

Буду признателен за любую помощь. Спасибо

1 ответ

Это не идеально, но если у вас есть текстовое поле, к которому вы можете применить событие, вы можете использовать сортировщик таблиц. Это не самый чистый, но это должно работать

  public void searchTable(String input) {
         final TableRowSorter<TableModel> sorter = new TableRowSorter<>(yourTable.getModel());
         allEventsTable.setRowSorter(sorter);
         if (input.length() != 0) {
                sorter.setRowFilter(RowFilter.regexFilter("(?i)" + input));

         } else {
                sorter.setRowFilter(null);

         }

}
Другие вопросы по тегам