2015-03-17 3 views
0

Je fais un projet informatique qui me demande de créer un JTable que l'on pourrait filtrer. J'ai réussi à ajouter une fonction de tri mais je suis incapable d'ajouter une fonction de filtrage. L'exemple le plus proche que je pourrais trouver, qui est similaire à ce que je veux, est le TableFilterDemoProject avec la possibilité de le lancer et le code source à http://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html#TableFilterDemoFiltrer un JTable

J'essaie d'ajouter la possibilité de filtrer mon code à cette pièce de code

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(); 
} 
} 

J'apprécierais n'importe quelle aide. Merci

+1

* « Je suis en train d'ajouter la possibilité de filtrer .. » * Où dans ce code que vous avez essayé d'établir un 'TableRowSorter'? SO n'est pas un site "s'il vous plaît terminer ma tâche". Quelle est votre question * spécifique *? –

+0

Ma tentative a été supprimée car elle a complètement foiré mon programme. Ma question spécifique est de savoir comment ajouter un filtre correctement et simplement? – Dan

+0

1) 'firstPanel.setLayout (null);' Les interfaces graphiques Java doivent fonctionner sur différents systèmes d'exploitation, taille d'écran, résolution d'écran, etc. Elles ne sont donc pas propices à une mise en page parfaite. Utilisez plutôt des gestionnaires de disposition, ou [des combinaisons de ceux-ci] (http://stackoverflow.com/a/5630271/418556) avec un remplissage de mise en page et des bordures pour [espace blanc] (http://stackoverflow.com/a/17874718/ 418556). 2) Copie possible de [Composant pour filtrer une liste] (http://stackoverflow.com/q/28621617/418556) (comme si le code source lié à l'OP n'était pas ...). –

Répondre

0

Ce n'est pas parfait, mais à condition d'avoir un champ de texte auquel vous pouvez appliquer un événement d'action, vous pouvez utiliser un trieur de table. Ce n'est pas le plus propre mais il devrait fonctionner

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); 

     } 

}