Hilfe zu SWT Table, TableItem und TableEditor

tommy_

Grünschnabel
Hallo,

ich implementiere gerade ein kleines Applet, dass User und Rollen administriert.
Die GUI hat eine User (Username, 1 Col)-Tabelle und eine Rollen(RoleName, isUser, isManager, 3Col)-Tabelle .
Die Rollen-Tabelle hat in den Zeilen 2 und 3, isUser und isManager respektive Button, die Checkboxen darstellen.

Hier der Code, wie die Tabelle gefüllt wird:
Code:
	private void fillRoleTableWithRoles(){
		int counter = 0;
		Table roleTable = roleTableViewer.getTable();
		TableEditor[] editorsUser = new TableEditor[data.getRoles().size()];
		TableEditor[] editorsManager = new TableEditor[data.getRoles().size()];
		
		Iterator it = data.getRoles().iterator();
		while(it.hasNext()) {
			IRole role = (IRole) it.next();
			
			TableItem tmpRoleItem = new TableItem(roleTable, SWT.LEFT);
			final TableEditor userCBEditor = new TableEditor(roleTable);
			userCBEditor.setColumn(1);
			userCBEditor.setItem(tmpRoleItem);
			editorsUser[counter] = userCBEditor;
			final TableEditor managerCBEditor = new TableEditor(roleTable);
			managerCBEditor.setColumn(2);
			managerCBEditor.setItem(tmpRoleItem);
			editorsManager[counter] = managerCBEditor;
			final Button userCheckBox = new Button(roleTable, SWT.CHECK);
			userCheckBox.addSelectionListener(new SelectionListener(){
				public void widgetSelected(SelectionEvent e) {
					if(userCheckBox.getSelection()){
						System.out.println("Add selected User to role as a user");
					} else {
						System.out.println("Remove selected User to role as a user");
					}
				}
				
				public void widgetDefaultSelected(SelectionEvent e) {
				}

			});

			Button managerCheckBox = new Button(roleTable, SWT.CHECK);
			userCheckBox.pack();
			managerCheckBox.pack();
			userCBEditor.minimumWidth = userCheckBox.getSize().x;
			managerCBEditor.minimumWidth = userCheckBox.getSize().x;

			//Set up the row
			tmpRoleItem.setText(0, role.getName());
			userCBEditor.setEditor(userCheckBox, tmpRoleItem, 1);
			managerCBEditor.setEditor(managerCheckBox, tmpRoleItem, 2);
			
			counter++;
		}
		//Set the editors to the roleTableViewer for later use.
		roleTableViewer.setData("editorsUser", editorsUser);
		roleTableViewer.setData("editorsManager", editorsManager);
	}

Ich versuche, wenn man einen User auswählt, dass die entsprechenden Checkboxen in der Rollen-Tabelle geticked werden, so dass man sieht, in welcher Rolle der User user(isUser) und manager(isManager) ist.

Meine Frage:
Wie komme ich an die Checkboxen?
Ich bin echt am verzweifeln.

Hier der Code des Listeners(MouseListener auf die Rollen-Tabelle), wenn man einen User auswählt:
Code:
			public void mouseDown(MouseEvent e) {
				int indexInUserTable = userTableViewer.getTable().getSelectionIndex();
				if(indexInUserTable > -1) {
					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);
					
				}
			}

und

Code:
	private void setManagerCheckedInRoleTable(Collection managerRoles) {
		Table roleTable = roleTableViewer.getTable();
		TableItem[] items = roleTable.getItems();
		TableEditor[] editors = (TableEditor[]) roleTableViewer.getData("editorsManager");
		
		for(int i=0;i<items.length;i++) {
			TableItem currentItem = items[i];
			if( managerRoles.contains(currentItem.getText()) ){
				TableEditor editor = editors[i];
			}
		}
		
	}

Ich bin für jede Hilfe dankbar, weil ich, ehrlich gesagt, dass SWT Konzept nicht ganz verstehe. Es ist sehr undurchsichtlich.

Danke und Gruss,
Tom
 
Ich habe es jetzt selbst gelöst, indem ich die TableEditor Objekte in ArrayListen speichere und bei dem TableViewer registriere.
Dann hole ich sie mir, wann immer ich sie brauche und kann die checkboxen an und ausschalten.

Code:
	private void setManagerCheckedInRoleTable(Collection managerRoles) {
		Table roleTable = roleTableViewer.getTable();
		TableItem[] items = roleTable.getItems();
		TableEditor[] editors = (TableEditor[]) roleTableViewer.getData("editorsManager");

		clearCB(editors);
		
		for(int i=0;i<items.length;i++) {
			TableItem currentItem = items[i];
			if( managerRoles.contains(currentItem.getText()) ){
				TableEditor editor = editors[i];
				((Button)editor.getEditor()).setSelection(true);
			}
		}
	}

Ciao und Gruss,
Tom
 
Zurück