- 浏览: 1027904 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1600http://wenwen.soso.com/z/q1292 ... -
PropertyEditor
2011-09-23 15:08 1045http://read.pudn.com/downloads3 ... -
JSON与JAVA的数据转换
2011-09-19 17:27 1041http://developer.51cto.com/art/ ... -
盘点:25个最佳Eclipse开发项目
2011-02-10 11:24 1763上个月23号Eclipse基金会发布了最新的Ec ... -
启动参数详解及Eclipse调优
2010-10-25 10:41 1036JVM 提供了各种用于调整内存分配和垃圾回收行为的标准开关 ... -
String,StringBuffer与StringBuilder的区别??
2010-07-13 09:51 1026http://blog.csdn.net/rmn190/a ... -
可能的eclipse helios正式版本的下载地址
2010-06-23 10:25 1055http://download.actuatechina.co ... -
获取java线程中信息的两种方法
2010-06-13 11:08 1182http://www.cn-java.com/www1/?ac ... -
Java:模拟Eclipes的控制台
2010-06-09 10:17 1230http://www.cppblog.com/biao/arc ... -
The Final Performance Testing Example
2009-11-05 10:47 873http://www.artima.com/weblogs/v ... -
看JTS源码,感受Java优化编程
2009-09-21 14:30 2500看JTS源码,感受Java优化编程 http://www.bl ... -
给myeclipse减肥
2009-08-27 14:15 19511.禁用myeclipse updating indexes ... -
发布FetionAPI 中国移动飞信免费发短信API接口
2009-04-19 10:30 2038http://www.cnbeta.com/articles/ ... -
jolt书籍下载大全
2009-03-09 14:43 1443第19届(2009)Annual Jolt Product E ... -
JDBC性能优化
2009-02-05 15:06 1163jdbc程序的性能主要由两个因素决定,一是数据库本身的性质,另 ... -
Java代码优化,策略与方法
2009-02-05 15:05 1224http://looxiaohu.iteye.com/blog ... -
『Java代码优化』 尽可能地使用stack(栈)变量(方法内部的局部变量)
2009-02-05 15:04 1057http://looxiaohu.iteye.com/blog ... -
各种数据库的JDBC驱动下载及连接字符串URL写法
2009-01-07 16:19 3973各种数据库的JDBC驱动下载及连接字符串URL写法 sun官 ... -
dos下各种常见命令索引
2008-11-19 17:19 1034http://www.huo119.com/study/dos ... -
Eclipse 3.4使用dropins的插件安装方式
2008-11-04 11:20 10331Eclipse 3.4插件安装方式 以前 ...
相关推荐
光盘:Visual C++管理信息系统完整项目实例剖析:Visual C++管理信息系统完整项目实例剖析
微信商城小程序 完整实例源代码微信商城小程序 完整实例源代码微信商城小程序 完整实例源代码微信商城小程序 完整实例源代码微信商城小程序 完整实例源代码微信商城小程序 完整实例源代码微信商城小程序 完整实例源...
光盘:Visual C++管理信息系统完整项目实例剖析:Visual C++管理信息系统完整项目实例剖析.part3.rar
vs2010下编译过,能运行的,跟一般网上搜下来的不一样
InstallShield制作一个完整的应用程序安装实例
光盘:Visual C++管理信息系统完整项目实例剖析:Visual C++管理信息系统完整项目实例剖析.part2.rar
这个是MATLAB GUI的设计实例,共35个有需要的可以看下
一个完整的实例显示所有目录及下面文件,便于浏览
delphi 实例实例实例实例delphi 实例实例实例实例
分享一个信号完整性仿真实例 ansys软件
一个MT4编程实例 KDJ一个MT4编程实例 KDJ一个MT4编程实例 KDJ一个MT4编程实例 KDJ一个MT4编程实例 KDJ一个MT4编程实例 KDJ一个MT4编程实例 KDJ
tab窗口编程实例,一个完整的c++实例。
每个实例都有项目简介、设计思路、数据结构、完整程序、运行结果五个部分,可以直接拿来做一篇课程设计。实例名称有:学生成绩管理系统、考试报名管理、约瑟夫生者死者游戏、迷宫旅行游戏、八皇后问题、停车场管理、...
SSI完整配置与实例,有所有的jar包,sqlServer数所库连接
Android 超高仿微信图片选择器完整实例Android 超高仿微信图片选择器完整实例Android 超高仿微信图片选择器完整实例Android 超高仿微信图片选择器完整实例Android 超高仿微信图片选择器完整实例Android 超高仿微信...
一个完整的jquery+ajax传送请求的实例
所以源代码都有 ,一个完整的线程池的实例
35个完整GUI实例,初学者参考,欢迎下载,积极交流,
Qt5开发及实例(完整版).zip 配完整教程实例源码和课件包含: 1.Qt5开发及实例(完整版).pdf; 2.课程PPT课件可供学习使用; 3.课件源码包(几百份源码); Qt5: 优势: 1. 成熟稳定:Qt5是Qt框架的第五个主要版本...
一个完整的windows服务程序实例,在vs2008上编译通过,对于希望学校服务开发的开发人员有很大的帮助!