Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit JTable Filter

Empfohlene Antworten

Veröffentlicht

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

Keiner eine Idee :(

Lg

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.