Der beste einfachste Möglichkeit wäre, entfernen Sie das entsprechende element aus dem Modell.
Aber wenn ich brauchen, um ihm zu zeigen, wieder später? Dann fügen Sie es wieder 🙂 Schließlich habe ich diesen Weg... Zwei Datensätze... die Eine ist voll, der andere füllt, wenn fireDataTableChanged genannt... Aber ich fürchte, es ist langsam... Entfernen einer Zeile in einer Ansicht sollte sich nicht auf das Modell. Und @willcodejavaforfood, wie man wohl hinzufügen, dass die Daten wieder auf das Modell? Es soll Sie bei der Interaktion mit den anzeigen, um eine Zeile auszublenden. Sie müssen nicht wissen, etwas über Ihre Daten oder deren Inhalt... entfernen von Daten aus dem Modell sollte trivial sein, das entfernt wird, aus seiner Sicht. Es ist trivial...
Gibt es die RowFilter<DefaultTableModel, Object> Klasse, die Sie verwenden können, um herauszufiltern Zeilen. Das DefaultTableModel kann ersetzt werden durch Ihr eigenes Modell. Filtern, implementieren Sie die Methode
@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;}
Beim Zugriff auf Zeilen, zum Beispiel das hören ListSelectionEvents, vergessen Sie nicht zu übersetzen, die sichtbare Zeile, index um die komplette Zeile index in deinem Modell. Java bietet eine Funktion für diese als gut:
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. Aber ich war auf der Suche nach einer Lösung für die Java 1.5... Dies sollte die akzeptierte Antwort
Bin ich Irre oder Filterung aktiviert wurde, wird erst in Java 1.6? Ja, ich fürchte ja. JXTable von swinglabs wenn Sie versuchen, die Filter in <1.6. Sie können auch Ihre eigenen TableModel, schmückt ein weiteres TableModel mit Sortier-Funktionen.
Könnte man die Einrichtung eines arraylists für jede Spalte, die gefüllt sind durch Werte gefiltert und setzen diese in einem benutzerdefinierten renderer. Wenn eine der Zellen die gesamte Zeile Werte nicht erfüllt sind, der renderer ruft rekursiv sich selbst mit Zeile+1.
wenn die Zellen Zeile erfüllt die Kriterien, es wird gerendert, andere arraylist speichert die Zeilen-Nummern bereits erbracht, Ihre besten durch ein Beispiel erklären diese Methode wird bei Kunden-renderer extends 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;}
Der
besteeinfachste Möglichkeit wäre, entfernen Sie das entsprechende element aus dem Modell.Dann fügen Sie es wieder 🙂
Schließlich habe ich diesen Weg... Zwei Datensätze... die Eine ist voll, der andere füllt, wenn fireDataTableChanged genannt... Aber ich fürchte, es ist langsam...
Entfernen einer Zeile in einer Ansicht sollte sich nicht auf das Modell. Und @willcodejavaforfood, wie man wohl hinzufügen, dass die Daten wieder auf das Modell? Es soll Sie bei der Interaktion mit den anzeigen, um eine Zeile auszublenden. Sie müssen nicht wissen, etwas über Ihre Daten oder deren Inhalt... entfernen von Daten aus dem Modell sollte trivial sein, das entfernt wird, aus seiner Sicht.
Es ist trivial...
InformationsquelleAutor Michael Borgwardt
Gibt es die
RowFilter<DefaultTableModel, Object>
Klasse, die Sie verwenden können, um herauszufiltern Zeilen. Das DefaultTableModel kann ersetzt werden durch Ihr eigenes Modell. Filtern, implementieren Sie die MethodeBeim Zugriff auf Zeilen, zum Beispiel das hören ListSelectionEvents, vergessen Sie nicht zu übersetzen, die sichtbare Zeile, index um die komplette Zeile index in deinem Modell. Java bietet eine Funktion für diese als gut:
Dies sollte die akzeptierte Antwort
InformationsquelleAutor
Check-out Sun ' s Tutorial für JTables und Blick auf die Sortier-und Filter-Sektion.
Ja, ich fürchte ja.
JXTable von swinglabs wenn Sie versuchen, die Filter in <1.6. Sie können auch Ihre eigenen TableModel, schmückt ein weiteres TableModel mit Sortier-Funktionen.
InformationsquelleAutor willcodejavaforfood
Könnte man die Einrichtung eines arraylists für jede Spalte, die gefüllt sind durch Werte gefiltert und setzen diese in einem benutzerdefinierten renderer. Wenn eine der Zellen die gesamte Zeile Werte nicht erfüllt sind, der renderer ruft rekursiv sich selbst mit Zeile+1.
wenn die Zellen Zeile erfüllt die Kriterien, es wird gerendert, andere arraylist speichert die Zeilen-Nummern bereits erbracht, Ihre besten durch ein Beispiel erklären diese Methode wird bei Kunden-renderer extends JLabel
InformationsquelleAutor Mike