swt Tree 多列 multiple columns(Treetable) 获取每个treeitem值

来源:互联网 发布:python绝技isbn 编辑:程序博客网 时间:2024/05/11 00:19

 当 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();}}



0 0
原创粉丝点击