swt table扩展

扩展table类,在很多时候table都不止局限于文本的显示,可能还有可输入文本框,按钮,等控件。

在这点利用tableeditor可以解决,但是也是由于tableeditor比较冗余的代码,所以我把它封装在一个控件里面,同时也解决了获取item内容的问题


YtTableItem.java

在自定义的item中,会自动添加tableEditor,

/**
	 * 添加受控控件,只接受实现IYtTableSubComp的control
	 * */
	public void addChild(IYtTableSubComp control) {
		childContentMap.put(index, control);
		final TableEditor editor = new TableEditor(item.getParent());
		editor.setEditor((Control)control, item, index);
		editor.grabHorizontal = true;
		index++;
	}

	/**
	 * 生成包装好的text
	 * */
	public static IYtTableSubComp getTextSub(Composite parent , int style , String txt){
		YtTableSubComp su = new YtTableSubComp(parent);
		Text text = new Text(su, style);
		text.setText(txt);
		return su;
	}
	/**
	 * 生成包装好的btn
	 * */
	public static IYtTableSubComp getBtnSub(Composite parent , int style , String text){
		YtTableSubComp su = new YtTableSubComp(parent);
		Button btn = new Button(su, style);
		btn.setText(text);
		return su;
	}
/**
	 * 获取item的所有内容,每个用|隔开
	 * */
	public String getText() {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < index; i++) {
			if (childContentMap.get(i) == null) {//如果是单一文字
				sb.append(item.getText(i) + "|");
			} else {//如果是控件
				IYtTableSubComp su = childContentMap.get(i);
				sb.append(su.getText() + "|");
			}
		}
		return sb.toString();
	}



YtTableSubComp.java中的实现
因为YtTableSubComp包装了多种子控件,所以用getText可以统一处理,不用再一个个的获取条目中特殊控件的值

/**
	 * 获取文本数据
	 * */
	public String getText(){
		Control con = getRealInst();
		if(con instanceof Button){
			Button btn = (Button)con;
			return btn.getSelection() + "";
		}else if(con instanceof Text){
			Text text = (Text)con;
			return text.getText() + "";
		}else if(con instanceof IYtTableSubComp){
			IYtTableSubComp su = (IYtTableSubComp)con;
			return su.getText();
		}
		return "";
	}



YtTableComp.java
包装了table的类,里面设置了换行换行要加\n,自动增高。

table.addListener(SWT.MeasureItem, paintListener);
		/**以下两个方法可以同时删除,但会印象到点击之后焦点的矩形*/
		table.addListener(SWT.PaintItem, paintListener);
		table.addListener(SWT.EraseItem, paintListener);


获取被选择的item的文本

/**
	 * 获取被选择的文本,每个item用SPLIST_SYM隔开
	 * */
	public String getSelectText(){
		selectText = new StringBuilder("");
		int[] t = getTable().getSelectionIndices();
		for(int i : t){
			selectText.append(itemList.get(i).getText()+SPLIST_SYM);
		}
		System.err.println(selectText);
		return selectText.toString();
	}



test.java

final YtTableComp tc = new YtTableComp(shell);
//设置表头文字
		tc.initColumn(new String[] { "测试啦", "出生时", "第三个", "第4个" });
		//设置宽度
		tc.setWidths(new int[] { 100, 150, 50, 100 });
		for (int i = 0; i < 3; i++) {
			/** 组装成一个item */
			final YtTableItem myItem = new YtTableItem(tc, 0);
			YtTableSubComp btn = (YtTableSubComp) YtTableItem.getBtnPushSub(tc.getTable());
			btn.setSize(30,20);
			btn.addListener(SWT.MouseUp, new Listener() {

				@Override
				public void handleEvent(Event event) {
					// TODO Auto-generated method stub
					System.err.println("我被点击了,执行事件");
				}
			});
			/** 将需要显示的特殊控件放入yttableItem去 */
			myItem.addChild(btn);
			myItem.addChild("啦啦啦啦" );
//myItem.addChild("啦啦啦啦\n"+i);//加\n就可以换行了
			myItem.addChild(YtTableItem.getTextSub(tc.getTable()));
			myItem.addChild(YtTableItem.getBtnSub(tc.getTable(), SWT.RADIO, "单选按钮"));

		}
		

		Button btn = new Button(shell, SWT.PUSH);
		btn.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				//只要调用tc.getSelectText()就可以拿到选中的item的文本
				System.err.println(tc.getSelectText());;
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO Auto-generated method stub

			}
		});

		btn.setText("点我输出东西");




 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值