- 浏览: 190836 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
wanglijunjsj:
谢谢,很有用
java log4j的一些总结 -
lxb_champagne:
this.init(); 类都没初始化好,this没用的。
java final变量的初始化问题 -
lg_asus:
上面代码有点小问题,最新代码:
public class Pr ...
判断素数 -
lg_asus:
测试10 million的以内的数据,算出所有素数时间在500 ...
判断素数 -
lg_asus:
文章中说错了:如果只是找一个数在不在其中,则可以直接遍历一次, ...
40亿不重复的正整数,如何判断一个数是否在其中
项目需要,从XML中读取数据生成一个Tree,然后可以对叶子节点的值(属性不可以)进行编辑,并最后保存。
XML文件是我们项目中的文件,就不提供了,随便一个XML都可以拿来测试。
/** * chega * 2012-12-17下午2:11:42 */ package com.java2s.www; import java.io.File; import java.io.IOException; 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.custom.TreeEditor; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class E10FieldTree { public static void main(String[] args) throws JDOMException, IOException { final Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, false)); final E10FieldTree e10 = new E10FieldTree(shell); Composite btnComp = new Composite(shell, SWT.NONE); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); btnComp.setLayoutData(gridData); // btnComp.setBackground(display.getSystemColor(SWT.COLOR_RED)); FormLayout layout = new FormLayout(); btnComp.setLayout(layout); Button btn = new Button(btnComp, SWT.PUSH); FormData data = new FormData(); data.top = new FormAttachment(0, 0); data.right = new FormAttachment(100, -40); data.bottom = new FormAttachment(100); btn.setText("Save"); btn.setLayoutData(data); btn.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent selectionevent) { try { e10.saveXML(); } catch (IOException e) { e.printStackTrace(); } } }); shell.setSize(new Point(600, 500)); shell.setVisible(true); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } public void saveXML() throws IOException { XMLOutputter outputter = new XMLOutputter(); Format format = Format.getPrettyFormat(); // jdom在输出到不同的目的地时,中文可能会产生乱码。输出到文件用FileOutputStream而不能用FileWriter,输出到控制台要用PrintWriter而不能直接用System.out(见网上讨论) // 还可以强制设定输出编码,这样就不用考虑中文编码问题了 format.setEncoding("utf-8"); outputter.output(this.document, System.out); } private Shell parent; private TreeViewer treeViewer; private Text text; private TreeEditor editor; private Document document; private Document copyDocument; private boolean isEditing = false; public E10FieldTree(Shell parent) throws JDOMException, IOException { this.parent = parent; this.init(); } private void init() throws JDOMException, IOException { this.treeViewer = new TreeViewer(this.parent, SWT.SINGLE | SWT.FULL_SELECTION); GridData data = new GridData(GridData.FILL_BOTH); this.treeViewer.getTree().setLayoutData(data); this.treeViewer.getTree().setLinesVisible(true); this.treeViewer.getTree().setHeaderVisible(true); this.treeViewer.setAutoExpandLevel(1); TreeColumn column1 = new TreeColumn(this.treeViewer.getTree(), 0); column1.setText("Key"); column1.setWidth(150); TreeColumn column2 = new TreeColumn(this.treeViewer.getTree(), 1); column2.setText("Value"); column2.setWidth(250); document = new SAXBuilder().build(new File("Group_ITEM.xml")); this.copyDocument = (Document) this.document.clone(); this.treeViewer.setContentProvider(new ITreeContentProvider() { @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } @Override public Object[] getElements(Object inputElement) { if (inputElement == document) { return new Element[] { document.getRootElement() }; } else { Element ele = (Element) inputElement; return ele.getChildren().toArray(); } } @Override public Object[] getChildren(Object parentElement) { Element ele = (Element) parentElement; return ele.getChildren().toArray(); } @Override public Object getParent(Object element) { Element ele = (Element) element; return ele.getParentElement(); } @Override public boolean hasChildren(Object element) { return this.getChildren(element).length > 0; } }); this.treeViewer.setLabelProvider(new ITableLabelProvider() { @Override public void addListener(ILabelProviderListener listener) { } @Override public void dispose() { } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void removeListener(ILabelProviderListener listener) { } @Override public Image getColumnImage(Object element, int columnIndex) { return null; } @Override public String getColumnText(Object element, int columnIndex) { Element ele = (Element) element; if (columnIndex == 0) { return ele.getName(); } if (columnIndex == 1) { if (!((ITreeContentProvider) treeViewer.getContentProvider()).hasChildren(element)) { return ele.getValue(); } } return null; } }); this.treeViewer.setInput(document); this.treeViewer.expandAll(); editor = new TreeEditor(this.treeViewer.getTree()); editor.grabHorizontal = true; editor.grabVertical = true; text = new Text(this.treeViewer.getTree(), SWT.SINGLE | SWT.BORDER); text.setVisible(false); final FocusListener focusListener = new FocusAdapter() { @Override public void focusGained(FocusEvent focusevent) { beginEdit(); } @Override public void focusLost(FocusEvent focusevent) { finishEdit(); } }; text.addFocusListener(focusListener); text.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent keyevent) { // 回车直接确认修改 if (keyevent.character == SWT.CR) { finishEdit(); } // ESC取消修改 if (keyevent.character == SWT.ESC) { cancelEdit(); } } }); this.treeViewer.getTree().addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { TreeItem selectedItem = treeViewer.getTree().getItem(new Point(e.x, e.y)); if (selectedItem == null) { return; } // 只有叶节点才允许修改 if (selectedItem.getItemCount() == 0) { if (canEdit(e.x, 1)) { editor.setEditor(text, selectedItem, 1); text.setText(selectedItem.getText(1)); text.selectAll(); text.forceFocus(); } } } }); } /** * 开始修改 */ protected void beginEdit() { this.isEditing = true; text.setText(editor.getItem().getText(1)); text.selectAll(); text.setVisible(true); } /** * 提交修改(提交修改的时候同时修改Document对象) */ protected void finishEdit() { if(!this.isEditing){ return ; } System.out.println("finishEdit"); this.isEditing = false; editor.getItem().setText(1, text.getText().trim()); ((Element) editor.getItem().getData()).setText(text.getText().trim()); text.setText(""); text.setVisible(false); } /** * 取消修改 */ protected void cancelEdit() { this.isEditing = false; text.setText(""); text.setVisible(false); } /** * 判断x坐标是否在第columnIdx列内(起始列索引为0) * * @param x * @param columnIdx * @return */ protected boolean canEdit(int x, int columnIdx) { if (columnIdx >= this.treeViewer.getTree().getColumnCount()) { return false; } int leftWidth = 0; int rightWidth = 0; for (int i = 0; i < columnIdx; i++) { leftWidth += this.treeViewer.getTree().getColumn(i).getWidth(); } rightWidth = leftWidth + this.treeViewer.getTree().getColumn(columnIdx).getWidth(); return leftWidth <= x && x <= rightWidth; } /** * 取得原始的Document * * @return */ public Document getOriginalDocument() { return this.copyDocument; } public Document getDocumentInUse() { return this.document; } }
XML文件是我们项目中的文件,就不提供了,随便一个XML都可以拿来测试。
发表评论
-
Paint in AWT andSwing
2012-04-20 21:32 0jdk 1.0中用的是AWT,有一个缺点,就是每个组件要和一个 ... -
SwingUtilities的invokeLater和invokeAndWait
2012-02-28 18:00 1166参考: http://blog.csdn.net/bzwm/a ... -
swing第三方jar增强功能
2012-02-14 16:34 2522原文:http://hb.qq.com/a/20101220/ ... -
swing 日期组件
2012-02-03 15:35 1156/** * chega * 2011-9-21上午 ... -
java swing全屏显示方式
2012-02-01 11:01 5129覆盖任务栏和不覆盖任务栏见:http://blog.csdn. ... -
带有行标题的JTable
2012-01-06 15:59 1240/** * @author chega * thi ... -
JColorChooser
2010-07-18 21:25 1176import java.awt.*; import ja ... -
JFileChooser
2010-07-18 20:17 1225import java.awt.*; import ja ... -
AbstractAction
2010-07-18 10:00 1829import java.awt.*; import ja ... -
JMenuItem和JTollBar
2010-07-18 09:34 1537import java.awt.*; import ja ... -
JTree
2010-07-17 16:41 1208import java.awt.*; import ja ... -
JTree
2010-07-17 14:58 1032import java.awt.*; import ja ... -
JTree
2010-07-17 13:17 1074import java.awt.*; import ja ... -
UndoableEditListener 和 DocumentListener
2010-07-15 21:24 1352import java.awt.*; import ja ... -
JTable增刪行列
2010-07-14 19:57 1454import java.awt.*; import ja ... -
JTable背景色與Boolean類型數據顯示衝突的問題
2010-07-12 16:53 944import java.awt.*; import java ... -
JComboBox每個Item加圖標
2010-07-11 16:46 1289import java.awt.*; import java ... -
JComboBox
2010-07-11 16:33 1308JComboBox(ComboModel):可以繼承Abstr ... -
JList雙向列表
2010-07-11 15:43 812import java.awt.*; import java ... -
給JList每個Item加個圖標
2010-07-11 14:40 1407import java.awt.*; import ja ...
相关推荐
### SWT Tree 学习文档知识点总结 #### 一、SWT Tree 概念与应用场景 SWT (Standard Widget Toolkit) 是一种用于构建图形用户界面(GUI)的应用程序框架,广泛应用于Java开发环境中。SWT提供了丰富的组件库,使得...
本示例"SWT_demo.zip_DEMO_SWT_SWT_demo_swt demo"提供了多种SWT控件的演示,旨在帮助开发者理解和应用这些组件。 在描述中提到的几个关键知识点包括: 1. **按钮(Buttons)**:SWT提供不同类型的按钮,如普通...
**SWT Tree 全面解析** SWT(Standard Widget Toolkit)是Java中用于构建桌面应用程序的一个开源GUI库,它是Eclipse开发平台的基础。在SWT中,Tree组件用于展示层次结构的数据,类似于Windows资源管理器中的文件...
在这个名为“swt Tree 例子项目代码”的工程中,我们主要关注的是如何使用`org.eclipse.swt.widgets.Tree`类来创建和管理树形结构的数据展示。 `Tree`是SWT中的一个关键组件,用于构建类似于Windows资源管理器或...
本包“SWT开发组件demo”聚焦于SWT组件的使用,通过示例代码和详细说明,帮助开发者更好地理解和应用这些组件。 1. **基础组件**:SWT的基础组件包括按钮(Button)、文本框(Text)、单选按钮(RadioButton)、复...
SWT(Standard Widget Toolkit)是Eclipse项目提供的一种用于创建Java图形用户界面(GUI)的开源库,它提供了丰富的控件和组件,包括我们这里关注的Tree组件。Tree组件在GUI应用中通常用来展示层级结构的数据,比如...
这个名为"swt-demo.zip"的压缩包包含了一个基于SWT实现的图片列表预览应用,它展示了如何利用SWT库来创建功能丰富的图像浏览界面。以下是关于SWT和这个特定示例应用的一些详细知识点: 1. SWT简介:SWT是Sun ...
1. **SWT的使用**:SWT提供了一系列与操作系统窗口系统直接交互的类和接口,如Button、Text、Shell等,使得开发者能够创建出与本机操作系统一致的用户界面。在SWT中,每个控件都有对应的Java对象,通过这些对象可以...
通过学习研究,发现参照 Eclipse 自带的 ControlExample SWT 示例程序,并结合 WinBuilder可以很好的进行可视化开发出完全满足我要求的JavaDemo程序,方便演示效果和进行扩展,特共享出来。
### SWT控件知识学习笔记 #### 一、SWT/JFace常用组件介绍 SWT (Standard Widget Toolkit) 是 Eclipse 平台的一个图形界面工具包,它提供了与平台无关的 GUI 组件,允许开发者构建高性能的应用程序。SWT/JFace ...
1. **基础控件**:SWT提供了一系列的基础控件,如按钮(Button)、文本框(Text)、列表(List)、组合框(Combo)、树(Tree)、表格(Table)等。每个控件都有相应的事件监听和方法,例如按钮的点击事件、文本框的文本更改事件...
"jQuery SWT demo 弹窗"这个主题聚焦于如何利用jQuery来实现窗口或对话框的效果,通常这种效果在医疗和教育领域有广泛应用,比如展示警告信息、用户确认操作或者提供详细信息的浮窗。 jQuery的核心特性包括选择器、...
用SWT 组建实现一个简单的浏览器实例。具有搜索功能,
TableEditor通常会绑定一个控件(如Text、Button等)到一个特定的TableItem和Column。当用户开始编辑时,这个控件会显示在对应的单元格内。在完成编辑后,通常我们会调用TableEditor的`dispose()`方法来移除编辑器,...
Java SWT(Standard Widget Toolkit)是Java平台上用于创建桌面应用程序的一个库,它提供了丰富的用户界面元素,如按钮、文本框、列表等。SWT是Eclipse IDE的基础,它通过与操作系统直接交互来提供本地化的图形用户...
在这个特定的例子中,我们关注的是“tree的遍历”,并通过Delphi编程语言来实现。Delphi是一款强大的面向对象的 Pascal 编程工具,以其高效的编译器和丰富的类库而闻名,非常适合开发桌面应用程序。 树的遍历主要...
SWT表格管理类,包括表头排序事件,table宽度自适应事件,隔行颜色事件
Text text = (Text) editor.getEditor(); editor.getItem().setText(EDITABLECOLUMN, text.getText()); } }); newEditor.selectAll(); newEditor.setFocus(); editor.setEditor(newEditor, item, ...
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....