当 swt tree拥有多列时,如图:
每个treeitem都有自己的值,但是api 提供的方法无法获取每个treeitem 的值,可以通过先对tree addSelectionListener 获取 该行的所有列的值,与每一个column的width ,然后 addSelectionListener 获取 鼠标鼠标点击的位置。根据位置知道是哪一列的值。
但是TreeItem 是获不了 每一行 的所有列的值,其实debug 代码,是能看到存在一个数组String [] strings; 里面的,然而这个数组是没有getset 方法的 无法在自己的代码中获取,只能利用getText(i) 方法逐一获取。
tree 的代码如下:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
public class UsingTree {
private static String[] treeItemString;
private static TreeColumn[] treeItemColumn;
public static void main(String[] args) {
Display display = Display.getDefault();
Shell sShell = new Shell();
sShell.setLayout(new FillLayout());
sShell.setText("Using Tree");
sShell.setSize(new Point(300, 200));
Tree tree = new Tree(sShell, SWT.FULL_SELECTION);
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
TreeColumn treeColumn = new TreeColumn(tree, SWT.NONE);
treeColumn.setWidth(100);
treeColumn.setText("Column 1");
TreeColumn treeColumn1 = new TreeColumn(tree, SWT.NONE);
treeColumn1.setWidth(100);
treeColumn1.setText("Column 2");
TreeColumn treeColumn2 = new TreeColumn(tree, SWT.NONE);
treeColumn2.setWidth(100);
treeColumn2.setText("Column 3");
TreeItem root1 = new TreeItem(tree,SWT.NONE);
root1.setText(new String[]{"Root 1","Root 1 Content","row 1"});
TreeItem root2 = new TreeItem(tree,SWT.NONE);
root2.setText(new String[]{"Root 2","Root 2 Content","row 2"});
TreeItem child1 = new TreeItem(root1,SWT.NONE);
child1.setText(new String[]{"Child 1","Child 1 1","Child 1 2"});
TreeItem child2 = new TreeItem(root1,SWT.NONE);
child2.setText(new String[]{"Child 2","Child 2 1","Child 2 2"});
TreeItem child3 = new TreeItem(root2,SWT.NONE);
child3.setText(new String[]{"Child 3","Child 3 1","Child 3 2"});
tree.addSelectionListener( new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
TreeItem selectedObj = (TreeItem)e.item;
Tree myTree = (Tree) e.getSource();
TreeColumn[] myTreeColumn =myTree.getColumns();
treeItemColumn =myTree.getColumns();
treeItemString = new String[treeItemColumn.length];
for(int i=0;i<myTreeColumn.length;i++){
TreeColumn treeColumn = myTreeColumn[i];
treeItemString[i]=selectedObj.getText(i);
// System.out.print(treeColumn.getWidth()+",");
}
//System.out.println(selectedObj.toString());
}
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
});
tree.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e) {
//if (e.button == 3){
TreeItem selected = ((Tree)e.getSource()).getItem(new Point(e.x, e.y));
// if(selected != null)
// System.out.println(e.x);
int k =0,j=0;
if(treeItemColumn !=null){
for(;j<treeItemColumn.length;j++){
TreeColumn t =treeItemColumn[j];
k= k+t.getWidth();
if(k>e.x){
break;
}
}
}
System.out.println(treeItemString[j]);
//}
}
public void mouseDown(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseDoubleClick(MouseEvent e) {
// TODO Auto-generated method stub
}
});
sShell.open();
sShell.layout();
while (!sShell.isDisposed())
if (!display.readAndDispatch())
display.sleep();
}
}