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:
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;
}
}
}
});
}