markok Geschrieben 14. Juli 2010 Geschrieben 14. Juli 2010 Hallo Community, ich hänge jetzt seit mittlerweile über einer Woche an einem Problem und hoffe, dass es hier irgendjemand lösen kann . Ich versuche vergeblich eine JTable zu filtern, was eigentlich total simpel scheint aber bei mir nicht funktioniert. Ich habe einen Documentlistener auf ein JTextfield was bei jeder Eingabe folgende Filtermethode auslöst: newFilter() { DefaultTableModel modGefiltert = new DefaultTableModel(); modGefiltert = dat.alleAnzeigen(); //dat.alleAnzeigen füllt das Model mit Daten aus meiner Datenbank TableRowSorter<DefaultTableModel> rowSorter = new TableRowSorter<DefaultTableModel>( modGefiltert ); jtableHauptTab.setRowSorter( rowSorter ); RowFilter<DefaultTableModel , Object> rf = null; //declare a row filter for your table model try { rf = RowFilter.regexFilter(jTextfieldSuchBegriff1.getText(),4); //initialize with a regular expression } catch (java.util.regex.PatternSyntaxException e) { return; } rowSorter.setRowFilter(rf); jtableHauptTab.setModel(modGefiltert); } Das Model wird einfach nicht gefiltert und ich weiß nicht warum?!Kann mir jemand helfen?Wäre endlos dankbar! Danke schon mal Liebe Grüße Zitieren
perdian Geschrieben 16. Juli 2010 Geschrieben 16. Juli 2010 Keiner eine IdeeNein. Sonst wären hier schon Antworten gepostet worden. Threadpushing bringt dich einer brauchbaren Antwort keinen Millimeter näher also lass das bitte. Zitieren
Al-Bundy Geschrieben 17. Juli 2010 Geschrieben 17. Juli 2010 hab um deine Methode mal etwas drumherum gebaut public class Testklasse extends JDialog { private JTable jtableHauptTab; private JTextField jTextfieldSuchBegriff1; public Testklasse() { jtableHauptTab = new JTable(); jTextfieldSuchBegriff1 = new JTextField(); jTextfieldSuchBegriff1.getDocument().addDocumentListener(new Listener()); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(jTextfieldSuchBegriff1, BorderLayout.NORTH); panel.add(jtableHauptTab, BorderLayout.CENTER); add(panel); setDefaultCloseOperation(DISPOSE_ON_CLOSE); fillTable(); pack(); } private void fillTable() { ((DefaultTableModel)jtableHauptTab.getModel()).setDataVector(getData(), getColumns()); } private Vector<Vector<String>> getData() { Vector<Vector<String>> vector = new Vector<Vector<String>>(); for (int i = 0;i < 5;i++) { Vector<String> v = new Vector<String>(); v.add("Test: " + i); v.add("haus: " +i); v.add("maus: " +i); v.add("telephone: " + i); v.add(i % 2 == 0 ? "Computer": "Pc"); v.add("internet" + i); vector.add(v); } return vector; } private Vector<String> getColumns() { Vector<String> columns = new Vector<String>(); columns.add("Test"); columns.add("haus"); columns.add("maus"); columns.add("telephone"); columns.add("computer"); columns.add("internet"); return columns; } private class Listener implements DocumentListener { void newFilter() { DefaultTableModel modGefiltert = new DefaultTableModel(); modGefiltert.setDataVector(getData(), getColumns()); // = dat.alleAnzeigen(); //dat.alleAnzeigen füllt das Model mit Daten aus meiner Datenbank TableRowSorter<DefaultTableModel> rowSorter = new TableRowSorter<DefaultTableModel>( modGefiltert ); jtableHauptTab.setRowSorter( rowSorter ); RowFilter<DefaultTableModel , Object> rf = null; //declare a row filter for your table model try { rf = RowFilter.regexFilter(jTextfieldSuchBegriff1.getText(),4); //initialize with a regular expression } catch (java.util.regex.PatternSyntaxException e) { return; } rowSorter.setRowFilter(rf); jtableHauptTab.setModel(modGefiltert); } @Override public void changedUpdate(DocumentEvent e) { newFilter(); } @Override public void insertUpdate(DocumentEvent e) { newFilter(); } @Override public void removeUpdate(DocumentEvent e) { newFilter(); } } public static void main(String[] args) { new Testklasse().setVisible(true); } } wenn ich dann im Textfeld 'Pc' eingeben, klappt das wunderbar. Was bei dir nicht ganz verstehe, warum du erst 'modGefiltert' eine neues Object zuordnest und es direkt dahinter schon wieder überschreibst ?! Vielleicht findest du ja deinen Fehler oder du musst noch mehr deines Quellcodes zeigen, vielleicht liegt ja auch da ein Fehler. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.