Skip to main content



      Home
Home » Eclipse Projects » JFace » filter the table with viewerfilter(everything works fine,only it isnt filtering )
icon8.gif  filter the table with viewerfilter [message #872309] Tue, 15 May 2012 17:52 Go to next message
Eclipse UserFriend
Hey Pro's,

I have a big problem that i cant resolve it. i try everything and dont know why the table isnt filter :/

may anyone heeeelp me please.

package de.haza_computer.mysql.swt.hazarepair;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import java.util.List;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import de.haza_computer.mysql.swt.hazarepair.daten.Kunde;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.jface.viewers.IStructuredContentProvider;

public class Kundenauswahl extends Dialog {

	protected Object result;
	protected Shell shell;
	private Table table;
	String kunde = new String();
	private Text txtSuchbegriff;
	private List<Kunde> kunden;
	ViewerFilter searchFilter;

	/**
	 * Create the dialog.
	 * 
	 * @param parent
	 * @param style
	 */
	public Kundenauswahl(final Shell parent, final int style) {
		super(parent, style);
		setText("SWT Dialog");
	}

	/**
	 * Open the dialog.
	 * 
	 * @return the result
	 */
	public Object open() {
		createContents();
		shell.open();
		shell.layout();
		final Display display = getParent().getDisplay();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		return result;
	}

	/**
	 * Create contents of the dialog.
	 */
	private void createContents() {
		shell = new Shell(getParent(), SWT.CLOSE);
		shell.setSize(625, 352);
		shell.setText(getText());
		final GridLayout gl_shell = new GridLayout(1, false);
		shell.setLayout(gl_shell);

		txtSuchbegriff = new Text(shell, SWT.BORDER);
		txtSuchbegriff.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(final FocusEvent arg0) {
				if (txtSuchbegriff.getText().equals("Suchbegriff")) {
					txtSuchbegriff.setText("");
				}
			}
		});
		txtSuchbegriff.setText("Suchbegriff");
		txtSuchbegriff.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
				false, 1, 1));

		final TableViewer tableViewer = new TableViewer(shell, SWT.BORDER
				| SWT.FULL_SELECTION | SWT.VIRTUAL);

		tableViewer.addFilter(searchFilter);
		


		//table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL);
		table = tableViewer.getTable();

		
		table.setLinesVisible(true);
		final GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true,
				true, 1, 1);
		gd_table.widthHint = 582;
		gd_table.heightHint = 257;
		table.setLayoutData(gd_table);
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDoubleClick(final MouseEvent arg0) {
				shell.close();
			}
		});
		table.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(final SelectionEvent arg0) {
				final TableItem item = table.getItem(table.getSelectionIndex());
				kunde = item.getText(2) + ", " + item.getText(3);
			}
		});
		table.setItemCount(1);
		table.setHeaderVisible(true);

		final TableColumn tableColumn = new TableColumn(table, SWT.NONE);
		tableColumn.setWidth(100);
		tableColumn.setText("ID");

		final TableColumn tableColumn_1 = new TableColumn(table, SWT.NONE);
		tableColumn_1.setWidth(100);
		tableColumn_1.setText("Firma");

		final TableColumn tableColumn_2 = new TableColumn(table, SWT.NONE);
		tableColumn_2.setWidth(100);
		tableColumn_2.setText("Nachname");

		final TableColumn tableColumn_3 = new TableColumn(table, SWT.NONE);
		tableColumn_3.setWidth(100);
		tableColumn_3.setText("Vorname");

		final TableColumn tableColumn_4 = new TableColumn(table, SWT.NONE);
		tableColumn_4.setWidth(100);
		tableColumn_4.setText("Mobiltelefon");

		final TableColumn tableColumn_5 = new TableColumn(table, SWT.NONE);
		tableColumn_5.setWidth(100);
		tableColumn_5.setText("Telefon Privat");

		final TableColumn tableColumn_6 = new TableColumn(table, SWT.NONE);
		tableColumn_6.setWidth(100);
		tableColumn_6.setText("Telefon gesch\u00E4ftlich");

		final TableColumn tableColumn_7 = new TableColumn(table, SWT.NONE);
		tableColumn_7.setWidth(100);
		tableColumn_7.setText("Strasse");

		searchFilter = new ViewerFilter() {
			@Override
			public boolean select(Viewer arg0, Object element,
					Object arg02) {
				System.out.println("filter2");

				String suchbegriff = txtSuchbegriff.getText();
				if (suchbegriff.equals("")) {
					return true;
				}

				if (element instanceof Kunde) {
					Kunde kunde = (Kunde) element;

					return kunde.getNachname().contains(suchbegriff)
							|| kunde.getVorname().contains(suchbegriff)
							|| kunde.getFirma().contains(suchbegriff);
				}
				return false;
			}
		};
		
		

		tableViewer.setLabelProvider(new ITableLabelProvider() {

			@Override
			public void removeListener(final ILabelProviderListener arg0) {
			}

			@Override
			public boolean isLabelProperty(final Object arg0, final String arg1) {
				return false;
			}

			@Override
			public void dispose() {
			}

			@Override
			public void addListener(final ILabelProviderListener arg0) {
			}

			@Override
			public String getColumnText(final Object arg0, final int arg1) {
				if (arg0 instanceof Kunde) {
					final Kunde kunde = (Kunde) arg0;

					switch (arg1) {
					case 0:
						return String.valueOf(kunde.getId());
					case 1:
						return kunde.getFirma();
					case 2:
						return kunde.getVorname();
					case 3:
						return kunde.getNachname();
					case 4:
						return kunde.getMobiltelefon();
					case 5:
						return kunde.getTelefonPrivat();
					case 6:
						return kunde.getTelefonGeschaeftlich();
					case 7:
						return kunde.getStrasse();
					}
				}
				return null;
			}

			@Override
			public Image getColumnImage(final Object arg0, final int arg1) {
				return null;
			}
		});

				tableViewer.setContentProvider(new IStructuredContentProvider() {
				//tableViewer.setContentProvider(new ITreeContentProvider() {
			@Override
			public void inputChanged(final Viewer arg0, final Object arg1,
					final Object arg2) {
			}

			@Override
			public void dispose() {
			}

			@Override
			public Object[] getElements(final Object arg0) {
				if (arg0 instanceof List<?>) {
					final List<?> list = (List<?>) arg0;
					return list.toArray();
				}
				return null;
			}

		});

		txtSuchbegriff.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(final KeyEvent arg0) {
				
				//tableViewer.addFilter(searchFilter);
				tableViewer.refresh();
				
			}
		});

		tableViewer.setInput(kunden);
	}

	public void setInput(final java.util.List<Kunde> kunden) {
		this.kunden = kunden;
	}
}
Re: filter the table with viewerfilter [message #872397 is a reply to message #872309] Tue, 15 May 2012 23:29 Go to previous messageGo to next message
Eclipse UserFriend
Hello Reza

See http://www.vogella.com/articles/EclipseJFaceTableAdvanced/article.html#filtercontent. In your case the KeyListener is indeed refreshing the tableviewer, but it does not set the any criteria for the filter. Further more I would update the tableviewer on keyreleased, not on keypressed. And using directly the text field in the filter is not a good idea, because it creates a coupling between the tableviewer and the filter (consider the case that you want to reuse the code of the filter for multiple tables).
Re: filter the table with viewerfilter [message #872449 is a reply to message #872397] Wed, 16 May 2012 02:28 Go to previous message
Eclipse UserFriend
thank you very much, i will try.
Previous Topic:IAdapterFactory never called by Eclipse framework
Next Topic:Character overlays in text-editor
Goto Forum:
  


Current Time: Mon Jul 14 05:59:51 EDT 2025

Powered by FUDForum. Page generated in 0.03675 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top