扩展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("点我输出东西");
相关推荐
SWTChart是SWT的一个扩展,它为开发者提供了创建高质量图表的能力,包括折线图、柱状图、饼图以及我们的重点——散点图。散点图是一种有效的数据可视化方式,尤其适合显示两个变量之间的关系。 3. **JDBC(Java ...
- `Table.java`:这是`Table`类的源代码文件,可能包含类的完整定义,包括注释和实现细节,有助于理解和扩展`Table`类的功能。 通过深入理解这些文件和标签所代表的特性,开发者可以有效地利用SWT的`Table`类来构建...
**SWT扩展:深入理解与应用** SWT(Standard Widget Toolkit)是Eclipse基金会开发的一个开源GUI库,它为Java应用程序提供了与操作系统本机UI组件的直接交互能力。SWT设计的目标是提供一个高效、可定制且功能丰富的...
- 开发者可能会扩展SWT.Table类,添加自定义的功能,如自定义的渲染器(CellRenderer)、编辑器(CellEditor)等。 - 可能会实现监听器,如SelectionListener、ModifyListener等,来处理用户交互事件。 - 数据...
SWTUtils是一个扩展了SWT功能的工具类库,其中包含了对分页功能的支持,简化了开发者实现分页逻辑的过程。 在描述中提到了"SWT Table技术",这表明这个工具可能与表格控件有关。SWT Table是SWT中用于显示表格数据的...
例如,`Button`类用于创建按钮,`Text`类用于创建文本输入框,而`Table`和`Tree`类则分别用于创建数据列表和层次结构视图。 SWT与Eclipse RCP(Rich Client Platform)紧密集成,Eclipse RCP是一个构建桌面应用的...
在SWT中,`Table`类用于创建表格,而`TableManager`通常是一个自定义的类,用于扩展和增强`Table`的基本功能,以便更好地满足开发者的需求。 1. **表头排序**: 表头排序允许用户通过点击列头来对表格数据进行升序...
1. **SWT组件**:SWT提供了一系列的基本组件,如按钮(Button)、文本框(Text)、列表(List)、表格(Table)、树形视图(Tree)等,开发者可以使用这些组件来构建复杂的用户界面。每个组件都有丰富的API供开发者...
### 可编辑的 SWT Table 实现详解 在 Eclipse SWT(Standard Widget Toolkit)中,`Table` 控件提供了显示数据列表的功能。然而,默认情况下,`Table` 是只读的,不允许用户进行编辑。为了使 `Table` 可编辑,SWT ...
9. **可扩展性**:SWT 是Eclipse RCP(Rich Client Platform)的基础,可以与其他Eclipse插件无缝集成,提供强大的可扩展性和灵活性。 **源码分析** SWT 的源码是用Java编写的,通过JNI(Java Native Interface)...
7. **Table and Tree Widgets**:SWT 提供了 Table 和 Tree 控件,允许用户显示和操作数据。在 JFace 中,TableViewer 和 TreeViewer 扩展了这些功能,添加了数据绑定和自定义列渲染等功能。 8. **Layout Managers*...
1. SWT控件:包括Button、Text、Table、Tree、Composite等基本和复杂的控件,以及如何使用它们构建用户界面。 2. JFace数据绑定:讲解如何使用IDataProvider和IStructuredModel来实现视图和数据之间的动态同步。 3. ...
- **充满式布局**:组件自动扩展以填满容器空间。 - **行列式布局**:按照行和列组织组件。 - **网格式布局**:使用网格单元格来定位组件。 - **表格式布局**:类似于HTML表格,用于表格布局。 #### 6. SWT事件监听...
1. **SWT组件**:SWT提供了各种基本的GUI组件,如按钮(Button)、文本框(Text)、列表(List)、树(Tree)、表格(Table)等。了解这些组件的用法是创建用户界面的基础。 2. **布局管理**:在SWT中,布局...
Swt JFace库扩展了Swt,提供了数据绑定功能,使得模型和视图之间的数据同步变得更加简单。 **9. 打印支持** Swt API也支持打印功能,`Printer`和`PrintDialog`类可以用来创建和配置打印任务。 **10. 定时器和计时...
- **Table**和`Tree`:用于展示数据列表和层次结构的数据,可以通过`TableViewer`和`TreeViewer`进行扩展,实现更丰富的功能。 **3. JFace与SWT的关系** `JFace`是基于SWT的高级抽象层,它简化了SWT的使用,提供了...
SWT提供了丰富的控件集,包括按钮(Button)、文本框(Text)、列表(List)、表格(Table)、树(Tree)、菜单(Menu)、对话框(Dialog)等。每个控件都有其特定的功能和用途,比如按钮用于执行操作,文本框用于...
- 自定义控件:学习如何创建自定义的SWT控件,扩展SWT的功能。 通过本教程的学习,你将掌握SWT的核心概念,能够使用SWT和JFace构建功能丰富的Java GUI应用程序。实践是检验真理的唯一标准,建议在学习过程中不断...
2. **扩展组件**:除了基本组件,SWT还提供了一些更复杂的组件,如树形视图(Tree),表格(Table),进度条(ProgressBar),滑块(Slider)等。这些组件增强了用户界面的交互性和信息展示能力。例如,`Tree`用于...