Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    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 21:52 Go to next message
reza let is currently offline reza letFriend
Messages: 2
Registered: May 2012
Junior Member
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] Wed, 16 May 2012 03:29 Go to previous messageGo to next message
Catalin Gerea is currently offline Catalin GereaFriend
Messages: 89
Registered: July 2009
Location: Bucharest, Romania
Member

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


Time is what you make of it.
Re: filter the table with viewerfilter [message #872449 is a reply to message #872397] Wed, 16 May 2012 06:28 Go to previous message
reza let is currently offline reza letFriend
Messages: 2
Registered: May 2012
Junior Member
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: Tue Mar 19 03:41:40 GMT 2024

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

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

Back to the top