IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

JTable(JXTable) - calculate le nombre de rows


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut JTable(JXTable) - calculate le nombre de rows
    Je n'arriva pas à afficher le nombre de rows après avoir applique le filter. Quelqu'un a une idée comment le faire?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    import java.awt.BorderLayout;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextField;
    import javax.swing.ListSelectionModel;
    import javax.swing.RowFilter;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.TableRowSorter;
     
    import org.jdesktop.swingx.JXTable;
     
    public class AirspaceTableDemo {
     
      private JXTable                            table;
      private AirspaceTableModel                 tableModel;
      private JLabel                             filterLabel;
      private JTextField                         filterTextField;
      private JLabel                             rowCountLabel;
      private TableRowSorter<AirspaceTableModel> sorter;
      private static String[]                    data    = { "This is the 1st String", "String 2", "Another String", "The Final String" };
     
      private static String[]                    columns = { "Name", "Length", "Upper-case" };
     
      public AirspaceTableDemo() {
      }
     
      /**
      * @param args
      */
      public static void main( String[] args ) {
        AirspaceTableDemo demo = new AirspaceTableDemo();
        demo.create();
      }
     
      public void create() {
        javax.swing.SwingUtilities.invokeLater( new Runnable() {
          public void run() {
            JFrame frame = new JFrame( "Traffic Demo" );
            JPanel pane = new JPanel( new BorderLayout() );
            JPanel filterPane = new JPanel();
            tableModel = new AirspaceTableModel( data, columns );
            table = new JXTable( tableModel );
            sorter = new TableRowSorter<AirspaceTableModel>( tableModel );
            table.setRowSorter( sorter );
     
            table.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
            table.setDefaultRenderer( String.class, new AirspaceTableRenderer() );
            tableModel.addTableModelListener( new TableModelListener() {
     
              @Override
              public void tableChanged( TableModelEvent e ) {
                updateRowCounter();
     
              }
            });
     
            pane.add( new JScrollPane( table ), BorderLayout.CENTER );
            frame.getContentPane().add( pane );
     
            filterLabel = new JLabel( "Filter:" );
            filterTextField = new JTextField( 20 );
            filterTextField.getDocument().addDocumentListener( new DocumentListener() {
              public void changedUpdate( DocumentEvent e ) {
                newFilter();            
              }
     
              public void insertUpdate( DocumentEvent e ) {
                newFilter();
              }
     
              public void removeUpdate( DocumentEvent e ) {
                newFilter();
              }
            } );
     
            rowCountLabel = new JLabel( "Found:  " + table.getRowCount() );
            filterPane.add( filterLabel );
            filterPane.add( filterTextField );
            filterPane.add( rowCountLabel );
            pane.add( filterPane, BorderLayout.SOUTH );
            frame.setSize( 600, 300 );
            frame.setLocationRelativeTo( null );
            frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     
            frame.setVisible( true );
          }
        } );
     
      }
     
      private void updateRowCounter(){
        rowCountLabel.setText("Found:  " + table.getRowSorter().getViewRowCount() );
      }
     
      private void newFilter() {
        RowFilter<Object, Object> rf = new RowFilter<Object, Object>() {
          public boolean include( Entry<? extends Object, ? extends Object> entry ) {
            //filtering values in the first column, to filter all the columns it should be entry.getValueCount() - 1;
            for ( int i = entry.getValueCount() - 3; i >= 0; i-- ) {
              if ( entry.getStringValue( i ).contains( filterTextField.getText().trim() ) ) {            
                updateRowCounter();
                return true;
              }
            }
     
            // entry is not shown
            updateRowCounter();
            return false;
          }
        };
     
        /*RowFilter<AirspaceTableModel, Object> rf = null;
        //If current expression doesn't parse, don't update.
        try {
          rf = RowFilter.regexFilter( filterTextField.getText(), 0 );
        }
        catch ( java.util.regex.PatternSyntaxException e ) {
          return;
        }*/
        sorter.setRowFilter( rf );
     
      }
    }
    Le modèle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    mport javax.swing.table.AbstractTableModel;
     
    public class AirspaceTableModel
        extends AbstractTableModel {
     
      public final static int ID       = 0;
      public final static int CAPACITY = 1;
      public final static int STATE    = 2;
     
      private String[]        data;
      private String[]        columns;
     
      public AirspaceTableModel( String[] data, String[] columns ) {
        this.data = data;
        this.columns = columns;
      }
     
      public int getColumnCount() {
        return columns.length;
      }
     
      @Override
      public String getColumnName( int column ) {
        return columns[column];
      }
     
      public int getRowCount() {
        return data.length;
      }
     
      public Object getValueAt( int rowIndex, int columnIndex ) {
        String theData = data[rowIndex];
        Object result = null;
        switch ( columnIndex ) {
          case 1:
            result = theData.length(); // auto-boxing.
            break;
          case 2:
            result = theData.toUpperCase();
            break;
          default:
            result = theData;
        }
     
        return result;
      }
     
    }
    Merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Que cherches tu à accomplir avec le nombre de lignes?

    Sinon tu as juste à appeler la méthode getRowCount de la JTable qui donne le nombre de lignes que la JTable contient (et non le nombre de lignes du modèle inital).

  3. #3
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut
    le client veux qu'il y ait une JLabel qui affiche chaque fois le nombre de records qui matchent.
    Si je remplace la méthode qui fait update de label par ce que tu propose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     private void updateRowCounter(){
        rowCountLabel.setText("Found:  " + table.getRowCount() );
      }
    j'ai un comportement un peu bizarre. Le label ne se rafraichie pas comme il faut. par exemple, si je tape '2' dans le textfield de filter, le nombre de records reste toujours à 4(le nombre initial des records dans la table), pourtant il n'y en a que un seul. Par contre quand je supprime '2', j'ai tous les records, mais le label affiche 1 (le résultat précédent).

  4. #4
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut
    J'ai trouvé la solution. Voici le code corrigé. Il fallait appeler qu'ne seule fois ma méthode update:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    import java.awt.BorderLayout;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextField;
    import javax.swing.ListSelectionModel;
    import javax.swing.RowFilter;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    import javax.swing.table.TableRowSorter;
     
    import org.jdesktop.swingx.JXTable;
     
    public class AirspaceTableDemo {
     
      private JXTable                            table;
      private AirspaceTableModel                 tableModel;
      private JLabel                             filterLabel;
      private JTextField                         filterTextField;
      private JLabel                             rowCountLabel;
      private TableRowSorter<AirspaceTableModel> sorter;
      private static String[]                    data    = { "This is the 1st String", "String 2", "Another String", "The Final String" };
     
      private static String[]                    columns = { "Name", "Length", "Upper-case" };
     
      public AirspaceTableDemo() {
      }
     
      /**
      * @param args
      */
      public static void main( String[] args ) {
        AirspaceTableDemo demo = new AirspaceTableDemo();
        demo.create();
      }
     
      public void create() {
        javax.swing.SwingUtilities.invokeLater( new Runnable() {
          public void run() {
            JFrame frame = new JFrame( "Traffic Demo" );
            JPanel pane = new JPanel( new BorderLayout() );
            JPanel filterPane = new JPanel();
            tableModel = new AirspaceTableModel( data, columns );
            table = new JXTable( tableModel );        
            sorter = new TableRowSorter<AirspaceTableModel>( tableModel );
            table.setRowSorter( sorter );
     
            table.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
            table.setDefaultRenderer( String.class, new AirspaceTableRenderer() );
     
            pane.add( new JScrollPane( table ), BorderLayout.CENTER );
            frame.getContentPane().add( pane );
     
            filterLabel = new JLabel( "Filter:" );
            filterTextField = new JTextField( 20 );
            filterTextField.getDocument().addDocumentListener( new DocumentListener() {
              public void changedUpdate( DocumentEvent e ) {
                newFilter();            
              }
     
              public void insertUpdate( DocumentEvent e ) {
                newFilter();
              }
     
              public void removeUpdate( DocumentEvent e ) {
                newFilter();
              }
            } );
     
            rowCountLabel = new JLabel( "Found:  " + table.getRowCount() );
            filterPane.add( filterLabel );
            filterPane.add( filterTextField );
            filterPane.add( rowCountLabel );
            pane.add( filterPane, BorderLayout.SOUTH );
            frame.setSize( 600, 300 );
            frame.setLocationRelativeTo( null );
            frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     
            frame.setVisible( true );
          }
        } );
     
      }
     
      private void updateRowCounter(){
        rowCountLabel.setText("Found:  " + table.getRowSorter().getViewRowCount() );    
      }
     
      private void newFilter() {
        RowFilter<Object, Object> rf = new RowFilter<Object, Object>() {
          public boolean include( Entry<? extends Object, ? extends Object> entry ) {
            //filtering values in the first column, to filter all the columns it should be entry.getValueCount() - 1;
            for ( int i = entry.getValueCount() - 3; i >= 0; i-- ) {
              if ( entry.getStringValue( i ).contains( filterTextField.getText().trim() ) ) {            
                return true;
              }
            }
     
            // entry is not shown        
            return false;
          }
        };
     
        /*RowFilter<AirspaceTableModel, Object> rf = null;
        //If current expression doesn't parse, don't update.
        try {
          rf = RowFilter.regexFilter( filterTextField.getText(), 0 );
        }
        catch ( java.util.regex.PatternSyntaxException e ) {
          return;
        }*/
        sorter.setRowFilter( rf );
        updateRowCounter();
     
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul soustraction nombre de 18chiffres
    Par peppena dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 05/08/2005, 13h46
  2. Calculer le nombre de ligne de code source
    Par yanis97 dans le forum Qualimétrie
    Réponses: 4
    Dernier message: 04/07/2005, 22h02
  3. [Debutant(e)]Calcul du nombre de ligne sous eclipse
    Par skywalker3 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 10/12/2004, 08h53
  4. calcule du nombre de jours entre 2 dates
    Par nazimb dans le forum ASP
    Réponses: 4
    Dernier message: 28/09/2004, 15h22
  5. Comparaison de base et calculs du nombre d'éléments dans Bas
    Par BXDSPORT dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2004, 08h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo