Zum Inhalt springen

Problem mit JTable Filter


markok

Empfohlene Beiträge

Hallo Community,

ich hänge jetzt seit mittlerweile über einer Woche an einem Problem und hoffe, dass es hier irgendjemand lösen kann :rolleyes: . 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...