- 浏览: 1152472 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
Eclipse 3.1里deprecate了TableTree这个控件,与之对应的jface的TableTreeViewer虽然没有deprecate,但使用它会得到很多警告。在TableTreeViewer的第一列里是不能显示图标的,因为这个位置被+/-符号占用了,而且TableTree是显示不出 Tree的层次的,也就是没有缩进。
SWT 3.1里的Tree控件新支持了列的显示,是通过TreeColumn来实现的。在jface里则没有添加新的viewer,使用原先的TreeViewer即可支持,下面是一段例子代码,注意如果在windows里运行要修改一下setInput()这条语句的参数,例如改为setInput(new File("c:"""))。
import java.io.File; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TreeColumn; public class TreeColumnTest { public void run(){ final Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new FillLayout()); final TreeViewer viewer = new TreeViewer(shell, SWT.FULL_SELECTION); viewer.getTree().setHeaderVisible(true); TreeColumn column = new TreeColumn(viewer.getTree(), SWT.LEFT); column.setText("Name"); column.setWidth(200); column = new TreeColumn(viewer.getTree(), SWT.LEFT); column.setText("Size"); column.setWidth(100); column = new TreeColumn(viewer.getTree(), SWT.LEFT); column.setText("Hidden"); column.setWidth(100); viewer.setContentProvider(new MyTreeContenetProvider()); viewer.setLabelProvider(new MyTableLableProvider()); viewer.setInput(new File("/")); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } public static void main(String[] args) { new TreeColumnTest().run(); } class MyTreeContenetProvider implements ITreeContentProvider{ public Object[] getChildren(Object parentElement) { File file=(File)parentElement; if(file.isDirectory()) return file.listFiles(); else return null; } public Object getParent(Object element) { File file=(File)element; return file.getParentFile(); } public boolean hasChildren(Object element) { File file=(File)element; return file.isDirectory()/*&&file.list().length>0*/; } public Object[] getElements(Object inputElement) { File file=(File)inputElement; return file.isDirectory()?file.listFiles():new Object[]{file}; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } class MyTableLableProvider implements ITableLabelProvider{ public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { File file=(File)element; switch (columnIndex) { case 0: return file.getName(); case 1: return ""+file.length(); case 2: return ""+file.isHidden(); default: return ""; } } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } } }这是运行画面:
向已有的TreeViewer和TableViewer上添加编辑功能,可以使用CellEditor和CellModifier。
CellEditor定义了某个列被编辑时显示的外观,它可以是文本框、下拉列表框或单选框,也可以自己定义。
通常使用的CellEditor的子类就是:CheckboxCellEditor、ComboBoxCellEditor和TextCellEditor。
CellEditor一般用数组来保存,如果某个列不需要编辑,则可将该列的CellEditor设为null。
当CellEditor的数组定义完后,即可利用setCellEditors(CellEditor[] editors)方法将该数组设置到对应的TreeViewer或TableViewer中去。例如:
CellEditor[] cellEditors = new CellEditor[ 5 ]; cellEditors[ 0 ] = new TextCellEditor(tableViewer.getTable()); cellEditors[ 1 ] = null ; cellEditors[ 2 ] = new ComboBoxCellEditor(tableViewer.getTable(), new String[]{ " first " , " second " , " third " , " forth " }); cellEditors[ 3 ] = new CheckboxCellEditor(tableViewer.getTable()); cellEditors[ 4 ] = new CustomizedTextCellEditor(tableViewer.getTable()); tableViewer.setCellEditors(cellEditors);
其中CustomizedTextCellEditor是自定义的CellEditor,避免了设置value时造成的空指针异常。
protected class CustomizedTextCellEditor extends TextCellEditor{ public CustomizedTextCellEditor(Composite parent){ super(parent); } protected void doSetValue(Object value) { if(value == null) return; super.doSetValue(value); } }CellEditor负责外观,它对要编辑的模型信息一无所知。所以jface中引入了ICellModifier接口,将model与CellEditor联系在一起。为了确定在CellModifier中的列,需要定义columnProperties的String[]数组,用以区分不同列对应的不同属性。使用setColumnProperties(String[] columnProperties)设置该属性集。
ICellModifier定义了三个接口方法:
public boolean canModify(Object element, String property);
该方法判断何时该列可以被编辑。其中element是对应的model。返回true表示此时该列可以被编辑。
public Object getValue(Object element, String property);
该方法一般在activateCellEditor()时调用,用于设定CellEditor的初始值。其中element是对应的model。
此处虽然可以返回Object类型的引用,但是使用时需小心,特定的CellEditor仅接受特定类型的Value。比如:
TextCellEditor对应String类型的Value;
ComboBoxCellEditor对应Integer类型的Value;
CheckBoxCellEditor对应Boolean类型的Value;
若返回了不适合的Value对象,则会抛出AssertionFailedException。
public void modify(Object element, String property, Object value);
该方法执行保存修改。一般在saveEditorValue之类的方法中调用。此处的element不再是model,而是Item类型的引用。取用对应的模型,需要使用((Item) element).getData()方法。一般此处的value值,也就是当前CellEditor的Value值,使用CellEditor.getValue()得到。另外,在执行完更改后,需要刷新对应的TableViewer或TreeViewer,使做出的更新可见。
org.eclipse.debug.internal.ui.elements.adapters.DefaultVariableCellModifier是ICellModifier的一个完整实现:
import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IVariable; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.DefaultLabelProvider; import org.eclipse.debug.internal.ui.VariableValueEditorManager; import org.eclipse.debug.ui.actions.IVariableValueEditor; import org.eclipse.jface.viewers.ICellModifier; /** * @since 3.2 * */ public class DefaultVariableCellModifier implements ICellModifier { /* (non-Javadoc) * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String) */ public boolean canModify(Object element, String property) { if (VariableColumnPresentation.COLUMN_VARIABLE_VALUE.equals(property)) { if (element instanceof IVariable) { return ((IVariable) element).supportsValueModification(); } } return false; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String) */ public Object getValue(Object element, String property) { if (VariableColumnPresentation.COLUMN_VARIABLE_VALUE.equals(property)) { if (element instanceof IVariable) { IVariable variable = (IVariable) element; try { return DefaultLabelProvider.escapeSpecialChars(variable.getValue().getValueString()); } catch (DebugException e) { DebugUIPlugin.log(e); } } } return null; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object) */ public void modify(Object element, String property, Object value) { Object oldValue = getValue(element, property); if (!value.equals(oldValue)) { if (VariableColumnPresentation.COLUMN_VARIABLE_VALUE.equals(property)) { if (element instanceof IVariable) { IVariable variable = (IVariable) element; IVariableValueEditor editor = VariableValueEditorManager.getDefault().getVariableValueEditor(variable.getModelIdentifier()); if (value instanceof String) { value = DefaultLabelProvider.encodeEsacpedChars((String)value); } if (editor != null) { if (editor.saveVariable(variable, (String) value, DebugUIPlugin.getShell())) { return; } } try { variable.setValue((String) value); } catch (DebugException e) { DebugUIPlugin.errorDialog(DebugUIPlugin.getShell(), Messages.VariableColumnPresentation_4, Messages.VariableColumnPresentation_5, e.getStatus()); } } } } } }
发表评论
-
Eclicpse3.1.1下配置SWT,打包发布SWT程序,转EXE一条龙过程记录
2012-04-01 09:29 15401.到www.eclipse.org上下载SWT. 我 ... -
SWT---资源---第一!
2012-03-31 10:16 904使用SWT做开发的朋友,一定要注意~资源是一个杀手!对于我们这 ... -
所支持拖拽功能的Swing-JTree代码
2012-03-31 10:01 1026备份原型 -
SWT对话框系列:让对话框支撑方向键选择
2012-02-09 08:04 1189在SWT 3.3中弹出的对话框比如确认对话框,可以通过Tab键 ... -
SWT对话框系列:倒计时关闭对话框
2012-02-09 08:03 1366是不是觉得Windows的倒计时关机对话框很酷? ... -
使用SWT处理图片的大小和分辨率
2012-02-09 08:04 1348以前研究过AWT的图像处理,知道AWT在图像处理方面的功力 ...
相关推荐
extjs 可编辑的表格树,每个单元格自定义编辑组件,可以自适应列宽,只有源码与例子,运行实例要修改路径,不然图片不能显示,注意etree.jsp的js引入路径 支持Ext2.x以上版本 如运行不了EmailTo : codeme9@gmail....
在Windows XP上,TableTree组件在展开或收缩节点时,列宽会保持不变,但在OS X中,当树节点被展开时,包含树的列会自动扩展,导致后续的列部分隐藏在Sash(分割条)下面。这个问题出现的原因可能与不同操作系统下...
在EXTJS中,动态树的实现主要依赖于`Ext.tree.Panel`类和`Ext.data.TreeStore`类。`TreeStore`负责管理树的数据源,而`TreePanel`则用于展示这些数据。以下是一个简单的EXTJS动态树实现的步骤: 1. **定义数据模型...
ExtJS的Tree组件是Sencha ExtJS框架中的一个重要部分,用于构建可交互的树形结构数据展示。在ExtJS中,TreePanel是用来显示和操作树形数据的主要组件,它可以用于组织层次化的信息,如文件系统、组织架构或者分类...
树面板与数据存储之间的交互通过节点接口(The Node Interface)实现。这个接口封装了模型实例,提供了额外的方法和属性来适应树控件的特殊状态。例如,你可以改变树的外观,通过设置`useArrows`为`true`来隐藏边线...
在发送请求前,你需要获取当前选中的节点信息,这可以通过遍历树结构并检查每个节点的`checked`属性来完成。 总的来说,"ext复选框的ColumnTree扩展包"为EXT的ColumnTree组件提供了增强的功能,使得在树形数据结构...
总结,TreeGrid是jQuery库中的一个强大工具,它通过树形结构展示表格数据,使得信息层次更清晰。理解并掌握JSON数据格式、配置选项以及基本的实现方法,是有效利用TreeGrid的关键。在实际项目中,可以根据需要对...
Tree组件是ExtJS中的一个核心组件,它能够以可交互的树形结构展示数据。每个节点都可以包含子节点,并且可以通过展开和折叠操作来控制显示的层次。Tree组件不仅支持静态数据,也支持动态加载数据,即按需加载节点。 ...
在实际应用中,你可以通过递归或者循环来动态加载大量数据,或者自定义TreeColumn来展示多列数据。SWT还提供了许多高级特性,如Tree的拖放操作、图像支持、检查框等等,可以根据需求进行深入学习和使用。
TreeGrid是ExtJS提供的一种复合组件,它结合了树形视图和数据网格的功能,允许用户同时展示层次结构数据和表格数据。在"Extjs4的TreeGrid例子"这个主题中,我们将深入探讨TreeGrid的各种特性,以及如何在实际项目中...
通过`TableColumn`和`TreeColumn`可以定义列的显示属性,而`TableItem`和`TreeItem`则用于添加和管理具体的数据项。 **3. 图形与图像** SWT的`GC`(Graphics Context)类允许开发者进行复杂的图形绘制,包括直线、...
7.5.11 树节点:ext.data.nodeinterface与ext.data.tree / 364 7.5.12 store的方法 / 366 7.5.13 store的事件 / 368 7.5.14 store管理器:ext.data.storemanager / 369 7.6 综合实例 / 369 7.6.1 远程读取json...
在Web应用开发中,特别是涉及到复杂数据展示的应用场景中,`Ext TreeGrid`是一种非常实用且灵活的数据展示组件,它结合了树形结构与表格的形式来呈现数据,非常适合展示具有层次关系的数据集合。本文主要探讨如何...
EXT是Sencha公司开发的一款强大的JavaScript前端框架,用于构建富客户端Web应用。它提供了一整套组件化的UI元素,使得开发者能够轻松...实际应用中,开发者可以根据需求灵活配置和扩展,以实现更复杂的树形视图功能。
JavaScript中的事件处理是Web开发中的核心概念,它允许开发者响应用户的交互。...这两种模型都是为了解决早期Netscape事件处理方式的问题,即无法绑定多个事件处理函数。 **W3C模型** W3C DOM层面的事件规范提出了`...
org.eclipse.swt.custom.TableTree.class org.eclipse.swt.custom.TableTreeEditor.class org.eclipse.swt.custom.TableTreeItem.class org.eclipse.swt.custom.TextChangeListener.class org.eclipse.swt.custom....
Including treeColumn, a default column that can be added and modified like any other column. Support for Unicode string (WideString) in cell, header, and footer Supports both Delphi (VCL) Visual ...