Virtual Table - Falsche Anzeige bei einer Tabelle

tommy_

Grünschnabel
Hallo,

ich habe auf in einer Shell zwei Virtual Tables nebeneinander angeordnet, T1 und T2.
Jede hat ihren eigenen Content Provider und Label Provider.
Wenn das Programm startet, dann ist T1 nicht mit Text gefüllt, während T2 richtig dargestellt wird. Wenn ich die Tabellen in Ihrer Reihenfolge der Instanziierung verwechsle, also nun wird erst T2 geladen und dann T1, dann ist T1 immer noch leer.

Ich bin schon durch den Code gegangen und es ist meines Erachtens kein Fehler drin, vielmehr, so denke ich, habe ich etwas vergessen. Vielleicht ein draw() ?

Wäre nett wenn mir jemand helfen könnte.

Ciao und Gruss,
tommy_
 
Damit man sich besser ein Bild davon machen kann, wäre ein Quellcode hilfreich
 
Mir ging es erstmal um das Grundsätzliche und ausserdem wollte ich nicht so viel Code posten, weil doch einiges zusammen käme, was von Bedeutung ist.

Jedenfalls habe ich beim debuggen festgestellt, dass der jface.viewers.AbstractTableViewer
folgendes aufruft
Code:
// If the control is virtual, we cannot use the cached cell object. See bug 188663.
					if (isVirtual) {
						cellToUpdate = new ViewerCell(cellToUpdate.getViewerRow(), cellToUpdate.getColumnIndex(), element);
					}

					columnViewer.refresh(cellToUpdate);

dann kommt jface.viewers.ViewerColumn
Code:
void refresh(ViewerCell cell) {
		getLabelProvider().update(cell);
	}

und danach mein UserLabelProvider
Code:
	public String getColumnText(Object element, int columnIndex) {
		String result = null;
		if(element instanceof IUser) {
			IUser user = (IUser) element;
			if(columnIndex == 0) {
				result = user.getName();
//			} else if(columnIndex == 1) {
//				result = user.getUserId();
			} else if(columnIndex == 2) {
				
			} else if(columnIndex == 3) {
				
			}
		}
		return result;
	}

Im LabelProvider ist es so, dass das element beim ersten Mal ein IUser ist, aber danach immer null!

Was habe ich beim Erzeugen der Tabelle womöglich vergesssen?
Hier die Tabelle
Code:
	private void createUserTable(){
		GridData userTabelGridData = new GridData();
		userTabelGridData.horizontalSpan = 4;
		userTabelGridData.verticalAlignment = GridData.BEGINNING;
		userTabelGridData.horizontalAlignment = GridData.BEGINNING;
		
		userTableV = new Table(top, SWT.BORDER | SWT.MULTI | SWT.VIRTUAL);
		userTableV.setData(Constants.TABLEID, Constants.USERTABLEID);
		userLabelProvider = new UserLabelProvider();
		userProvider = new UserProvider(data, userTableV);
		
		userTableV.setItemCount(userProvider.getCount());
		userTableV.setHeaderVisible(true);
		userTableV.setLinesVisible(true);
		userTableV.addListener(SWT.SetData, new UserTableVCallbackListener());		
		userTableV.addMouseListener(new MouseListener(){

			public void mouseDoubleClick(MouseEvent e) {
			}

			public void mouseDown(MouseEvent e) {
				int indexInUserTable = userTableViewer.getTable().getSelectionIndex();
				if(indexInUserTable > -1) {
					clearCB(roleTableViewer.getTable());
					clearCB(userTableViewer.getTable());
					
					TableItem selectedUser = userTableViewer.getTable().getItem(indexInUserTable);
					IUser user = (IUser) selectedUser.getData();
					Collection managerRoles = data.getManagerRolesForUser(user.getUserId());
					Collection memberRoles = data.getMemberRolesForUser(user.getUserId());

					setManagerCheckedInRoleTable(managerRoles);
					setMemberCheckedInRoleTable(memberRoles);
				}
			}

			public void mouseUp(MouseEvent e) {
			}
	
		});
		userTableV.setLayoutData(userTabelGridData);
		//set the amounts of columns
		userTableViewer = new TableViewer(userTableV);
		userTableViewer.setContentProvider(userProvider);
		userTableViewer.setLabelProvider(userLabelProvider);
		userTableViewer.setUseHashlookup(true);
		userTableViewer.setInput(userProvider.getUsers().iterator().next());
		TableColumn userTableColumn = new TableColumn(userTableViewer.getTable(), SWT.LEFT);
		userTableColumn.setText("User");
		userTableColumn.setWidth(150);
		TableColumn userIDTableColumn = new TableColumn(userTableViewer.getTable(), SWT.LEFT);
		userIDTableColumn.setText("UserID");
		userIDTableColumn.setWidth(100);
		TableColumn userTableColumnisUser = new TableColumn(userTableViewer.getTable(), SWT.LEFT);
		userTableColumnisUser.setText("Member");
		userTableColumnisUser.setWidth(100);
		TableColumn userTableColumnisManager = new TableColumn(userTableViewer.getTable(), SWT.LEFT);
		userTableColumnisManager.setText("Manager");
		userTableColumnisManager.setWidth(100);

Besten Dank und Gruss,
tommy_
 
Zurück