在前面的文章中我们了解SWT的一些基本控件,现在我为大家介绍几种同样常用但稍微复杂点的控件
1.tree:
Styles:
SINGLE(不能多选), MULTI(可以多选), CHECK(每个treeitem有复选框), FULL_SELECTION(选中时,选中整行), VIRTUAL(树是个虚拟的树,在得到用户、客户要求或者请求的时候才建立树的Item,而这些Item要设置有多少个子Item。有助于提升性能), NO_SCROLL(没有滚动条,默认是自动的)
Events:
Selection(先择事件), DefaultSelection(默认选择事件), Collapse(收紧子节点), Expand(展开子节点), SetData(铺展时间,经常与tree.setItemCount(x);连用), MeasureItem( 计算Item应该画多大,就是计算好了画多大后,在加上Image的宽度,这里要注意的是改变event.width的宽度就改变的项的宽度了。), EraseItem(设置背景), PaintItem( 画上设置的图像),MouseDown(这个不说了- -!)
TreeColumn:
代表tree的一列
TreeItem:
代表tree的一行
cell:
确定某行某列的一个小单元
static Image getImage(Color c) { Image image = new Image(Display.getCurrent(), 17, 17); GC gc = new GC(image); gc.setBackground(c); gc.fillRectangle(3, 3, 10, 10); gc.drawRectangle(3, 3,9,9); gc.dispose(); return image; } public static void main(String[] args) { Display display = new Display(); final Shell shell = new Shell(display); final Image image=getImage(display.getSystemColor(SWT.COLOR_BLUE)); TreeColumnLayout layout=new TreeColumnLayout(); shell.setLayout (layout); final Tree tree = new Tree(shell, SWT.VIRTUAL | SWT.BORDER|SWT.FULL_SELECTION); TreeColumn nameColumn=new TreeColumn(tree,SWT.NONE); nameColumn.setText("Name"); layout.setColumnData(nameColumn,new ColumnWeightData(50, 150)); TreeColumn valueColumn=new TreeColumn(tree,SWT.NONE); valueColumn.setText("Value"); layout.setColumnData(valueColumn,new ColumnWeightData(50, 150)); final TreeEditor editor= new TreeEditor(tree); editor.horizontalAlignment = SWT.LEFT; editor.grabHorizontal = true; // 生成节点的总是 tree.addMouseListener(new MouseListener() { @Override public void mouseUp(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseDown(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseDoubleClick(MouseEvent e) { // TODO Auto-generated method stub Control c = editor.getEditor(); if (c != null) { c.dispose(); } Point point = new Point(e.x, e.y); final TreeItem treeItem = tree.getItem(point); if(treeItem!=null){ int column = -1; for (int i = 0; i < tree.getColumnCount(); i++) { Rectangle rec = treeItem.getBounds(i); if (rec.contains(point)) column = i; } final Text txt=new Text(tree,SWT.NONE); txt.setText(treeItem.getText(column)); txt.forceFocus(); editor.setEditor(txt, treeItem,column); System.out.println(txt.getBounds()); txt.addListener(SWT.FocusOut, new Listener() { @Override public void handleEvent(Event event) { // TODO Auto-generated method stub treeItem.setText(txt.getText()); txt.dispose(); } }); } } }); final int[] iArr = new int[1]; tree.addListener(SWT.MeasureItem,new Listener(){ @Override public void handleEvent(Event event) { // TODO Auto-generated method stub TreeItem item=(TreeItem) event.item; //for(int i=0;i<tree.getColumnCount();i++){ Image img=item.getImage(event.index); if (img != null) event.width += 2 * (image.getBounds().width + 2); //} } }); tree.addListener(SWT.PaintItem,new Listener(){ @Override public void handleEvent(Event event) { // TODO Auto-generated method stub TreeItem item=(TreeItem) event.item; //for(int i=0;i<tree.getColumnCount();i++){ Image img=item.getImage(event.index); if (img != null) { int x, y; int itemH = tree.getItemHeight(); int imageH = image.getBounds().height; int imageW = image.getBounds().width; // draw the 1 image x = event.x; y = event.y + (itemH - imageH) / 2; event.gc.drawImage(image, x, y); // draw the 2 image x += 2 + imageW; event.gc.drawImage(image, x, y); // draw the string String text = item.getText(); x += 2 + imageW; y = event.y + 2; event.gc.drawText(text, x, y); // draw the 3 image x += event.width - imageW; y = event.y + (itemH - imageH) / 2; event.gc.drawImage(image, x, y); } //} } }); final Color red = display.getSystemColor(SWT.COLOR_RED); final Color yellow = display.getSystemColor(SWT.COLOR_YELLOW); tree.addListener(SWT.EraseItem,new Listener(){ @Override public void handleEvent(Event event) { // TODO Auto-generated method stub if(event.index==0){ event.detail &= ~SWT.FOREGROUND; } if ((event.detail & SWT.SELECTED) == 0) return; /* item not selected */ GC gc = event.gc; int clientWidth = tree.getClientArea().width; Color oldForeground = gc.getForeground(); Color oldBackground = gc.getBackground(); gc.setForeground(red); gc.setBackground(yellow); gc.fillGradientRectangle(0, event.y, clientWidth, event.height, false); gc.setForeground(oldForeground); gc.setBackground(oldBackground); event.detail &= ~SWT.SELECTED; //} } }); tree.addListener(SWT.SetData, new Listener() { public void handleEvent(Event event) { System.out.println("Create the "+(++iArr[0]) +" item."); TreeItem item = (TreeItem)event.item; item.setImage(0, image); TreeItem parentItem = item.getParentItem(); String name = null; String value="value"; if (parentItem == null) { name = "node "+tree.indexOf(item); } else { name = parentItem.getText(0)+" - "+parentItem.indexOf(item); } item.setText(0,name); item.setText(1,value); // 设置可以接受几个子节点 item.setItemCount(3); } }); // 自动生成几个根节点 tree.setItemCount(5); shell.setSize(400, 300); shell.open(); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } image.dispose(); display.dispose (); }
效果图:
2.table:
table就是一个没有父子的关系的tree
Styles:
和tree一致
Events:
除了 Collapse, Expand没有其他都有
TableColumn:
代表table的一列
TableItem:
代表table的一行
确定某行某列的一个小单元
public static void main(String[] args) { new TestTable(); } private TestTable() { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); shell.setText("tableС¹¤³Ì"); createTable(shell); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } /** * ´´½¨±í¸ñ * * @param shell */ private void createTable(final Shell shell) { table = new Table(shell, SWT.MULTI | SWT.FULL_SELECTION); editor = new TableEditor(table); editor.horizontalAlignment = SWT.LEFT; editor.grabHorizontal = true; table.setHeaderVisible(true); table.setLinesVisible(true); final TableColumn col1 = new TableColumn(table, SWT.NONE); col1.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { // TODO Auto-generated method stub final Text txt=new Text(table,SWT.NONE); txt.setText(col1.getText()); txt.forceFocus(); txt.setBounds(new Rectangle(10, 10, col1.getWidth(), table.getHeaderHeight())); System.out.println(txt.getBounds()); txt.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { } }); } @Override public void widgetDefaultSelected(SelectionEvent e) { // TODO Auto-generated method stub } }); col1.setMoveable(true); col1.setText("ÐÕÃû"); col1.setWidth(100); TableColumn col2 = new TableColumn(table, SWT.LEFT); col2.setText("ÄêÁä"); col2.setWidth(100); TableColumn col5 = new TableColumn(table, SWT.LEFT); col5.setText("ÐÔ±ð"); col5.setWidth(100); TableColumn col3 = new TableColumn(table, SWT.LEFT); col3.setText("µØÖ·"); col3.setWidth(100); TableColumn col4 = new TableColumn(table, SWT.LEFT); col4.setText("µç»°"); col4.setWidth(100); /** * Ìí¼Ó±í¸ñÊý¾Ý */ new TableItem(table, SWT.LEFT).setText(new String[] { "ÕÅÈý", "22", "ÄÐ", "ÖØÇìÊÐ", "13022332356" }); new TableItem(table, SWT.LEFT).setText(new String[] { "СÇÅ", "22", "Å®", "ÉϺ£ÊÐ", "13029872222" }); new TableItem(table, SWT.LEFT).setText(new String[] { "С¿É", "22", "ÄÐ", "±±¾©ÊÐ", "13006800123" }); new TableItem(table, SWT.LEFT).setText(new String[] { "ÍõÎå", "31", "ÄÐ", "Î人ÊÐ", "13098982201" }); new TableItem(table, SWT.LEFT).setText(new String[] { "ÌìÆô", "29", "ÄÐ", "ÄÏÄþÊÐ", "13024374001" }); new TableItem(table, SWT.LEFT).setText(new String[] { "¸ßÀÖ", "25", "Å®", "Ìì½òÊÐ", "13088888888" }); // ɾ³ý²Ëµ¥ Menu menu1 = new Menu(shell, SWT.POP_UP); table.setMenu(menu1); MenuItem menuitem1 = new MenuItem(menu1, SWT.PUSH); menuitem1.setText("ɾ³ý"); menuitem1.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { MessageBox mbox = new MessageBox(shell, SWT.DIALOG_TRIM|SWT.ICON_INFORMATION); mbox.setText("ɾ³ý³É¹¦"); mbox.setMessage("ɾ³ýÁË" + table.getSelectionCount() + "Ìõ¼Ç¼"); table.remove(table.getSelectionIndices()); mbox.open(); } }); // ÐÞ¸Ätable { table.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { Control c = editor.getEditor(); if (c != null) { c.dispose(); } // µÃµ½Ñ¡ÖеÄÐÐ Point point = new Point(e.x, e.y); // MessageDialog.openInformation(shell, null, // point.x+","+point.y); final TableItem tableitem = table.getItem(point); // µÃµ½Ñ¡ÖеÄÁÐ int column = -1; for (int i = 0; i < table.getColumnCount(); i++) { Rectangle rec = tableitem.getBounds(i); if (rec.contains(point)) column = i; } final int col1 = column; //ÐÞ¸ÄÄêÁ䣬½øÐÐ΢µ÷ if(col1==1){ final Spinner spiner=new Spinner(table,SWT.NONE); spiner.setMaximum(120); spiner.setMinimum(1); spiner.setSelection(new Integer(tableitem.getText(1))); editor.setEditor(spiner, tableitem, col1); spiner.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { tableitem.setText(col1,String.valueOf(spiner.getSelection())); } }); }else if (col1 == 2) { //ÐÞ¸ÄÐÔ±ðÓÃÏÂÀÁбí final Combo comb = new Combo(table, SWT.READ_ONLY); comb.setItems(new String[] { "ÄÐ", "Å®", "δ֪" }); comb.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { tableitem.setText(col1, comb.getText()); comb.dispose(); super.widgetSelected(e); } }); editor.setEditor(comb, tableitem, column); }else{ //ÆäËûµÄÐ޸Ķ¼ÊÇÓÃÎı¾¿ò final Text txt=new Text(table,SWT.NONE); txt.setText(tableitem.getText(col1)); txt.forceFocus(); editor.setEditor(txt, tableitem, col1); System.out.println(txt.getBounds()); txt.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { tableitem.setText(col1, txt.getText()); } }); } } }); } }
效果图:
(由于早前刚换windows10系统, 代码是我以前系统的学习例子,也许是没相关字体,所以中文都变成了乱码,对不起大家)
3.TabFolder和CTabFolder:
TabFolder(选项卡)是一个进行功能划分的控件,CTabFolder则是他的高级版
TabFolder Styles:TOP(将选项卡放在顶部) BOTTOM(将选项卡放在底部)
CTabFolder Styles:TOP(将选项卡放在顶部) BOTTOM(将选项卡放在底部) FLAT(为选项卡提供一个扁平的外观) BORDER(在控件周围现实边框) CLOSE(允许选项卡关闭)
TabFolder Events:selection,其他都是control 默认能触发的event
CTabFolder Events:selection,CTabFolder2Listener,其他也都是Control 默认能出发的event
TabItem :TabFolder的一个选项。
CTabItem :CTabFolder的一个选项。
下面我们着重看下CTabFolder2Listener下面有哪些方法:
(1)close 关掉一个CTabItem时触发,(假如在关掉当前这个item时,剩下还有item,CTabFolder默认会选中当前要关闭的item的后面一个,所以此回调基本都会出发selectionchange)。
(2)minimize:用了最小化按钮后触发
(3)maximize:用了最大化按钮后触发
(4)restore :用了恢复按钮后触发
(5)showList:在item太多,不够显示的时候,item的最右边会显示咯下拉箭头,showList就是在点了这个按钮后触发。
CTabFolder简单列子
Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new FillLayout()); final TabFolder tabFolder = new TabFolder(shell, SWT.BORDER|SWT.BOTTOM); for (int i = 0; i < 6; i++) { TabItem item = new TabItem(tabFolder, SWT.NONE); item.setText("TabItem " + i); Button button = new Button(tabFolder, SWT.PUSH); button.setText("Page " + i); item.setControl(button); } shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose();
效果图:
CTabFolder简单例子:
import java.util.ArrayList; import org.eclipse.jface.dialogs.PopupDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabFolder2Listener; import org.eclipse.swt.custom.CTabFolderEvent; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Widget; public class TestCTabFolder { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new FillLayout()); final CTabFolder tabFolder = new CTabFolder(shell, SWT.BORDER|SWT.BOTTOM|SWT.FLAT); for (int i = 0; i < 20; i++) { CTabItem item = new CTabItem(tabFolder, SWT.Close); item.setText("CTabItem " + i); Button button = new Button(tabFolder, SWT.PUSH); button.setText("Page " + i); item.setControl(button); } tabFolder.addCTabFolder2Listener(new CTabFolder2Listener() { @Override public void showList(CTabFolderEvent event) { // TODO Auto-generated method stub int x = event.x; int y = event.y +event.height; Point location = tabFolder.getDisplay().map(tabFolder, null, x, y); TestPopupDialog dialog=new TestPopupDialog(tabFolder.getShell(), tabFolder, location.x, location.y); dialog.open(); event.doit=false; } @Override public void restore(CTabFolderEvent event) { // TODO Auto-generated method stub } @Override public void minimize(CTabFolderEvent event) { // TODO Auto-generated method stub } @Override public void maximize(CTabFolderEvent event) { // TODO Auto-generated method stub } @Override public void close(CTabFolderEvent event) { // TODO Auto-generated method stub } }); shell.setSize(400, 300); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } static public class TestPopupDialog extends PopupDialog { Text text; CTabFolder tabFolder; Font boldF; int x; int y; TableViewer tableViewer; ActionContentProvider actionContentProvider; public TestPopupDialog(Shell parent,CTabFolder tabFolder,int x,int y){ super(parent, SWT.NO_TRIM, true, false, false, false, false, null, null); this.tabFolder=tabFolder; this.x=x; this.y=y; } @Override protected Control createDialogArea(Composite parent) { // TODO Auto-generated method stub final Composite composite = (Composite) super.createDialogArea(parent); text=new Text(composite,SWT.NONE); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(text); Label comseparator = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(comseparator); tableViewer=new TableViewer(composite,SWT.SINGLE|SWT.FULL_SELECTION); int itemH=tableViewer.getTable().getItemHeight(); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).hint(-1,itemH*15).grab(true, false).applyTo(tableViewer.getTable()); // TableColumn col=new TableColumn(tableViewer.getTable(), SWT.NONE); // col.setText("djh"); FontData fd= Display.getCurrent().getSystemFont().getFontData()[0]; fd.setStyle(SWT.BOLD);; boldF=new Font(null,fd); actionContentProvider=new ActionContentProvider(""); tableViewer.setContentProvider(actionContentProvider); tableViewer.setLabelProvider(new ActionLabelProvider()); tableViewer.setInput(tabFolder); tableViewer.setSelection(new StructuredSelection(tabFolder.getSelection())); tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { // TODO Auto-generated method stub ISelection selection=event.getSelection(); if(selection!=null&&!selection.isEmpty()){ StructuredSelection ss=(StructuredSelection) selection; tabFolder.setMRUVisible(false); tabFolder.setSelection((CTabItem) ss.getFirstElement()); Listener[] listeners=tabFolder.getListeners(SWT.Selection); for(Listener l:listeners){ Event e=new Event(); e.item=(Widget) ss.getFirstElement(); e.type=SWT.Selection; e.widget=tabFolder; l.handleEvent(e); //e.widget=tabFolder; } close(); } } }); text.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { // TODO Auto-generated method stub actionContentProvider.setText(text.getText()); tableViewer.refresh(); } }); return composite; } class ActionContentProvider implements IStructuredContentProvider{ String text; ActionContentProvider(String text){ this.text=text; } public void setText(String text) { this.text = text; } @Override public void dispose() { // TODO Auto-generated method stub } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } @Override public Object[] getElements(Object inputElement) { // TODO Auto-generated method stub if(inputElement instanceof CTabFolder){ CTabFolder tabFolder=(CTabFolder) inputElement; ArrayList<CTabItem> items=new ArrayList<CTabItem>(); if(text.equals("")){ return tabFolder.getItems(); } for(CTabItem item:tabFolder.getItems()){ if(item.getText().startsWith(text)){ items.add(item); } } return items.toArray(new CTabItem[]{}); } return new Object[]{}; } } class ActionLabelProvider extends StyledCellLabelProvider{ @Override public void update(ViewerCell cell) { // TODO Auto-generated method stub CTabItem tabItem=(CTabItem) cell.getElement(); //CTabFolder tabFolder=tabItem.getParent(); if(cell.getColumnIndex()==0){ if(tabItem.isShowing()){ }else{ cell.setFont(boldF); } cell.setText(tabItem.getText()); } super.update(cell); } } @Override protected void adjustBounds() { // TODO Auto-generated method stub // Point size=getShell().getSize(); // if(size.y>600){ // getShell().setSize(size.x, 600); // } getShell().setLocation(x, y); } @Override public boolean close() { // TODO Auto-generated method stub //return false; boolean flag= super.close(); if(flag){ boldF.dispose(); } return flag; } } }
效果图:
谢谢大家
相关推荐
"SWT高级密笈源码"很可能是针对SWT库深入理解和实践的代码示例集合,旨在帮助开发者掌握SWT的高级用法。 本资源包含的"Sample Code"可能是各种基于SWT的实例代码,这些代码涵盖了SWT的各种组件、布局管理、事件处理...
JFace包含了一些高级控件和数据绑定机制,例如对话框、表单、视图管理器等,这些都帮助开发者快速创建用户界面。 ### SWT和JFace的结合使用 在实际开发中,开发者通常会结合SWT和JFace。SWT用于创建底层的控件和...
高级控件使用 高级控件使用 高级控件使用 高级控件使用高级控件使用 高级控件使用 高级控件使用
在实际开发中,SWT和JFace通常一起使用,SWT提供底层的控件和事件处理,而JFace则提供了更高级的抽象和工具,简化了开发过程。例如,通过JFace的DataBinding机制,开发者可以轻松地实现模型与视图之间的数据同步。 ...
全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace框架的知识及其...
Eclipse中的`SWT`控件和`JFace`(SWT的高级抽象层)共同构建了强大的用户界面,使得开发者可以方便地创建复杂的工作流和工具视图。 ### 示例代码:Lists.java 在`Lists.java`中,可能包含了使用SWT创建列表控件的...
全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace 框架的知识及其...
在SWT中,布局(Layout)扮演着至关重要的角色,它负责控制控件的排列方式和大小,确保界面在不同屏幕尺寸和分辨率下都能有良好的显示效果。 布局管理器主要有以下几种: 1. **FillLayout**:填充布局是最简单的...
全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace框架的知识及其...
全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace 框架的知识及其...
全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace 框架的知识及其...
全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace框架的知识及其...
SWT(Standard Widget Toolkit)是Eclipse平台下的图形界面开发工具包,而JFace则是基于SWT之上的高级用户界面工具集。SWT提供了低级别的组件,用于创建跨平台的图形用户界面;而JFace则在此基础上提供了更高级别的...
1. SWT控件:包括Button、Text、Table、Tree、Composite等基本和复杂的控件,以及如何使用它们构建用户界面。 2. JFace数据绑定:讲解如何使用IDataProvider和IStructuredModel来实现视图和数据之间的动态同步。 3. ...
【标题】"swt-api swt DOC" 指的是一个关于SWT(Standard Widget Toolkit)API的...通过深入研究这个文档,开发者不仅可以掌握SWT的基本用法,还能了解到高级特性和优化技巧,从而提升其在Java GUI编程领域的专业能力。
9. **高级主题**:包括线程同步、自定义控件的测试、性能测试等方面,适合进阶学习者。 在深入学习和使用SWTBOT的过程中,不断实践和调试是至关重要的。通过《SWTBOT Tutorial》这样的资源,开发者能够逐步掌握这个...
"SWT开发参考文档.pdf"是一份详细的SWT指南,涵盖了从基本组件如按钮、文本框到高级控件如表格、树视图等的所有内容。你将学习如何创建窗口、布局管理器的使用,以及如何处理事件。此外,文档还介绍了JFace和Eclipse...
本篇文章将深入探讨SWT中的一些高级控件,这些控件对于开发者来说具有非常高的实用价值。我们将重点介绍表格(Table)这一组件,包括其创建、样式设置、列定义及项添加等方面。 #### 表格(Table) 表格在SWT中是...
`JFace`标签暗示了这个压缩包可能也包含了JFace库,JFace是基于SWT构建的,提供了如对话框、表视图、树视图等高级控件,以及数据绑定和事件处理机制,让开发者能够更专注于业务逻辑而不是底层GUI的实现。 `....
全书共分5篇,第1篇介绍了SWT产生的背景以及SWT的一些基本概念和基础知识。第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace 框架的知识及其...