[SWT] Vereinfachung TreeTableEditor und SelectedColoumnIndex

Christian Fein

Erfahrenes Mitglied
Ich stand vor dem Problem das mir TreeTable bei einem SelectionEvent das Betreffende
TreeItem zurückgibt. Das beduetet ich bekomme nur eine Zeilennummer des Selectierten Elements, nicht jedoch die Coloumnnr.
Jetzt habe ich das aber anders geregelt und gehe über die MouseZeigerPosition im Verhältnis zu jeder einzelnen Spalte der Zeile. Dies funktioniert zwar sehr gut, ist aber vielleicht nicht das perfomanteste, auf jedenfall nicht das angenehmste.
Wenn jemand eine Vereinfachung hat bitte ich darum.

Der betreffende Code mit der bisherigen Lösung:

Code:
	private void onSelection() {
		table.addMouseListener(new MouseAdapter() {
			/* (non-Javadoc)
			 * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)
			 */
			public void mouseDown(MouseEvent event) {
				Rectangle clientArea = table.getClientArea ();
				Point pt = new Point (event.x, event.y);
				int index = table.getTopIndex ();
				while (index < table.getItemCount ()) {
 					boolean visible = false;
					TableItem item = table.getItem (index);
					for (int i=0; i  < table.getColumnCount(); i++) {
						Rectangle rect = item.getBounds (i);
						if (rect.contains (pt)) {
							selectedColoumn = i;
						}
						if (!visible && rect.intersects (clientArea)) {
										visible = true;
						}
					}
				if (!visible) return;
				index++;
				}
			}
		});
		tableTree.addSelectionListener(new SelectionAdapter() {
			/* (non-Javadoc)
			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
			 */
			public void widgetSelected(SelectionEvent sel) {
				Control oldEditor = editor.getEditor();
				if (oldEditor != null)
				 oldEditor.dispose();
				editor.horizontalAlignment = SWT.LEFT;
				editor.grabHorizontal = true;
				
				editor.minimumWidth = 40;
				TableTreeItem[] items = tableTree.getSelection();
				if(items.length==0) return;
				TableTreeItem item = items[0];
				if(controls == null || controls.size() == 0) return;
				Set keys = controls.keySet();
				System.out.println(editor.getColumn());
				Iterator itter = keys.iterator();
				while(itter.hasNext()) {
					Object o = itter.next();
					if(!(o instanceof Integer)) continue;
					int a = ((Integer)o).intValue();
					int type = ((Integer) controls.get(o)).intValue();
					switch(type) {
						case EMPLOYEE_LIST:
							Button btn = new Button(tableTree.getTable(),SWT.PUSH);
							editor.setEditor(btn,item,selectedColoumn);
							btn.setSize(40,40);
							btn.setFocus();
					    break;
					    
					    case FRAME:
					    	Canvas canvas = new Canvas(tableTree.getTable(),SWT.NONE);
						    editor.setEditor(canvas,item,selectedColoumn);							
							Object af = sel.getSource();							
							canvas.setFocus();
					    break;
					}
				}
			}
		});
	}
 
Original geschrieben von Thomas Darimont
Hallo!

Hab mich mal dran versucht, aber ich glaube ich bin jetzt zu müde ;-)

Vielleichts hilfts ja:
http://hp.vector.co.jp/authors/VA035113/swt_custom_widgets/swt_custom_widgets.html

http://www.eclipse.org/articles/Art...t/Writing Your Own Widget_files/AppendixA.htm
(Eigene TableTree und TableTreeItem Implementierung)

Gruß Tom
Danke,
die haben es aber so wie ich das sehe genauso geregelt. Vielleicht gibt es keinen anderen weg :-/
 

Neue Beiträge

Zurück