Dies ist eine alte Version des Dokuments!


TreeViewer mit Tabelle

Der TreeViewer kann auch mit mehreren Spalten (Columns) verwendet werden:

package com.sowas.treetabledemo;
 
import java.util.ArrayList;
import java.util.List;
 
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
 
public class View extends ViewPart{
   public static final String	ID	= "TreeTableDemo.view";
   private TreeViewer			m_treeViewer;
 
   class ViewLabelProvider extends LabelProvider implements ILabelProvider{
      public String getColumnText(Object obj, int index){
         return getText(obj);
      }
 
      public Image getColumnImage(Object obj, int index){
         return getImage(obj);
      }
 
      public Image getImage(Object obj){
         return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
         }
   }
 
   public void createPartControl(Composite parent){
      Tree addressTree = new Tree(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		addressTree.setHeaderVisible(true);
      m_treeViewer = new TreeViewer(addressTree);
 
      TreeColumn column1 = new TreeColumn(addressTree, SWT.LEFT);
      addressTree.setLinesVisible(true);
      column1.setAlignment(SWT.LEFT);
      column1.setText("Land/Stadt");
      column1.setWidth(160);
      TreeColumn column2 = new TreeColumn(addressTree, SWT.RIGHT);
      column2.setAlignment(SWT.LEFT);
      column2.setText("Person");
      column2.setWidth(100);
      TreeColumn column3 = new TreeColumn(addressTree, SWT.RIGHT);
      column3.setAlignment(SWT.LEFT);
      column3.setText("m/w");
      column3.setWidth(35);
 
      m_treeViewer.setContentProvider(new AddressContentProvider());
      m_treeViewer.setLabelProvider(new TableLabelProvider());
      List<City> cities = new ArrayList<City>();
      cities.add(new City());
      m_treeViewer.setInput(cities);
      m_treeViewer.expandAll();
   }
 
   public void setFocus(){
      m_treeViewer.getControl().setFocus();
   }
 
   class City{
      Street[]	streets	= new Street[2];
 
      public City(){
         for (int i = 0; i < streets.length; i++)
            streets[i] = new Street(this, i);
      }
 
      public Street[] getStreets(){
         return streets;
      }
 
      public String toString(){
         return "Küchenhausen";
      }
   }
 
   class Street{
      City	city;
      House[]	houses	= new House[2];
      int		indx;
 
      public Street(City city, int index){
         this.city = city;
         indx = index + 1;
         for (int i = 0; i < houses.length; i++)
            houses[i] = new House(this, i);
      }
 
      public House[] getHouses(){
         return houses;
      }
 
      public String toString(){
         return "Topfdeckelstraße " + indx;
      }
   }
 
 
   class House{
      Street	street;
      int	indx;
 
      public House(Street street, int i){
         this.street = street;
         indx = i + 1;
      }
 
      public String toString(){
         return "Haus " + indx;
      }
 
      public String getPerson(){
         if (street.toString().equals("Topfdeckelstraße 1")){
            if (indx == 1)
               return "Hugo Hüpfer";
            return "Sabine Springer";
         }
         if (indx == 1)
            return "Leo Löffel";
         return "Marta Messer";
      }
 
      public String getSex(){
         if (indx == 1)
            return "m";
         return "w";
      }
   }
 
 
	class AddressContentProvider implements ITreeContentProvider{
		public Object[] getChildren(Object parentElement){
			if (parentElement instanceof List)
				return ((List<?>) parentElement).toArray();
			if (parentElement instanceof City)
				return ((City) parentElement).getStreets();
			if (parentElement instanceof Street)
				return ((Street) parentElement).getHouses();
			return new Object[0];
		}
 
		public Object getParent(Object element){
			if (element instanceof Street)
				return ((Street) element).city;
			if (element instanceof House)
				return ((House) element).street;
			return null;
		}
 
		public boolean hasChildren(Object element){
			if (element instanceof List)
				return ((List<?>) element).size() > 0;
			if (element instanceof City)
				return ((City) element).getStreets().length > 0;
			if (element instanceof Street)
				return ((Street) element).getHouses().length > 0;
			return false;
		}
 
		public Object[] getElements(Object kundenstaemme){
			return getChildren(kundenstaemme);
		}
 
		public void dispose(){
		}
 
		public void inputChanged(Viewer viewer, Object oldInput, Object newInput){
		}
	}
 
 
	class TableLabelProvider implements ITableLabelProvider{
 
		public Image getColumnImage(Object element, int columnIndex){
			return null;
		}
 
		public String getColumnText(Object element, int columnIndex){
			switch (columnIndex){
				case 0: return element.toString();
				case 1:
					if (element instanceof House)
						return ((House)element).getPerson();
				case 2: 
					if (element instanceof House)
						return ((House)element).getSex();
			}
			return null;
		}
 
		public void addListener(ILabelProviderListener listener){
		}
 
		public void dispose(){
		}
 
		public boolean isLabelProperty(Object element, String property){
			return false;
		}
 
		public void removeListener(ILabelProviderListener listener){
		}
 
	}

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007