- 浏览: 1048808 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (538)
- 奇文共赏 (36)
- spring (13)
- hibernate (10)
- AOP/Aspectj (9)
- spring security (7)
- lucence (5)
- compass (3)
- jbmp (2)
- jboss rule(drools) (0)
- birt (1)
- jasper (1)
- cxf (3)
- flex (98)
- webgis (6)
- 设计模式 (1)
- 代码重构 (2)
- log4j (1)
- tomcat (9)
- 神品音乐 (1)
- 工作计划 (2)
- appfuse (1)
- svn (4)
- 寻章摘句 (3)
- eclipse (10)
- arcgis api for flex (1)
- 算法 (5)
- opengis-cs (1)
- bug心得 (13)
- 图标 (1)
- software&key (14)
- java (17)
- 搞笑视频 (13)
- sqlserver (9)
- postgresql (1)
- postgis (0)
- geoserver (5)
- 日子 (50)
- 水晶报表 (1)
- 绝对电影 (3)
- Alternativa3D (1)
- 酷站大全 (10)
- c++ (5)
- oracle (17)
- oracle spatial (25)
- flashbuilder4 (3)
- TweenLite (1)
- DailyBuild (6)
- 华山论贱 (5)
- 系统性能 (5)
- 经典古文 (6)
- SOA/SCA/OSGI (6)
- jira (2)
- Hadoop生态圈(hadoop/hbase/pig/hive/zookeeper) (37)
- 风水 (1)
- linux操作基础 (17)
- 经济 (4)
- 茶 (3)
- JUnit (1)
- C# dotNet (1)
- netbeans (1)
- Java2D (1)
- QT4 (1)
- google Test/Mock/AutoTest (3)
- maven (1)
- 3d/OSG (1)
- Eclipse RCP (3)
- CUDA (1)
- Access control (0)
- http://linux.chinaunix.net/techdoc/beginner/2008/01/29/977725.shtml (1)
- redis (1)
最新评论
-
dove19900520:
朋友,你确定你的标题跟文章内容对应???
tomcat控制浏览器不缓存 -
wussrc:
我只想说牛逼,就我接触过的那点云计算的东西,仔细想想还真是这么 ...
别样解释云计算,太TM天才跨界了 -
hw_imxy:
endpoint="/Hello/messagebr ...
flex+java代码分两个工程 -
gaohejie:
rsrsdgrfdh坎坎坷坷
Flex 与 Spring 集成 -
李涤尘:
谢谢。不过说得有点太罗嗦了。
Oracle数据库数据的导入及导出(转)
http://tieba.baidu.com/f?kz=168159793
一、前言
在《Eclipse从入门到精通》一书中,TableViewer的例子还是被相对简化了的,今天(2005年8月30日)在开发中正好涉及到这方面,于是将代码提取出来,帖在这里以供读者参考。
二、实例说明
实例的示例图如下:
例图说明:
(1)提供一个表格,表格有两列。第一列是一个文本框,可直接编辑。第二列是一个下拉框。
(2)实现“删除”按钮的功能,但“新增、修改”按钮功能未实现
(3)当点击“OK”按钮时,则界面上的数据情况打印出来。如下图。
其他说明:
(1) 本文的数据涉及到Log4j,读者需要了解一些Log4j的Level类的知识。Log4j的文档,网上一搜一大把,本文就省略不说了。
(2)因为要用到log4j,所以需要log4j的jar包加入到引用库中。(操作方法参考书的P261)
三、程序实现
第一步:构造数据模型。经过对界面的数据进行分析后,创建一个数据类,代码如下:
import java.util.ArrayList; import java.util.List; public class LogMonitorSet { private String name; private boolean selected; private int logLevel; private List loggers = new ArrayList(1); public List getLoggers() { return loggers; } public void setLoggers(List loggers) { this.loggers = loggers; } public void addLogger(String logger) { this.loggers.add(logger); } public void removeLogger(String logger) { this.loggers.remove(logger); } public int getLogLevel() { return logLevel; } public void setLogLevel(int logLevel) { this.logLevel = logLevel; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean getSelection() { return selected; } public void setSelection(boolean selected) { this.selected = selected; } }说明:
(1)name相对于表格中的“集合名称”
(2)selected相对于表格中的Check框
(3)logLevel相对于表格中的“日志级别”
(4)loggers这个属性是为以后用的,本文读者不必管它。
第二步:实例主界面程序
import java.util.ArrayList; import java.util.List; import org.apache.log4j.Level; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; /** * @author ChenGang */ public class LogMonitorDialog extends Dialog { private TableViewer tv; private CheckboxTableViewer ctv; private String[] levelStrArray = LogHelper.getLevelShowStrings(); public LogMonitorDialog(Shell parentShell) { super(parentShell); } protected Control createDialogArea(Composite parent) { Composite topComp = new Composite(parent, SWT.NONE); topComp.setLayoutData(new GridData(GridData.FILL_BOTH)); //加此一句张开面板 topComp.setLayout(new GridLayout()); { tv = new TableViewer(topComp, SWT.CHECK | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION); tv.setUseHashlookup(true); ctv = new CheckboxTableViewer(tv.getTable()); Table table = tv.getTable(); table.setHeaderVisible(true); //显示表头 table.setLinesVisible(true); //显示表格线 GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.heightHint = 100; table.setLayoutData(gridData); TableLayout tLayout = new TableLayout(); //专用于表格的布局 table.setLayout(tLayout); //建立TableViewer中的列 tLayout.addColumnData(new ColumnWeightData(40)); new TableColumn(table, SWT.NONE).setText("集合名称"); tLayout.addColumnData(new ColumnWeightData(40)); new TableColumn(table, SWT.NONE).setText("日志级别"); { tv.setColumnProperties(new String[] { "name", "level" });//定义每一列的别名 CellEditor[] cellEditors = new CellEditor[2]; cellEditors[0] = new TextCellEditor(table); cellEditors[1] = new ComboBoxCellEditor(table, levelStrArray, SWT.READ_ONLY); tv.setCellEditors(cellEditors); } tv.setContentProvider(new DefaultContentProvider()); tv.setLabelProvider(new MyLabelProvider(ctv)); tv.setCellModifier(new MyCellModifier()); tv.setInput(getInputData()); ctv.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { LogMonitorSet o = (LogMonitorSet) event.getElement(); o.setSelection(event.getChecked()); } }); } { Composite comp = new Composite(topComp, SWT.NONE); comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); comp.setLayout(new RowLayout()); Button addButton = new Button(comp, SWT.PUSH); addButton.setText(" 新增 "); addButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { //TODO } }); Button editButton = new Button(comp, SWT.PUSH); editButton.setText(" 修改 "); editButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { //TODO } }); Button removeButton = new Button(comp, SWT.PUSH); removeButton.setText(" 删除 "); removeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) tv.getSelection(); LogMonitorSet m = (LogMonitorSet) ((selection).getFirstElement()); if (m != null) { //先预先移动到下一行 Table table = tv.getTable(); int i = table.getSelectionIndex(); //取得当前所选行的序号,如没有则返回-1 table.setSelection(i + 1); //当前选择行移下一行 //删除 tv.remove(m);//从界面上删除 ((List) tv.getInput()).remove(m); //从数据模型中删除 } } }); } return topComp; } private List getInputData() { //Test code List list = new ArrayList(3); { LogMonitorSet lms = new LogMonitorSet(); lms.setSelection(false); lms.setName("aaaaa"); lms.setLogLevel(Level.INFO_INT); list.add(lms); } { LogMonitorSet lms = new LogMonitorSet(); lms.setSelection(true); lms.setName("bbbb"); lms.setLogLevel(Level.DEBUG_INT); list.add(lms); } { LogMonitorSet lms = new LogMonitorSet(); lms.setSelection(false); lms.setName("cccc"); lms.setLogLevel(Level.ERROR_INT); lms.addLogger("com.wxxr.jboss"); lms.addLogger("com.wxxr.sms"); list.add(lms); } return list; // return Collections.EMPTY_LIST; } public LogMonitorSet[] getDialogData() { List list = (List) tv.getInput(); LogMonitorSet[] array = new LogMonitorSet[list.size()]; list.toArray(array); return array; } /** * 标签器 */ private final static class MyLabelProvider extends TableLabelProviderAdapter { private CheckboxTableViewer ctv; public MyLabelProvider(CheckboxTableViewer ctv) { this.ctv = ctv; } public String getColumnText(Object element, int col) { LogMonitorSet o = (LogMonitorSet) element; if (col == 0) { ctv.setChecked(o, o.getSelection()); return o.getName(); } if (col == 1) { return LogHelper.getLevelShowString(o.getLogLevel()); } return ""; } } /** * 修改方法类 */ private class MyCellModifier implements ICellModifier { /** * 是否可以修改此单元格。这里设置了任一单元格都可以修改。 * @param element 表格记录对象 * @param property 列的别名 */ public boolean canModify(Object element, String property) { return true; } /** * 由此方法决定,当单击单元格出现CellEditor时应该显示什么值。 */ public Object getValue(Object element, String property) { LogMonitorSet o = (LogMonitorSet) element; if (property.equals("name")) { return o.getName(); } if (property.equals("level")) { int index = LogHelper.getLevelIndex(o.getLogLevel()); return new Integer(index); } return ""; } /** * 从CellEditor取值得此单元格的值。 * @param value 修改的新值 */ public void modify(Object element, String property, Object value) { TableItem tableItem = (TableItem) element; LogMonitorSet o = (LogMonitorSet) tableItem.getData(); if (property.equals("name")) { String newValue = (String) value; if (!o.getName().equals(newValue)) { o.setName(newValue); tv.update(o, null);//或 tv.refresh(); 确认并更新修改 } } if (property.equals("level")) { Integer newValue = (Integer) value; String levelStr = levelStrArray[newValue.intValue()]; int levelInt = LogHelper.getLevelInt(levelStr); if (o.getLogLevel() != levelInt) { o.setLogLevel(levelInt); tv.update(o, null);//或 tv.refresh(); 确认并更新修改 } } } } }
上面的类用到的一些类的代码如下:
import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.graphics.Image; /** * 标签器的适配器,提供一些不常用方法的空实现,以助简化代码 * @author ChenGang * @version 1.0 2004-5-8 */ public abstract class TableLabelProviderAdapter implements ITableLabelProvider { public Image getColumnImage(Object arg0, int arg1) { return null; } public boolean isLabelProperty(Object arg0, String arg1) { return false; } public void addListener(ILabelProviderListener arg0) {} public void removeListener(ILabelProviderListener arg0) {} public void dispose() {} } import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; /** * 一个默认实现的内容器 * @author ChenGang * @version 1.0, 2004-5-14 */ public class DefaultContentProvider implements IStructuredContentProvider { public Object[] getElements(Object element) { if (element instanceof List) return ((List) element).toArray(); if (element instanceof Object[]) return (Object[]) element; return new Object[0]; } public void dispose() {} public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} } import org.apache.log4j.Level; public class LogHelper { public static final int NONE = -1; private LogHelper() {} public static String getLevelShowString(Level level) { // return AdminConsolePlugin.getResourceString(level.toString()); return level.toString() + "(中文)"; } public static String getLevelShowString(int levelInt) { Level level = Level.toLevel(levelInt); return getLevelShowString(level); } public static String[] getLevelShowStrings() { String[] strs = new String[5]; strs[0] = getLevelShowString(Level.DEBUG); strs[1] = getLevelShowString(Level.INFO); strs[2] = getLevelShowString(Level.WARN); strs[3] = getLevelShowString(Level.ERROR); strs[4] = getLevelShowString(Level.FATAL); return strs; } private static Level[] getLevels() { Level[] levels = new Level[5]; levels[0] = Level.DEBUG; levels[1] = Level.INFO; levels[2] = Level.WARN; levels[3] = Level.ERROR; levels[4] = Level.FATAL; return levels; } public static int getLevelInt(String levelShowString) { String[] strs = getLevelShowStrings(); Level[] levels = getLevels(); for (int i = 0; i < strs.length; i++) { if (strs.equals(levelShowString)) { return levels.toInt(); } } return NONE; } public static int getLevelIndex(int levelInt) { Level[] levels = getLevels(); for (int i = 0; i < levels.length; i++) { if (levels.toInt() == levelInt) { return i; } } return NONE; } }
最后是入口程序,把这个程序当成SWT程序运行。
import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.widgets.Shell; public class TestLogMonitorDialog { public static void main(String[] args) { Shell shell = new Shell(); LogMonitorDialog d = new LogMonitorDialog(shell); if (d.open() == IDialogConstants.OK_ID) { LogMonitorSet[] lms = d.getDialogData(); for (int i = 0; i < lms.length; i++) { LogMonitorSet o = lms; System.out.println(o.getSelection() + "__" + o.getName() + "__" + LogHelper.getLevelShowString(o.getLogLevel())); } } } }
发表评论
-
Java中Object类的wait()和notify()方法怎么使用
2013-02-12 18:28 1643http://wenwen.soso.com/z/q1292 ... -
PropertyEditor
2011-09-23 15:08 1086http://read.pudn.com/downloads3 ... -
JSON与JAVA的数据转换
2011-09-19 17:27 1093http://developer.51cto.com/art/ ... -
盘点:25个最佳Eclipse开发项目
2011-02-10 11:24 1801上个月23号Eclipse基金会发布了最新的Ec ... -
启动参数详解及Eclipse调优
2010-10-25 10:41 1072JVM 提供了各种用于调整内存分配和垃圾回收行为的标准开关 ... -
String,StringBuffer与StringBuilder的区别??
2010-07-13 09:51 1064http://blog.csdn.net/rmn190/a ... -
可能的eclipse helios正式版本的下载地址
2010-06-23 10:25 1091http://download.actuatechina.co ... -
获取java线程中信息的两种方法
2010-06-13 11:08 1215http://www.cn-java.com/www1/?ac ... -
Java:模拟Eclipes的控制台
2010-06-09 10:17 1261http://www.cppblog.com/biao/arc ... -
The Final Performance Testing Example
2009-11-05 10:47 914http://www.artima.com/weblogs/v ... -
看JTS源码,感受Java优化编程
2009-09-21 14:30 2544看JTS源码,感受Java优化编程 http://www.bl ... -
给myeclipse减肥
2009-08-27 14:15 19821.禁用myeclipse updating indexes ... -
发布FetionAPI 中国移动飞信免费发短信API接口
2009-04-19 10:30 2068http://www.cnbeta.com/articles/ ... -
jolt书籍下载大全
2009-03-09 14:43 1482第19届(2009)Annual Jolt Product E ... -
JDBC性能优化
2009-02-05 15:06 1196jdbc程序的性能主要由两个因素决定,一是数据库本身的性质,另 ... -
Java代码优化,策略与方法
2009-02-05 15:05 1259http://looxiaohu.iteye.com/blog ... -
『Java代码优化』 尽可能地使用stack(栈)变量(方法内部的局部变量)
2009-02-05 15:04 1091http://looxiaohu.iteye.com/blog ... -
各种数据库的JDBC驱动下载及连接字符串URL写法
2009-01-07 16:19 4027各种数据库的JDBC驱动下载及连接字符串URL写法 sun官 ... -
dos下各种常见命令索引
2008-11-19 17:19 1078http://www.huo119.com/study/dos ... -
Eclipse 3.4使用dropins的插件安装方式
2008-11-04 11:20 10374Eclipse 3.4插件安装方式 以前 ...
相关推荐
首先,我们需要创建一个TableViewer实例,并将其附加到Table控件上。这可以通过以下代码实现: ```java Table table = new Table(parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); TableViewer viewer = new ...
1. **获取TableViewer实例**:你需要先有一个TableViewer实例,可以通过`TableViewer viewer = new TableViewer(parent);`创建,其中parent是你想要添加TableViewer的控件。 2. **获取Table**:TableViewer内部维护...
在压缩包文件"example"中,可能包含了实现以上功能的示例代码或者一个完整的RCP应用实例,你可以通过查看这些文件来进一步理解和学习如何在Eclipse RCP中使用`TableViewer`和`CellEditor`。这有助于提升你在桌面应用...
1. **创建TableViewer**: 首先,需要在SWT的`Composite`上创建一个`TableViewer`实例。这通常涉及到`new TableViewer(parent)`的调用,其中`parent`是包含`TableViewer`的父组件。 2. **设置表列**: 使用`...
1. 创建TableViewer实例,并设置其父控件(如Table)。 2. 定义表项和列,可以使用ColumnViewerColumn创建列并关联数据模型。 3. 配置TableViewer的行为,比如编辑器、排序、过滤等。 4. 实现TableViewer的焦点处理...
在Java SWT(Standard Widget Toolkit)库中,TableViewer是一个强大的组件,用于在用户界面中展示表格数据。它提供了丰富的功能,如排序、过滤、编辑和自定义列显示,是构建桌面应用时处理数据展示的常用工具。本文...
创建`TableViewer`的基本步骤包括:首先,你需要一个`Table`控件,然后通过`TableViewer.createViewer(Table table)`方法创建`TableViewer`实例。 2. **数据模型与内容提供者** `TableViewer`的数据模型通常是`...
这将创建一个与表格控件关联的`TableViewer`实例。 ```java Table table = new Table(parent, SWT.MULTI | SWT.FULL_SELECTION); TableViewer tableViewer = new TableViewer(table); ``` 2. **定义表格列** 使用...
RCP 打开视图的不同实例,并设置不同的值 ,创建一个视图,里面布局用了个tableviewer,通过一个Action,按钮打开该视图,每次打开的视图的内容可设置不同。 说明文档为 ...
1. **创建TableViewer实例**:首先需要创建TableViewer实例,并将其绑定到SWT.Table控件上。 2. **设置内容器**:定义一个内容器,该内容器负责管理TableViewer的数据模型。 3. **设置标签器**:通过标签器来指定每...
SWT是一个开源的Java库,它提供了与操作系统原生UI组件的直接交互,使得Java应用能够拥有与本地应用相同的外观和感觉。SWT包括窗口、按钮、文本框、列表、树等基本组件,以及更复杂的控件如表格、进度条、颜色选择...
1. **创建 TableViewer**:与 `TreeViewer` 类似,创建一个 `TableViewer` 实例,并将其添加到窗口中。 ```java TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.MULTI); ``` 2. **实现 ...
CellEditor允许我们在TableViewer的特定单元格中插入一个可编辑的控件,例如Text或Combo,当用户完成编辑后,单元格会返回到其默认的只读状态。 1. **Text CellEditor**: 这种编辑样式通常用于输入文本数据。Text ...
1. **初始化Shell**:创建一个新的Shell实例,设置其大小、位置和标题。 2. **创建TreeViewer**:为Shell添加一个TreeControl,并使用TreeViewer进行包装。加载文件系统的根目录作为初始节点。 3. **实现...
在描述中提到的"TableViewerDemo"很可能是一个简单的程序,展示了如何使用SWT中的`TableViewer`类来创建和展示数据。`TableViewer`是JFace数据视图器框架的一部分,它为SWT的`Table`控件提供了更高级的数据绑定和...
在这个`Person`类中,我们实现了`PropertyChangeListener`接口,并且添加了一个`PropertyChangeSupport`实例,以便于管理属性变更监听器。这样做的目的是为了让该类能够支持属性变更事件的发布与监听,从而实现数据...
创建一个Table,你需要实例化`org.eclipse.swt.widgets.Table`类,并将其添加到父容器中。你可以通过调用`TableColumn`类的方法来添加列,设置列头文本,调整列宽。`TableItem`用于创建和管理表中的行数据。 然而,...
在`CheckTableViewDemo.java`中,这些对象会被用来填充表格,每个实例对应表格的一行,并且可能有一个布尔属性来表示复选框的状态。 在Eclipse RCP中实现这样的功能,主要步骤如下: 1. **创建表视图**:使用`SWT....
1. **TableView的创建**:首先,我们需要创建一个TableView实例,通常通过 SWT(Standard Widget Toolkit)库中的` SWT.Table`类来实现。设置表格的列头,可以使用`TableColumn`对象,并添加到表格中。 2. **监听器...
综上所述,"SWT&JFace通信录项目"是一个综合性的Java GUI应用实例,涵盖了UI设计、数据库操作、事件处理等多个重要技术点。通过学习这个项目,开发者不仅可以深入了解SWT和JFace的使用,还能掌握如何在实际项目中...