Decorated TableViewer mit falschen Werten

Julian R.

Mitglied
Hallo Zusammen 🙂


Mein Problem ist folgendes:

Ich habe einen TableViewer und will einzelne Zeilen mit verschiedenen farbigen Backgrounds darstellen.
Das klappt soweit auch wunderbar mit einem DecoratingLabelProvider.

Nur leider schreibt mir der LabelProvider, welchen ich als Argument dem DecoratingLabelProvider übergebe, nicht die Werte der Attribute in die Zeilen, sondern nur den Objekt-Namen (ich denke ihr wisst was ich meine ^^).

Hier die entsprechenden Abschnitte im Sourcecode:

Java:
tableViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
		gridDataTableViewerTable.grabExcessVerticalSpace = true;
		gridDataTableViewerTable.horizontalSpan = 4;
		tableViewer.getTable().setLayoutData(gridDataTableViewerTable);
		createColumns(tableViewer);
		
		tableViewer.setContentProvider(new ArrayContentProvider());
		DecoratingLabelProvider decorator = new DecoratingLabelProvider(new LabelProviderTable(), new LabelDecorator());
		tableViewer.setLabelProvider(decorator);
//		tableViewer.setLabelProvider(new LabelProviderTable());
		GlobalInformation.getInstance().setTableViewer(tableViewer);
		tableViewer.setInput(GlobalInformation.getInstance().getListOfPatienten());

Java:
public class LabelProviderTable extends LabelProvider implements ITableLabelProvider {

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
	 */
	@Override
	public Image getColumnImage(Object element, int columnIndex) {
		// TODO Auto-generated method stub
		return null;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
	 */
	@Override
	public String getColumnText(Object element, int columnIndex) {
		Patient patient = (Patient) element;
		
		switch (columnIndex) {
			case 0:
				return String.valueOf(patient.getId());
			case 1: 
				return patient.getUhrzeit().toString() + "   " +  patient.getDatum().toString();
			case 2: 
				return patient.getAusgangsZeit();
			case 3:
				return patient.getNachname() + " " + patient.getVorname(); 
			case 4:
				return patient.getGeburtsdatum().toString(); 
			case 5: 
				return patient.getWohnort().toString(); 
			case 6:
				return patient.getBemerkung().toString();
			case 7:
				return patient.getBehandelnd().toString();
			default:
				throw new RuntimeException("You got to extend the switch-commands in the LabelProvider!");
		}
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
	 */
	@Override
	public void addListener(ILabelProviderListener listener) {
		// TODO Auto-generated method stub

	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
	 */
	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
	 */
	@Override
	public boolean isLabelProperty(Object element, String property) {
		// TODO Auto-generated method stub
		return false;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
	 */
	@Override
	public void removeListener(ILabelProviderListener listener) {
		// TODO Auto-generated method stub

	}

}

Java:
public class LabelDecorator implements ILabelDecorator, IColorDecorator {
	
	private Color orange = new Color(null, 250, 120, 0);
	private Color darkBlue = new Color(null, 0, 0, 250);
	private Color cyan = new Color(null, 0, 175, 175);
	private Color purple = new Color(null, 152, 18, 103);
	private Color gray = new Color (null, 242, 242, 242);
	
	private Color white = new Color (null, 250, 250, 250);
	private Color green = new Color(null, 0, 100, 0);
	private Color yellow = new Color(null, 250, 250, 0);
	private Color red = new Color(null, 255, 50, 50);
	private Color black = new Color(null, 0, 0, 0);
	
	private int actualColumnIndex = 0;

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt.graphics.Image, java.lang.Object)
	 */
	@Override
	public Image decorateImage(Image image, Object element) {
		return null;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String, java.lang.Object)
	 */
	@Override
	public String decorateText(String text, Object element) {
		return null;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
	 */
	@Override
	public void addListener(ILabelProviderListener listener) {
		//nothing
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
	 */
	@Override
	public void dispose() {
		//nothing
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
	 */
	@Override
	public boolean isLabelProperty(Object element, String property) {
		// TODO Auto-generated method stub
		return false;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
	 */
	@Override
	public void removeListener(ILabelProviderListener listener) {
		//nothing
	}

	@Override
	public Color decorateBackground(Object element) {
		
		Patient patient = (Patient) element;
		
		if (patient.isBoolCriteriaStateWhite()){
			return white;
		}
		else if (patient.isBoolCriteriaStateGreen()){
			return green;
		}
		else if (patient.isBoolCriteriaStateYellow()){
			return yellow;
		}
		else if (patient.isBoolCriteriaStateRed()){
			return red;
		}
		else if (patient.isBoolCriteriaStateBlack()){
			return black;
		}
		
		return null;
	}

	@Override
	public Color decorateForeground(Object element) {

		Patient patient = (Patient) element;
		
		if (patient.isBoolCriteriaStateGreen()){
			return white;
		}
		else if (patient.isBoolCriteriaStateBlack()){
			return white;
		}
		
		return black;
	}

}


Ich hoffe ihr könnt mir weiterhelfen! ;-)


MfG,

Julian
 
... hat sich erledigt!

Komischer weise muss man so wie ichs gemacht hab die toString-Methode in dem der Tabelle zugeordneten Objekt überschreiben, und so realisieren, dass der Inhalt der Attribute in die Zellen eingetragen wird.

Stellt sich nur die Frage, warum der DecoratingLabelProvider dann nen LabelProvider als Argument will ^^
 
Komischer weise muss man so wie ichs gemacht hab die toString-Methode in dem der Tabelle zugeordneten Objekt überschreiben, und so realisieren, dass der Inhalt der Attribute in die Zellen eingetragen wird.
Nein, muss man nicht.

Stellt sich nur die Frage, warum der DecoratingLabelProvider dann nen LabelProvider als Argument will ^^
Weil der DecoratingLabelProvider sich über einen normalen LabelProvider legt und dessen Rückgabewerte anreichert (dekoriert, eben).
 

Neue Themen


Zurück
Oben