Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
Keiner eine Idee
Nein. Sonst wären hier schon Antworten gepostet worden. Threadpushing bringt dich einer brauchbaren Antwort keinen Millimeter näher also lass das bitte.
Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...