Le meilleur plus simple serait de supprimer l'élément correspondant de le modèle.
Mais si j'ai besoin de lui montrer à nouveau plus tard? Ensuite, vous ajoutez de nouveau 🙂 Enfin j'ai fait de cette façon... Deux jeux de données... l'Une est pleine, l'autre se remplit lorsque fireDataTableChanged appelé... Mais j'ai peur que c'est lent... La suppression d'une ligne de vue ne devrait pas affecter le modèle. Et @willcodejavaforfood, comment supposez-vous d'ajouter ces données à nouveau pour le modèle? Il est censé vous êtes en interaction avec le point de vue de masquer une ligne. Vous ne devez pas savoir quelque chose au sujet de ses données ou son contenu... la suppression des données à partir du modèle devrait être trivial qui sera supprimé à partir de son point de vue. Il est trivial...
Il est le RowFilter<DefaultTableModel, Object> classe que vous pouvez utiliser pour filtrer les lignes. Le DefaultTableModel peut être remplacé par votre propre modèle. Filtrer, mettre en œuvre la méthode
@Overridepublicboolean include(Entry entry){//All rows are included if no filter is setif(filterText.isEmpty())returntrue;//If any of the column values contains the filter text,//the row can be shownfor(int i =0; i < entry.getValueCount(); i++){String value = entry.getStringValue(i);if(value.toLowerCase().indexOf(filterText)!=-1)returntrue;}returnfalse;}
Lors de l'accès aux lignes, par exemple l'écoute de ListSelectionEvents, ne pas oublier de traduire la ligne visible de l'index de la rangée complète de l'index de votre modèle. Java fournit une fonction pour cela ainsi:
publicvoid valueChanged(ListSelectionEvent e){ListSelectionModel lsm =(ListSelectionModel) e.getSource();int visibleRowIndex =...//Get the index of the selected row//Convert from the selection index based on the visible items to the//internal index for all elements.int internalRowIndex = tableTexts
.convertRowIndexToModel(visibleRowIndex);...}
TY. Mais je cherchais une solution pour Java 1.5... Ce doit être la accepté de répondre à
Je me trompe ou le filtrage est activé uniquement dans la version 1.6 de Java? Oui j'ai peur que oui. JXTable de swinglabs si vous voulez essayer de filtrage dans <1.6. Vous pouvez également faire votre propre TableModel qui orne un autre TableModel avec des fonctions de tri.
Vous pourriez mettre en place un arraylists pour chaque colonne qui sont peuplées par les valeurs filtrées et de mettre en œuvre ces personnalisé dans un moteur de rendu. Si une des cellules de la ligne entière de valeurs ne sont pas respectées, le moteur de rendu de manière récursive s'appelle elle-même avec de ligne+1.
si les cellules de la ligne ne satisfont à des critères, il est rendu, une autre liste de tableaux stocke les numéros de ligne déjà rendus, de son mieux expliqué par l'exemple de cette méthode est rendu à la clientèle s'étend JLabel
publicComponent getTableCellRendererComponent(JTable table,Object color,boolean isSelected,boolean hasFocus,int row,int column){Object value;String s;try{if(row ==0){
drawn[column].clear();}//drawn is arraylist which stores cols rendif(row > table.getModel().getDataVector.size()){returnnull;}//if we go too farif(drawn[column].contains(Integer.toString(row))==true){//already rendered?return getTableCellRendererComponent(table, color, isSelected,
hasFocus,(row +1), column);}//render row+1for(int i =0; i < filters.length; i++){
value = table.getModel().getValueAt(row, i);
s =(i ==1)? df.format(value): value.toString();if(filters[i].contains(s)!=true){//try and put in next row, if succeeds when it reaches column 8 it adds row toreturn getTableCellRendererComponent(table, color,
isSelected, hasFocus,(row +1), column);}}
value = table.getModel().getValueAt(row, column);
setFont(getFont().deriveFont(Font.BOLD));if((isSelected ==false)){if((column ==1)){
setForeground(Color.magenta);}//just formattingelse{
setForeground(Color.black);
setBackground(Color.white);}}else{
setBackground(Color.blue);
setForeground(Color.white);}if((column ==1))//col 1 is a date, other columns strings{
setText((value ==null)?"": df.format(value));}else{
setText((value ==null)?"": value.toString());}
todayStr = df.format(new java.util.Date());
dateval = table.getModel().getValueAt(row,1);String datevalStr = df.format(dateval);if(datevalStr.equals(todayStr)){
setForeground(Color.red);}
drawn[column].add(Integer.toString(row));//mark row as rendered}catch(Exception e){
e.getMessage();returnnull;}returnthis;}
Le
meilleurplus simple serait de supprimer l'élément correspondant de le modèle.Ensuite, vous ajoutez de nouveau 🙂
Enfin j'ai fait de cette façon... Deux jeux de données... l'Une est pleine, l'autre se remplit lorsque fireDataTableChanged appelé... Mais j'ai peur que c'est lent...
La suppression d'une ligne de vue ne devrait pas affecter le modèle. Et @willcodejavaforfood, comment supposez-vous d'ajouter ces données à nouveau pour le modèle? Il est censé vous êtes en interaction avec le point de vue de masquer une ligne. Vous ne devez pas savoir quelque chose au sujet de ses données ou son contenu... la suppression des données à partir du modèle devrait être trivial qui sera supprimé à partir de son point de vue.
Il est trivial...
OriginalL'auteur Michael Borgwardt
Il est le
RowFilter<DefaultTableModel, Object>
classe que vous pouvez utiliser pour filtrer les lignes. Le DefaultTableModel peut être remplacé par votre propre modèle. Filtrer, mettre en œuvre la méthodeLors de l'accès aux lignes, par exemple l'écoute de ListSelectionEvents, ne pas oublier de traduire la ligne visible de l'index de la rangée complète de l'index de votre modèle. Java fournit une fonction pour cela ainsi:
Ce doit être la accepté de répondre à
OriginalL'auteur
Découvrez Du soleil Tutoriel pour JTables et de regarder le Tri et le Filtrage de l'article.
Oui j'ai peur que oui.
JXTable de swinglabs si vous voulez essayer de filtrage dans <1.6. Vous pouvez également faire votre propre TableModel qui orne un autre TableModel avec des fonctions de tri.
OriginalL'auteur willcodejavaforfood
Vous pourriez mettre en place un arraylists pour chaque colonne qui sont peuplées par les valeurs filtrées et de mettre en œuvre ces personnalisé dans un moteur de rendu. Si une des cellules de la ligne entière de valeurs ne sont pas respectées, le moteur de rendu de manière récursive s'appelle elle-même avec de ligne+1.
si les cellules de la ligne ne satisfont à des critères, il est rendu, une autre liste de tableaux stocke les numéros de ligne déjà rendus, de son mieux expliqué par l'exemple de cette méthode est rendu à la clientèle s'étend JLabel
OriginalL'auteur Mike