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

 当 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值