Imtoken下载地址|swt
SWT: The Standard Widget Toolkit | The Eclipse Foundation
SWT: The Standard Widget Toolkit | The Eclipse Foundation
Skip to main content
Log in
Manage Cookies
Sponsor
EclipsePlatformSWTAbout Community MarketplaceEventsPlanet EclipseNewsletterVideosBlogsParticipate Report a BugForumsMailing ListsWikiIRCResearchEclipse IDE DownloadLearn MoreDocumentationGetting Started / SupportHow to ContributeIDE and ToolsNewcomer Forum
More
CommunityMarketplaceEventsPlanet EclipseNewsletterVideosBlogsParticipateReport a BugForumsMailing ListsWikiIRCResearchEclipse IDEDownloadLearn MoreDocumentationGetting Started / SupportHow to ContributeIDE and ToolsNewcomer Forum
Search
Toggle navigation
Breadcrumbs
HomeProjectsswt
SWT: The Standard Widget Toolkit
SWT is an open source widget toolkit for Java designed to provide efficient,
portable access to the user-interface facilities of the operating systems
on which it is implemented.
Welcome
Welcome to SWT! You may have come to this page looking for snippets (little code examples)
or examples (big code examples like ControlExample);
widget snapshots
or documentation.
Or maybe you want to request a feature,
report a bug,
or ask a question.
Whatever the reason, you will find many resources here. Enjoy!
Downloads
Latest Release
Download page
For links to latest released version of the SWT Binary and Source for all platforms, select the entry for the latest official release and then click on SWT Binary and Source from the menu on the left.
Stable Builds
Download page
For links to stable milestone builds of the SWT Binary and Source for all platforms, select the entry for the latest milestone build and then click on SWT Binary and Source from the menu on the left.
Integration Builds
Download page
For links to daily Integration builds of SWT Binary and Source for all platforms, select a current integration build
(select entry starting with I in the Integration builds) and then click on SWT Binary and Source from the menu on the left.
Maven Artifacts
SWT fragments for all the supported platforms are published to Maven Central for every release. The table below contains the links to the artifacts.
Windows
Mac/Cocoa
Linux/GTK (x86 64-bit)
Linux/GTK (ppcle 64-bit)
How to contribute
How to contribute a feature or bug fix to SWT
How to get the SWT source code via Git
How to setup SWT Windows native build environment
Articles
How to develop SWT applications in Eclipse
How to run the ControlExample and other SWT examples
How to deploy SWT applications on Mac OS X
How to generate the SWT JNI Code
How to generate the SWT JNI Code for Cocoa
Using OpenGL in SWT Applications
Many more articles about SWT on Eclipse Corner at eclipse.org
Full list of articles and documentation
Resources
SWT wiki
Widget screenshots with links to documentation
Snippets, helpful little code examples
Examples, helpful big code examples
The SWT FAQ answers many common questions
Tools and Plug-ins for SWT developers
Online Javadoc
Books and additional documentation
Test Plan for SWT
SWT Community Page
SWTBot, UI/functional testing tool for SWT and Eclipse based applications.
Eclipse/SWT Accessibility wiki
Contact Us
SWT development is discussed and tracked in the
Eclipse bugzilla under the
Platform/SWT component. You can subscribe to the new bug inbox by
watching platform-swt-inbox@eclipse.org from your
bugzilla email preferences.
If you are modifying or porting SWT and have questions, try the
SWT developer mailing list
[archive,
search].
SWT Home
Widgets
Snippets
Examples
FAQ
Tools
Javadoc
Documentation
Community
Bugs
Contact Us
Back to the top
Eclipse Foundation
About UsContact UsSponsorMembersGovernanceCode of ConductLogo and ArtworkBoard of DirectorsCareers
Legal
Privacy PolicyTerms of UseComplianceEclipse Public LicenseLegal Resources
Useful Links
Report a BugDocumentationHow to ContributeMailing ListsForumsMarketplace
Other
IDE and ToolsProjectsWorking GroupsResearch@EclipseReport a VulnerabilityService Status
Copyright © Eclipse Foundation AISBL. All Rights Reserved.
Back to the top
【转帖】Java图形界面开发:SWT全接触-CSDN博客
>【转帖】Java图形界面开发:SWT全接触-CSDN博客
【转帖】Java图形界面开发:SWT全接触
最新推荐文章于 2024-01-26 13:17:00 发布
msdnchina
最新推荐文章于 2024-01-26 13:17:00 发布
阅读量1.6w
收藏
20
点赞数
2
分类专栏:
JAVA
文章标签:
java
swt
JAVA
专栏收录该内容
8 篇文章
0 订阅
订阅专栏
本文转自:https://www.xuebuyuan.com/1457795.html
从Java诞生至今,已经在太多的领域取得成功,然而它却很少在图形界面程序上崭露头角。究其原因,Java语言缺省的图形界面开发包AWT和SWING实在是难脱其究,无论速度和外观,它们都难以让人接受。如今,Eclipse组织编写的SWT开发包,为Java程序员提供了AWT和SWING之外的一个更佳的选择。在本文中,对SWT做了简单但尽可能全面的介绍。
Java语言的声望和它在桌面应用程序(GUI程序)所取得的成就显然极不相符,至今仍然很少能看到非常成功Java桌面程序。虽然有JBuilder,Netbean,JProbe等大型软件作为代表,但这仍不能证明Java的GUI程序是成功的:它们的外观总是和同一操作系统平台下的其它软件显得格格不入。对机器配置的需求也似乎永无止境,这使得它们只能被一些总是拥有当前最高性能PC的程序员们所容忍,或是那些不在乎金钱和时间的专业用户所接受。对绝大多数计算机使用者来说,AWT或SWING代表着怪异的界面和无法接受的速度。Standard Widget Toolkit(SWT)或许是Java这一噩梦的终结者,广大Java程序员终于可以开发出高效率的GUI程序,它们拥有标准的外观,几乎没有人能看出你的程序是用Java写出来的,更为重要的是,这些程序是跨平台的。
SWT本身仅仅是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面API。或许是无心插柳,或是有意为之,至今为止,SWT无论是在性能和外观上,都超越了SUN公司提供的AWT和SWING。目前Eclipse IDE已经开发到了2.1版本,SWT已经十分稳定。这里指的稳定应该包含两层意思:
一是指性能上的稳定,其中的关键是源于SWT的设计理念。SWT最大化了操作系统的图形构件API,就是说只要操作系统提供了相应图形的构件,那么SWT只是简单应用JNI技术调用它们,只有那些操作系统中不提供的构件,SWT才自己去做一个模拟的实现。可以看出SWT性能上的稳定大多时候取决于相应操作系统图形构件的稳定性。
另一个稳定是指SWT API包中的类、方法的名称和结构已经少有改变,程序员不用担心由于Eclipse组织开发进度很快(Eclipse IDE每天都会有一个Nightly版本的发布),而导致自己的程序代码变化过大。从一个版本的SWT更新至另一版本,通常只需要简单将SWT包换掉就可以了。
第一个SWT程序
下面让我们开始一个SWT程序。(注意:以下的例子和说明主要针对Windows平台,其它的操作系统应该大同小异)。首先要在Eclipse安装文件中找到SWT包,Eclipse组织并不提供单独的SWT包下载,必须下载完整的Eclipse开发环境才能得到SWT包。SWT是作为Eclipse开发环境的一个插件形式存在,可以在${你的eclipse安装路径}/plugins路径下的众多子目录下去搜索SWT.JAR文件,在找到的JAR文件中包含了SWT全部的Java类文件。因为SWT应用了JNI技术,因此同时也要找到相对应的JNI本地化库文件,由于版本和操作平台的不同,本地化库文件的名称会有些差别,比如SWT-WIN32-2116.DLL是Window平台下Eclipse Build 2116的动态库,而在Unix平台相应版本的库文件的扩展名应该是.so,等等。注意的是,Eclipse是一个开放源代码的项目,因此你也可以在这些目录中找到SWT的源代码,相信这会对开发很有帮助。
下面是一段打开空窗口的代码(只有main方法)。
import com.e2one.example;
public class OpenShell{
public static void main(String [] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
// 开始事件处理循环,直到用户关闭窗口
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
确信在CLASSPATH中包括了SWT.JAR文件,先用Javac编译例子程序。编译无错后可运行java -Djava.library.path=${你的SWT本地库文件所在路径} com.e2one.example.OpenShell,比如SWT-WIN32-2116.DLL件所在的路径是C:/swtlib,运行的命令应该是java -Djava.library.path=c:/swtlib com.e2one.example.OpenShell。成功运行后,系统会打开了一个空的窗口。
剖析SWT API
下面再让我们进一步分析SWT API的组成。所有的SWT类都用org.eclipse.swt做为包的前缀,下面为了简化说明,我们用*号代表前缀org.eclipse.swt,比如*.widgets包,代表的是org.eclipse.swt.widgets包。
我们最常用的图形构件基本都被包括在*.widgets包中,比如Button,Combo,Text,Label,Sash,Table等等。其中两个最重要的构件当数Shell和Composite。Shell相当于应用程序的主窗口框架,上面的例子代码中就是应用Shell构件打开一个空窗口。Composite相当于SWING中的Panel对象,充当着构件容器的角色,当我们想在一个窗口中加入一些构件时,最好到使用Composite作为其它构件的容器,然后再去*.layout包找出一种合适的布局方式。SWT对构件的布局也采用了SWING或AWT中Layout和Layout Data结合的方式,在*.layout包中可以找到四种Layout和与它们相对应的布局结构对象(Layout Data)。在*.custom包中,包含了对一些基本图形构件的扩展,比如其中的CLabel,就是对标准Label构件的扩展,上面可以同时加入文字和图片,也可以加边框。StyledText是Text构件的扩展,它提供了丰富的文本功能,比如对某段文字的背景色、前景色或字体的设置。在*.custom包中也可找到一个新的StackLayout布局方式。
SWT对用户操作的响应,比如鼠标或键盘事件,也是采用了AWT和SWING中的Observer模式,在*.event包中可以找到事件监听的Listener接口和相应的事件对象,例如常用的鼠标事件监听接口MouseListener,MouseMoveListener和MouseTrackListener,及对应的事件对象MouseEvent。
*.graphics包中可以找到针对图片、光标、字体或绘图的API。比如可通过Image类调用系统中不同类型的图片文件。通过GC类实现对图片、构件或显示器的绘图功能。
对不同平台,Eclipse还开发了一些富有针对性的API。例如,在Windows平台,可以通过*.ole.win32包很容易的调用ole控件,这使Java程序内嵌IE浏览器或Word、Excel等程序成为可能!
要进一步了解SWT的情况,可以在Eclipse IDE的帮助文档中找到SWT的JavaDoc说明。当然最深入的了解莫过于去读SWT的源代码,这也正是开放源代码项目对程序员的魅力所在!
更复杂的程序
下面让我们展示一个比上面例子更加复杂一些的程序。这个程序拥有一个文本框和一个按键,当用户点击按键的时候,文本框显示一句欢迎信息。
为了文本框和按键有比较合理的大小和布局,这里采用了GradLayout布局方式。这种布局是SWT中最常用也是最强大的布局方式,几乎所有的格式都可能通过GradLayout去达到。下面的程序也涉及到了如何应用系统资源(Color),以及如何释放系统资源。
private void initShell(Shell shell) {
//为Shell设置布局对象
GridLayout gShellLay = new GridLayout();
shell.setLayout(gShellLay);
//构造一个Composite构件作为文本框和按键的容器
Composite panel = new Composite(shell,SWT.NONE);
//为Panel指定一个布局结构对象。这里让Panel尽可能的占满Shell,也就是全部应用程序窗口的空间。
GridData gPanelData = new
GridData(GridData.GRAB_HORIZONTAL|GridData.GRAB_VERTICAL|GridData.FILL_BOTH);
panel.setLayoutData(gPanelData);
//为Panel也设置一个布局对象。文本框和按键将按这个布局对象来显示。
GridLayout gPanelLay = new GridLayout();
panel.setLayout(gPanelLay);
//为Panel生成一个背景色
final Color bkColor = new Color(Display.getCurrent(),200,0,200);
panel.setBackground(bkColor);
//生成文本框
final Text text = new Text(panel,SWT.MULTI|SWT.WRAP);
//为文本框指定一个布局结构对象,这里让文本框尽可能的占满Panel的空间。
GridData gTextData = new
GridData(GridData.GRAB_HORIZONTAL|GridData.GRAB_VERTICAL|GridData.FILL_BOTH);
text.setLayoutData(gTextData);
//生成按键
Button butt = new Button(panel,SWT.PUSH);
butt.setText("Push");
//为按键指定鼠标事件
butt.addMouseListener(new MouseAdapter(){
public void mouseDown(MouseEvent e){
//当用户点击按键的时候,显示信息
text.setText("Hello SWT");
}
});
//当主窗口关闭时,会触发DisposeListener。这里用来释放Panel的背景色。
shell.addDisposeListener(new DisposeListener(){
public void widgetDisposed(DisposeEvent e) {
bkColor.dispose();
}
});
}
把这段代码中的方法initShell()加入到第一个打开空窗口的例子中,得到的是一段能成功运行的完整GUI应用程序。运行方法可参考第一个例子。
系统资源的管理
在一个图形化的操作系统中开发程序,都要调用系统中的资源,如图片、字体、颜色等。通常这些资源都是有限的,程序员务必非常小心的使用这些资源:当不再使用它们时,就请尽快释放,不然操作系统迟早会油尽灯枯,不得不重新启动,更严重的会导致系统崩溃。
SWT是用Java开发的,Java语言本身的一大优势就是JVM的“垃圾回收机制”,程序员通常不用理会变量的释放,内存的回收等问题。那么对SWT而言,系统资源的操作是不是也是如此?答案是一个坏消息,一个好消息。
坏消息是SWT并没采用JVM的垃圾回收机制去处理操作系统的资源回收问题,一个关键的因素是因为JVM的垃圾回收机制是不可控的,也就是说程序员不能知道,也不可能做到在某一时刻让JVM回收资源!这对系统资源的处理是致命的,试想你的程序希望在一个循环语句中去查看数万张图片,常规的处理方式是每次调入一张,查看,然后就立即释放该图片资源,而后在循环调入下一张图片,这对操作系统而言,任何时刻程序占用的仅仅是一张图片的资源。但如果这个过程完全交给JVM去处理,也许会是在循环语句结束后,JVM才会去释放图片资源,其结果可能是你的程序还没有运行结束,操作系统已经宕掉。
但下面的好消息也许会让这个坏消息变得无关紧要。对于SWT,只需了解两条简单的“黄金”法则就可以放心的使用系统资源!之所以称为黄金法则,一是因为少,只有两条,二是因为它们出奇的简单。第一条是“谁占用,谁释放”,第二条是“父构件被销毁,子构件也同时被销毁”。第一条原则是一个无任何例外的原则,只要程序调用了系统资源类的构造函数,程序就应该关心在某一时刻要释放这个系统资源。比如调用了
Font font = new Font (display, "Courier", 10, SWT.NORMAL);
那么就应该在不在需要这个Font的时候调用
font.dispose();
对于第二个原则,是指如果程序调用某一构件的dispose()方法,那么所有这个构件的子构件也会被自动调用dispose()方法而销毁。通常这里指的子构件与父构件的关系是在调用构件的构造函数时形成的。比如,
Shell shell = new Shell();
Composite parent = new Composite(shell,SWT.NULL);
Composite child = new Composite(parent,SWT.NULL);
其中parent的父构件是shell,而shell则是程序的主窗口,所以没有相应的父构件,同时parent又包括了child子构件。如果调用shell.dispose()方法,应用第二条法则,那么parent和child构件的dispose()方法也会被SWT API自动调用,它们也随之销毁。
对于这两个法则,参考资料2中的文章有更加深入的介绍。
线程问题
在任何操作平台的GUI系统中,对构件或一些图形API的访问操作都要被严格同步并串行化。例如,在一个图形界面中的按键构件可被设成可用状态(enable)或禁用状态(disable),正常的处理方式是,用户对按键状态设置操作都要被放入到GUI系统的事件处理队列中(这意味着访问操作被串行化),然后依次处理(这意味着访问操作被同步)。想象当按键可用状态的设置函数还没有执行结束的时候,程序就希望再设置该按键为禁用状态,势必会引起冲突。实际上,这种操作在任何GUI系统都会触发异常。
Java语言本身就提供了多线程机制,这种机制对GUI编程来说是不利的,它不能保证图形构件操作的同步与串行化。SWT采用了一种简单而直接的方式去适应本地GUI系统对线程的要求:在SWT中,通常存在一个被称为"用户线程"的唯一线程,只有在这个线程中才能调用对构件或某些图形API的访问操作。如果在非用户线程中程序直接调用这些访问操作,那么SWTExcepiton异常会被抛出。但是SWT也在*.widget.Display类中提供了两个方法可以间接的在非用户线程的进行图形构件的访问操作,这是通过的syncExec(Runnable)和asyncExec(Runnable)这两个方法去实现的。例如:
//此时程序运行在一个非用户线程中,并且希望在构件panel上加入一个按键。
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
Button butt = new Button(panel,SWT.PUSH);
butt.setText("Push");
}
});
方法syncExec()和asyncExec()的区别在于前者要在指定的线程执行结束后才返回,而后者则无论指定的线程是否执行都会立即返回到当前线程。
SWT的扩展:JFace
JFace与SWT的关系好比Microsoft的MFC与SDK的关系,JFace是基于SWT开发,其API比SWT更加易于使用,但功能却没SWT来的直接。比如下面的代码应用JFace中的MessageDialog打开一个警告对话框:
MessageDialog.openWarning(parent,"Warning","Warning message");
如果只用SWT完成以上功能,语句不会少于30行!
JFace原本是为更加方便的使用SWT而编写的一组API,其主要目的是为了开发Eclipse IDE环境,而不是为了应用到其它的独立应用程序。因此在Eclipse 2.1版本之前,很难将JFace API完整的从Eclipse的内核API中剥离出来,总是要多多少少导入一些非JFace以外的Eclipse核心代码类或接口才能得到一个没有任何编译错误的JFace开发包。但目前Eclipse组织似乎已经逐渐意识到了JFace在开发独立应用程序起到的重要作用,在正在开发的2.1版本中,JFace也开始变成了和SWT一样的完整独立的开发包,只是这个开发包还在变动中(笔者写本文时,应用的Eclipse2.1M3版本)。JFace开发包的包前缀是以org.eclipse.jface开头。JAR包和源代码也和SWT一样,也在${你的eclipse安装路径}/plugins路径下去找。
对开发人员来说,在开发一个图形构件的时候,比较好的方式是先到JFace包去找一找,看是不是有更简洁的实现方法,如果没有再用SWT包去自己实现。比如JFace为对话框提供了很好的支持,除了各种类型的对话框(比如上面用的MessageDialog,或是带有Title栏的对话框),如要实现一个自定义的对话框也最好从JFace中的Dialog类继承,而不是从SWT中的*.widget.Dialog继承。
应用JFace中的Preference包中的类很容易为自己的软件做出一个很专业的配置对话框。对于Tree、Table等图形构件,它们在显示的同时也要和数据关联,例如Table中显示的数据,在JFace中的View包中为此类构件提供了Model-View方式的编程方法,这种方法使显示与数据分开,更加利于开发与维护。JFace中提供最多的功能就是对文本内容的处理。可以在org.eclipse.jface.text.*包中找到数十个与文本处理相关类。
与应用程序更近一步
Java程序通常是以class文件的方式发布的,运行class需要JRE或JDK的支持。这又是Java GUI程序的另一个致命的弱点,想象对一个面向广大用户的应用程序来说,无论你的程序功能有多简单,或是你的代码十分的精简,你都不得不让用户去下载一个7、8M的JRE,那是多么令人沮丧的一件事。而且对程序员来说,Class通常意味着源代码的暴露,反编译的工具让那些居心叵测的人轻易得到你的源代码。虽然有很多对Class的加密方法,但那总是以牺牲性能为代价的。好在我们还有其它的方式可用:把Class编译成exe文件!
参考资料3提供了应用GCJ将SWT编译成exe文件的详细方法。作为对那篇文章的补充,就是目前也可以通过下载Cygwin得到Windows下的GCJ。 Excelsior也是笔者曾经用过的一款很好的编译器,唯一的遗憾就是它的价格!
通过SWT开发包,简单、跨平台、可靠等这些Java语言本身所具有的优点正渐渐融合到图形界面的应用程序开发中去。因此,我相信Java语言的另一扇成功之门正在逐渐打开。
参考资料:
http://www.e2one.com 极一软件工作室应用SWT&JFace API开发出的企业实时通讯IM软件,是SWT&JFace开发Standalone程序的范例。
http://www.eclipse.org/articles/swt-design-2/swt-design-2.html 这篇文章中详细论述了SWT开发者应该如何管理系统资源。
http://www-900.ibm.com/developerWorks/cn/linux/guitoolkit/j-nativegui/index.shtml 描述了如何将SWT程序应用GCJ编译成本机应用程序文件。
http://www-900.ibm.com/developerWorks/cn/java/l-eclipse/index.shtml 介绍了Eclipse的使用及简单的插件开发过程。
www.eclipse.org 所有的关于Eclipse, SWT, JFace的问题都可以在这里找到答案。也是下载Eclipse开发环境的网站。
http://www.cygwin.com/ 可以得得到Windows版本的GCJ。
关于作者
倪大鹏,有多年的软件开发经验,其中近四年的时间集中在Java相关技术的研究。可以通过e-mail: ndp@e2one.com与他联系。
『引自 IBM DW中国』
优惠劵
msdnchina
关注
关注
2
点赞
踩
20
收藏
觉得还不错?
一键收藏
知道了
0
评论
【转帖】Java图形界面开发:SWT全接触
本文转自:https://www.xuebuyuan.com/1457795.html从Java诞生至今,已经在太多的领域取得成功,然而它却很少在图形界面程序上崭露头角。究其原因,Java语言缺省的图形界面开发包AWT和SWING实在是难脱其究,无论速度和外观,它们都难以让人接受。如今,Eclipse组织编写的SWT开发包,为Java程序员提供了AWT和SWING之外的一个更佳的选择。在本文中...
复制链接
扫一扫
专栏目录
Java SWT 图形用户界面教程 PDF
07-22
Java SWT 图形用户界面教程 PDF
Java SWT 图形用户界面教程 PDF
Java图形化界面编程超详细知识点(5)——Swing编程
m0_66908465的博客
04-05
9071
本篇文章主要介绍Java图形化界面编程中Swing类库的详细知识点总结,方便大家在图形化界面编程时快速找到自己所需要的方法,希望对大家完成课设有所帮助。
参与评论
您还未登录,请先
登录
后发表或查看评论
JAVA SWT table界面+数据(多图)
华容道的博客
03-01
1万+
界面
1.布局
选用两个composite,
设置shell的Layout为FillLayout;
设置Layout-Type(布局类型)为垂直分布;
设置右滑块,下滑块;
2.添加table组件
上面的composite添加的是CheckboxTableViewer,下面的是普通的Table;
同样需要设置两个composite的Layout属性为Fill...
JavaGUI开发之SWT框架【Shell】
最新发布
qq_62835094的博客
01-26
969
在SWT框架中,shell组件可以理解为窗口shell的创建需要指定Display()组件,因此shell的创建一般使用的都是如下代码Display组件,负责连接OS操作系统,同时负责管理GUI 组件。Display在SWT框架中有着举足轻重的作用,但一般开发过程中,没怎么调用过display的api,因此本文不会详细介绍Display,感兴趣的读者可以自行查看文档。Shell组件的处境也和Display差不多。本文主要介绍Shell的创建方式,以及不同的创建方式得到的不同样式。
Eclipse的SWT Designer下载地址及安装方法(详细教程)
热门推荐
catfishlyf的博客
12-21
1万+
初次接触SWT工程,打算用这个编写一个记事本。跟着我一步步从无到有建立SWT工程吧!
Java界面 SWT基本组件——文本框(Text)
海上机械师
03-10
1万+
SWT 中文本框(Text)的基本类型与基础应用
文本框是常见的控件之一,是可以输入文字的控件。
文本框有单行文本框()和多行文本框()两种,包含可编辑的文本框与只读的文本框
本次试验通过一个小程序来说明一个文本框常用的方法。该程序类似编辑器的功能,具有对文本进行全选、使用剪贴板功能的复制和粘贴功能、
代码如下:
shell.setSize(350, 283);
shell.setTex
“ODM OEM OBM的区别”网址汇总
yuuu_cheer的博客
02-19
2638
http://www.360doc.com/content/16/1111/19/37747301_605709484.shtml
https://blog.csdn.net/zhongbeida_xue/article/details/102591658
SWT的介绍(配置,打包步骤)
无若
07-27
3844
SWT的介绍(附加:Eclicpse3.1.1下配置SWT,打包发布SWT程序,转EXE一条龙过程记录) 一、SWT的介绍 (使用SWT在各个操作系统上的效果) SWT(Standard Widget Toolkit) Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SW
Eclipse下搭建SWT与Swing图形界面开发环境
深之JohnChen的专栏
07-29
1万+
Eclipse SWT Swing 图形界面开发
Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
远方
09-27
2815
MineHe原创看了一下对Java GUI讨论的帖子,所以写了一篇文章来阐述一下各种GUI技术的优劣。Java世界中,目前最知名的三大GUI库分别是:1、AWT(Abstract Window Toolkit)抽象窗口工具包库,包含于所有的Java SDK中2、Swing高级图形库,包含于Java2 SDK中3、来自IBM Eclipse开源项目的SWT(Standard Widget Toolk
JavaGUI——Swing组件基础
weixin_46235428的博客
12-03
851
文章目录一、面板组件二、文本框密码框标签组件三、单选框和复选框四、下拉框列表框滚动窗格组件五、多行文本框组件六、菜单栏组件七、流式布局八、网格布局九、边界布局
一、面板组件
一个界面只可以有一个JFrame顶层容器,但是可以有多个JPanel面板组件,
而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,
这样可以组合使用达到较为复杂的布局效果。
面板组件可以设置布局模式,实现多模式布局,但默认为流式布局。
面板组件里可以添加其他组件
代码如下(
SWT/JFace(一)——概述
cole丶的博客
03-12
1711
一、SWT
1. 概述
SWT(Standard Widget Toolkit,标准图形工具箱)是一种用java开发的GUI程序的技术。与出自Sun的AWT (Abstract Widget Toolkit,抽象图形工具箱)和Swing不同,SWT是Eclipse的开发人员自行建造的。它无论在界面美观度上还是在性能上都远远超越了AWT和Swing,即使和操作系统上的本地图形界面程序相比也毫不逊色,...
【SWT】创建自己的SWT组件
小子宝丁的博客
08-08
1239
本文为部分译文,交代了两种方法创建SWT小组件
SWT 全接触
hangke的专栏
10-25
1008
Java 世界的人似乎一直都对 Java 的桌面应用程序十分不满,从 AWT 到 SWING,从默认的 Theme到第三方的产品,不是太难看(AWT)就是在某些平台有 BUG(SWING,Quaqua--一个Windows平台下的仿Mac的主题包),再不就是对中文支持不好(某些第三方 LookAndFeel)。于是,如果想要获得和本机平台一致的用户界面和比较稳定的性能,SWT就成
SWT介绍 -jobslong
weixin_30902675的博客
04-05
70
---恢复内容开始---
SWT介绍
说明:为了达到更好的阅读效果,请点击以下链接,我们的dropbox里面下载pdf或者word文件,我们为每一个blog都生成了相关的文件,如果你需要相关的软件也可以在评论留言,我可以上传供大家下载;
https://www.dropbox.com/home用户名:jobslongblogs@gmail.com 密码:com.gmail@jobs...
swing,swt之争(jvm和JNI相对于本地方法和远程方法)
sole_ghost的专栏
04-14
2241
1.正方 SWT优于Swing Java语言的声望和它在桌面应用程序(GUI程序)所取得的成就显然极不相符,至今仍然很少能看到非常成功Java桌面程序。虽然有JBuilder,Netbean,JProbe等大型软件作为代表,但这仍不能证明Java的GUI程序是成功的:它们的外观总是和同一操作系统平台下的其它软件显得格格不入。对机器配置的需求也似乎永无止境,这使得它们只能被一些总是拥有当前最高性能
SWT概述二
longcxm1的博客
01-31
398
SWT技术是第一套基于java的第三方的图形工具库。它的设计思想是提供一套通用的API,使得开发出的图形程序不仅可以不加修改地在平台间移植,而且在外观上和速度上能与使用C/C++等语言在操纵系统平台上开发出来的本地图形程序毫无差别。
当一个布局管理器被安装到窗口上时,它就负责安排窗口中各个控件的位置和尺寸。当窗口尺寸发生变化时,布局管理器会根据一定的策略重新计算这些数据,并将控件...
org.eclipse.swt.win32的64位jar包
05-30
org.eclipse.swt.win32的64位jar包,不是32位的;之前网上下了个32位的,不能用。
[总结]对JFace的一点总结
李上网来 Blog
03-07
2870
最近研究了一下JFace,下面写点总结,备忘。
先简单介绍一下JFace:
基于Java的图形库最主要的有三种,它们分别是AWT、Swing和SWT;它们产生的时间大体如下:
AWT(abstract windowing toolkit,1995年,随JDK一起,SUN公司) --->Swing(JFC, java foundation classes, 1997年,随JDK一起,su
运放参数的详细解释和分析-转帖TI工作人员的资料(doc版)
07-27
在TI论坛看到的帖子,感觉挺好,就整理成word文档了,内容主要是运放datasheet常见参数的解释和分析。TI原帖地址“http://www.deyisupport.com/question_answer/analog/amplifiers/f/52/t/20214.aspx”...感谢原作者。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
msdnchina
CSDN认证博客专家
CSDN认证企业博客
码龄21年
暂无认证
758
原创
1万+
周排名
46万+
总排名
462万+
访问
等级
5万+
积分
384
粉丝
254
获赞
165
评论
880
收藏
私信
关注
热门文章
linux下查看网卡信息的命令
108757
windows下 sqlplus / as sysdba 报ora-12560的终极解决方法
63333
使用netstat查看tcp连接、udp连接
41337
red hat官方的rhel操作系统版本号与内核版本号的对应关系
38746
检查docker版本的两个命令
38145
分类专栏
DPU
1篇
OceanBase
1篇
PostgreSQL数据库
105篇
PG13配置参数
2篇
vagrant
1篇
UOS
1篇
tidb
2篇
龙芯
1篇
19c
1篇
Oracle DB 12c新特性
41篇
Oracle GoldenGate
28篇
MOS文章翻译
86篇
HVR数据复制软件
8篇
InfiniBand相关技术
21篇
Oracle GoldenGate
101篇
OS
30篇
Oracle DB
773篇
DB2
10篇
MS SQL Server
17篇
PostgreSQL
214篇
Windows
117篇
HP-UX
22篇
Linux
295篇
AIX
34篇
Oracle DB 12c
64篇
Solaris
13篇
dtp
1篇
HVR
9篇
RHEL7
434篇
RHEL6
117篇
RHEL5
68篇
OL7
93篇
OL6
48篇
虚拟化
6篇
InfiniBand相关技术
32篇
GreenPlum
docker
20篇
PGXC
2篇
Monitor
1篇
JAVA
8篇
ARM Base
2篇
RHEL8
219篇
python
7篇
Kubernetes
1篇
PostgreSQL 12
2篇
Oracle Linux 8
11篇
最新评论
How to force xfs filesystem to shutdown?
Cat_yy9:
您好,麻烦问下,这问题解决了咩~
windows下 sqlplus / as sysdba 报ora-12560的终极解决方法
whitesails:
sqlplus /@数据库的SID as sysdba 这样可以了
获得Windows主机的主机序列号
laidone:
SerialNumber
Default string??
DIX技术和T10 PI技术
weixin_42995907:
T10 PI格式化可以用哪些软件
一个有用的技术网站
静&慢&远:
进不去了
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
PostgreSQL中的大写列名
2021中国DPU行业发展白皮书
OceanBase的bilibili
2022年1篇
2021年24篇
2020年30篇
2019年515篇
2018年200篇
2017年279篇
2016年297篇
2015年433篇
2014年166篇
2011年27篇
2010年7篇
目录
目录
分类专栏
DPU
1篇
OceanBase
1篇
PostgreSQL数据库
105篇
PG13配置参数
2篇
vagrant
1篇
UOS
1篇
tidb
2篇
龙芯
1篇
19c
1篇
Oracle DB 12c新特性
41篇
Oracle GoldenGate
28篇
MOS文章翻译
86篇
HVR数据复制软件
8篇
InfiniBand相关技术
21篇
Oracle GoldenGate
101篇
OS
30篇
Oracle DB
773篇
DB2
10篇
MS SQL Server
17篇
PostgreSQL
214篇
Windows
117篇
HP-UX
22篇
Linux
295篇
AIX
34篇
Oracle DB 12c
64篇
Solaris
13篇
dtp
1篇
HVR
9篇
RHEL7
434篇
RHEL6
117篇
RHEL5
68篇
OL7
93篇
OL6
48篇
虚拟化
6篇
InfiniBand相关技术
32篇
GreenPlum
docker
20篇
PGXC
2篇
Monitor
1篇
JAVA
8篇
ARM Base
2篇
RHEL8
219篇
python
7篇
Kubernetes
1篇
PostgreSQL 12
2篇
Oracle Linux 8
11篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
swt_百度百科
百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10swt播报讨论上传视频编程框架SWT(Standard Widget Toolkit) 是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的。 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包AWT (Abstract Windowing Toolkit).AWT框架底层使用原生窗口部件(native widgets)构建,只能使用各个平台窗口部件的子集。外文名swt属 性编程框架作 用与AWT/Swing有相似的用处目录1基本介绍2Releases基本介绍播报编辑SWT: The Standard Widget ToolkitSWT是一个开放源码的Java小部件工具包,旨在提供高效、可移植的用户界面设施的访问,在其上实现的操作系统。Releases播报编辑发布内容稳定性Windows, Linux, OS X,more...4.3 Final Release - 5 June 2013发展内容4.4 集成构建对于所有平台的SWT二进制和源代码的链接。选择当前的4.4集成版,然后滚动到页面底部。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000JVM桌面框架的状态:SWT - 知乎
JVM桌面框架的状态:SWT - 知乎切换模式写文章登录/注册JVM桌面框架的状态:SWT君慕贤什么是SWT?SWT源自Eclipse项目,最初是IDE。开发人员为Eclipse建立了一个专用框架,用于在其中构建其图形组件。Swing和SWT的设计差异很大。Swing从头开始用Java实现小部件的绘制。SWT是依赖本地图形对象的精简包装API。这有两个主要好处:窗口小部件看起来是平台固有的。渲染速度更快。SWT APISWT背后有一个指导原则:因为它依赖于本机图形对象,所以每个组件都需要一个“父”对象作为其第一个参数。父对象是绘制子对象的对象。每个SWT组件的构造函数都将父级作为其第一个参数。SWT的乐趣SWT具有一些特性,其中大多数与基于系统库的设计有关。原生依赖性SWT为每个主流操作系统(例如Windows,Mac OSX等)提供JAR。例如,这是笔记本电脑的Maven依赖项:
JAR坐标取决于平台。它们包含JNI绑定形式的必需本机库。仅在运行时需要JAR。SWT事件控制回路Swing提供了一个开箱即用的事件控制循环。SWT并非如此。我们需要将以下代码复制粘贴到我们的每个应用程序中:SWT与操作系统之间的桥梁。创建顶层窗口。显示它。尽管该系统的窗口本机资源尚未释放。处理排队的事件。如果什么也不需要做…什么都不做。释放所有系统本机资源。无参构造函数窗口和对话框Shell在SWT中均表示为实例。顶级窗口不需要父级,因此Shell提供了一个无参数的构造函数。但是由于Shell是图形控件,因此其所有父类也都提供了这样的构造函数。这些构造函数的主体为空,调用它们不会执行任何操作。组件创建顺序在父对象上实例化组件的顺序就是将它们添加到该父对象的布局中的顺序。如果需要将它们分离,则需要发挥创造力, 例如。将对构造函数的调用包装在lambda中。这是一个SWT示例,按此顺序显示标签,文本字段和按钮:造型如上一片段所示,小部件的样式在其实例化期间发生。这些样式SWT以样式位的形式编码在类中:LEAD = 1 << 14LEFT = LEADSINGLE = 1 << 2BORDER = 1 << 11PUSH = 1 << 3等等循环依赖请注意,的构造函数Control采用一个Composite实例,该实例本身是的子类Control。这种循环依赖关系绑定到同一包中。显示表格数据SWT仅关注小部件及其渲染。与Swing和JavaFX相对,它没有数据模型的概念:您需要自己管理数据。对于0-D数据(例如文本字段),甚至对于1D数据(例如列表框),它都可以管理。对于二维数据(即表),这很麻烦。因此,大多数图形框架在组件与其管理的数据之间引入了模型抽象。例如,Swing具有JTable和TableModel。Eclipse提供了JFace库,该库通过SWT API等提供了数据模型抽象。例如,对于表,JFace具有TableViewer类。每个JFace查看器类的核心都包含一个SWT控件。包装在很深的层次上适用:SWTTableColumn被JFace的包装TableColumnViewer。本Viewer类具有丰富的类型层次来处理不同尺寸的数据。IStructuredContentProvider提供多行数据,例如表中的数据。由于API是在泛型之前设计的,因此需要在StructuredViewer级别上进行运行时检查以验证set的类型IContentProvider。此外,StructuredViewer还提供了排序,过滤和“装饰”功能。注意,有一个库可以管理模型和控件之间的双向数据绑定:JFace Data Binding。我找不到兼容的版本。结论不可否认SWT的成功。从使用它开发的软件项目数量中可以看出这一点。SWT提供了完全本地的外观GUI。从好的方面来说,这意味着应用程序具有本机行为。另一方面,与此功能相关的成本:对平台库的依赖,这违反了“一次编译,随处运行”的承诺。由于缺少泛型,因此运行时检查而不是编译时检查。由于上述两个原因,API有时会显得笨拙。原文作者:didiao java原文链接:https://blog.csdn.net/weixin_46699878/article/details/113420613文章来源:CSDN侵删发布于 2021-01-30 14:08JavaswtJava 程序员赞同 1添加评论分享喜欢收藏申请
Java中AWT、Swing与SWT三大GUI技术的原理与效率差异_swt和awt-CSDN博客
>Java中AWT、Swing与SWT三大GUI技术的原理与效率差异_swt和awt-CSDN博客
Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
最新推荐文章于 2024-01-26 12:41:56 发布
光_影
最新推荐文章于 2024-01-26 12:41:56 发布
阅读量2.1w
收藏
26
点赞数
5
看了一下对Java GUI讨论的帖子,所以写了一篇文章来阐述一下各种GUI技术的优劣。 Java世界中,目前最知名的三大GUI库分别是: 1、AWT(Abstract Window Toolkit)抽象窗口工具包库,包含于所有的Java SDK中 2、Swing高级图形库,包含于Java2 SDK中 3、来自IBM Eclipse开源项目的SWT(Standard Widget Toolkit)标准窗口部件库,不包含于JDK中,需要从Eclipse单独下载一、AWT的原理:小巧却简陋的GUI系统 AWT出现于Java 1.x中,是Java初期所内置的一种面向窗口应用的库。AWT使用的技术是对等设计模式(即Peer),其结构关系参见下图。 从这幅类关系图很容易看出AWT的技术实现和Peer设计模式。图中,黄色的类是java.awt包中的类,浅灰色部分是Java虚拟机部分,而深灰色则是Windows平台。 awt的重点是对等Peer设计模式。所谓Peer对等设计模式就是将awt控件直接对应到运行平台上的一个类似或者等同控件上。比如图中的Button类就是对应了深灰色的Windows的标准Button功能。 对等模式用于在两个控件间之间建立一个相互作用的联系,而充当纽带的则是Java虚拟机和虚拟机-GDI的接口(以Windows为例子)。所以,我们可以看出,awt首先需要经过通用的Java技术来控制图形、事件等,然后Java虚拟机再将请求传送到具体的平台图形和控件接口去交互。 对等模式的效率并不很高,因为AWT通过了虚拟机和虚拟机-GDI这两个层次来完成一个操作,经过的层次系统越多,速度和效率就越慢。而且Peer对等模式有一个致命的弱点:移植性非常差! 这就是Sun为什么要用Swing来诱惑我们离开AWT的主要原因。因为既然是对等模式,那么AWT就必须使用所有图形操作系统的图形接口功能的交集,因为 AWT的接口只有一套,所以,为了保证移植性,就只能使用所有系统都能够支持的最少特性。因而我们经常可以听见有人抱怨AWT的功能太少,图形太难看等等,这是为了保证移植性而作出的牺牲。二、猛犸巨兽的诞生-Swing 从Java2 即Java 1.2版本开始,Sun开始在JDK中提供一套新的图形界面接口系统-Swing。所有Java爱好者都投入了对Swing的研究和迷恋。随着一大批使用Swing作为界面技术的IDE和程序出现,很快大家都意识到Swing的问题所在。 一些人认为Swing是轻量级的GUI系统,无论官方如何说,没有一个Java程序员会认为Swing是轻量级的,相反,Swing是一个非常巨大的GUI库,这一点已经是Java界的共识。 Swing的一些底层类是借用了AWT的Component、Container、Window等少数几个基础类。估计的原因是为了保持与AWT的兼容,方便大家将代码移植到Swing上。 下面是Swing的类关系图: 菊黄色类为Swing包的类。对比一下Swing的图与AWT的图,我们可以发现,Swing图中,awt体系中的深灰色Windows控件类已经被去掉了。因为Swing不再沿用Peer对等模式来实现GUI界面。 这是Swing的核心思想之一,Swing是完全基于Java自绘制图形而实现的,因而Swing的界面看起来与Windows不再有任何类似,尤其是窗口控件的样式(虽然我们也可以通过换肤来达到模拟Windows界面的效果)。所以上图清楚的表明了Swing是一个高层的GUI系统,而不像AWT那样与运行平台技术更加靠近的系统。我们仍然用Button与Panel来做了一个例子,图中关系看出,Swing的类继承关系比AWT要复杂的多,而且Swing类大多都经过了中间的转接类-JComponent。而我们常用的JFrame则另辟蹊径,从awt的window继承了下来。 这种结构关系决定了Swing的庞大与复杂性。很多初学者都难以理解Swing的模式和结构。 Swing 中的控件都是利用Java图形功能绘制出来的,而不是对应到平台的一个具体控件实现。我们所用的所有Swing控件都是直接或者间接用Graphics绘制出来的,这种实现方式最大的好处是很灵活,我们想要什么样的控件,就直接用Graphics绘制出来就是了。 Sun之所以用这种方式来实现,是为了在不牺牲移植性的基础上加入丰富的界面交互功能。但是缺点也很明显:Swing的速度和效率是所有GUI系统中最慢的。 JBuilder和NetBeans的IDE都是纯正的Swing界面,启动一下,然后操作一下,比如拖动窗口之类的试试,你就会明白我在说什么。 之所以导致这个结果,其原因是: 1、Swing的类层次太深,一个JFrame经过了4层的类继承关系,如果再加上虚拟机的图形功能内部实现,就有6层的转接关系,每一次的继承和转接都会消耗系统资源和速度损失。(过多的继承会降低系统的速度,因为操作子类往往是使用基类指向来完成通用操作的) 2、Swing是基于自绘制图形技术的,而Java为了保持可移植性,所以无法使用硬件加速和平台特性来加快图形操作的速度。因而Java的图形技术都是“高层”的图形技术,就好像我们用Windows GDI去做动画一样,当然速度会很慢。三、新的曙光-SWT 应该说,稍有阅历的Java的程序员都知道很多人对Swing效率低下的抱怨。IBM赞助的Eclipse开放源码项目,搞了一个另类的GUI系统-SWT。 SWT是一个非常独特的技术,其核心思想和Windows上的DirectX如出一辙,也许SWT的程序员真的是借鉴了DirectX成功的秘诀。 下面是SWT技术原理的类关系图:
我们会看见,SWT的类关系非常直接而且易懂,有点像Delphi的API接口思想(此是我随便乱弹,与Delphi没有什么关系)。最重要的一点就是SWT的核心思想:SWT的功能实现是完全构筑在以JNI为基础的,对运行平台的直接调用封装上的。 我们可以从图中看见,SWT的功能没有通过任何Java虚拟机来操作,而是直接调用Windows GDI和Shell功能,这一点是通过JNI方法调用完成。 一定会有人说SWT破坏了java的移植思想,不过Eclipse的大范围流行,正好证明了SWT非但没有阻碍移植性,反而提高了各种操作系统对于Java GUI的利用和期待。这不能不说Eclipse项目组是充满智慧的。 在Eclipse下,plugin目录的swt目录下,你可以发现一个dll动态库文件,这个dll就是JNI方法调用库。 基于SWT技术实现的Eclipse界面不但速度很快,效率很高,而且比Swing要美观的多。这就是直接调用封装的效果。 我们看看SWT的源代码就能更加明白为什么SWT那么流行,为什么SWT的速度像飞一样快,下面是从button类中抽取的一小段代码:
代码:
int callWindowProc (int msg, int wParam, int lParam) { if (handle == 0) return 0; return OS.CallWindowProc (ButtonProc, handle, msg, wParam, lParam); } int windowProc () { return ButtonProc; } LRESULT wmDrawChild (int wParam, int lParam) { if ((style & SWT.ARROW) == 0) return super.wmDrawChild (wParam, lParam); DRAWITEMSTRUCT struct = new DRAWITEMSTRUCT (); OS.MoveMemory (struct, lParam, DRAWITEMSTRUCT.sizeof); int uState = OS.DFCS_SCROLLLEFT; switch (style & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT)) { case SWT.UP: uState = OS.DFCS_SCROLLUP; break; case SWT.DOWN: uState = OS.DFCS_SCROLLDOWN; break; case SWT.LEFT: uState = OS.DFCS_SCROLLLEFT; break; case SWT.RIGHT: uState = OS.DFCS_SCROLLRIGHT; break; } if (!getEnabled ()) uState |= OS.DFCS_INACTIVE; if ((style & SWT.FLAT) == SWT.FLAT) uState |= OS.DFCS_FLAT; if ((struct.itemState & OS.ODS_SELECTED) != 0) uState |= OS.DFCS_PUSHED; RECT rect = new RECT (); OS.SetRect (rect, struct.left, struct.top, struct.right, struct.bottom); OS.DrawFrameControl (struct.hDC, rect, OS.DFC_SCROLL, uState); return null; }
我想任何一个有点Windows编程知识的人都会惊讶SWT的方式和做法,LRESULT、WindowProc都是做什么的,我想不用我多说了。我第一次看见SWT的代码时,惊讶的张大了嘴,我实在无法想象SWT项目组敢于将Java技术与Windows平台结合到如此紧密(当然,Linux平台版本也同样的结合紧密)。我居然在SWT里发现了一个叫Tray的类,猜猜看它是干什么的?Tray可以让你在java程序中显示一个任务栏图标,极度晕眩! 我想,不用再继续介绍SWT了,你一定也很兴奋,从SWT开始,JavaGUI并不一定意味着缓慢、低效率、弱小的功能,Windows程序的眩目与速度,Java程序也可以拥有,这就是SWT的价值。 更加重要的是,SWT打破了长久以来人们对于移植性的误区,似乎移植性就只能使用少到可怜的功能,我们也可以用JNI来拥抱Java的世界,我想,将来不仅仅是界面会借助JNI的方式,也许我们的很多Java思想都会悄悄的发生改变,也许有一天我们的Java代码可以运行的像VB一样快,这种思想意识的变革就是SWT的价值。
至于Swing的结局,我不知道,但是我知道我更加喜欢轻量级的而且快速的SWT,给你的程序多一个选择吧。
优惠劵
光_影
关注
关注
5
点赞
踩
26
收藏
觉得还不错?
一键收藏
知道了
4
评论
Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
看了一下对Java GUI讨论的帖子,所以写了一篇文章来阐述一下各种GUI技术的优劣。Java世界中,目前最知名的三大GUI库分别是:1、AWT(Abstract Window Toolkit)抽象窗口工具包库,包含于所有的Java SDK中2、Swing高级图形库,包含于Java2 SDK中3、来自IBM Eclipse开源项目的SWT(Standard Widget Toolkit)标...
复制链接
扫一扫
SWT Swing与AWT区别
02-13
本文对 Eclipse 的 Standard Windows Toolkit with JFace、Java 的 Swing 和 Abstract Windows Toolkit GUI 工具包进行了比较。通过此处提供的比较,您可以确定在自己的新应用程序中应该使用哪个 GUI 工具包。
在大部分情况中,决定都是在 Swing 与结合了 JFace 的 SWT 之间进行的。通常来说,每个工具包都非常完整且功能强大,足以构建功能完善的 GUI,但是 Swing 通常要比单独使用 SWT(不使用 JFace 时)更好。Swing 具有内嵌于 Java 技术的优点,是完全可移植的,无可争议地是一种更好的架构。Swing 也具有高级图形应用程序所需要的优点。SWT 具有可以作为本地应用程序实现的优点,这可以提高性能,并利用基于 SWT 的 GUI 来实现本地兼容性。
如果您只为一种平台来开发系统,那么 SWT 就具有主机兼容性方面的优点,包括与主机特性的集成,例如在 Windows 上对 ActiveX 控件的使用。
JAVA_SWT_TEST.rar_SWT_WIDGET_awt_java swt_java 工具箱
09-23
标准窗口小部件工具箱的 Java 二维作图 SWT (标准窗口小部件工具箱,Standard Widget Toolkit)是在 Eclipse 平台上使用的窗口小部件工具箱。它也可以作为 Swing/AWT 的一个重要替代产品,用于构建任何类型的 Java GUI 应用程序。
4 条评论
您还未登录,请先
登录
后发表或查看评论
前端同时传递文件数据+非文件数据,前后端解决方案
最新发布
qq_62835094的博客
01-26
397
之前录制视频《文件上传组件》的时候有位观众提了个问题,如果我没有理解错的话,应该就是前后同时传递文件数据非文件数据,前后端数据该如何接收,这里我给出我自己的解决方案tip:下文在编写前端代码的时候,用到了这篇文章写的组件。
Java GUI SWT/Swing/AWT的介绍及比较
11-07
本文通过对 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包进行比较,可以帮助新应用程序的开发人员从中选择适当的工具。
您可以通过本文了解对每个工具包的基本特性的介绍,以及使用每个工具包的优缺点。
AWT 、Swing、SWT的区别与比较(网摘)
zhangmingji的专栏
10-22
405
AWT
AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是...
【UI编程】Java AWT/Swing/SWT/JavaFX杂谈
一段曲折的旅程,一个艰难的人生
11-16
2387
Java界面编程粗略介绍,解开Java是否合适做桌面重程序的心结。
1.初识GUI、AWT、Swing
qq_47701945的博客
07-31
441
1.GUI(Graphics User Interface)就是我们通常所说的图像用户界面
我们使用的Windows之所以广为人知,其最初的吸引力就是它提供的图形用户界面
2.AWT(Abstract Window Toolkit):抽象窗口工具集,它是Sun提供的一套用于创建GUI界面的类库,它为Java应用程序提供了基本的图像组件
优点:使用AWT创建的图像界面应用和所在的运行平台有相同的界面风格(跨平台)
缺点:1.使用AWT做出的图像化界面在所有平台上都显得很简陋,功能也非常有限
...
JavaGui超详细笔记——Gui概念、Swing概述、容器组件、布局管理器、常用组件、事件处理、对话框、内部类
xinin919的博客
08-16
2636
Gui概念、Swing概述、容器组件、布局管理器、常用组件、事件处理、对话框、内部类
细说:AWT,SWT,Swing
hqs7636的专栏
06-13
196
[url]http://www.java3z.com/cwbwebhome/article/article2/21005.html?id=1709[/url]
Overview概述
Java GUI 工具包一直是一个倍受争议的话题。同样的争论也发生在其他编程语言如Smalltalk。实际上每个平台无关的语言都存在着这样的争论。Java作为当前最受广泛使用的编程语言而尤为突出。
...
java awt原理_Java中AWT、Swing与SWT三大GUI技术的原理与效率差别
weixin_39648824的博客
02-28
488
看了一下对Java GUI讨论的帖子,因此写了一篇文章来阐述一下各类GUI技术的优劣。Java世界中,目前最知名的三大GUI库分别是:一、AWT(Abstract Window Toolkit)抽象窗口工具包库,包含于全部的Java SDK中二、Swing高级图形库,包含于Java2 SDK中三、来自IBM Eclipse开源项目的SWT(Standard Widget Toolkit)标准窗口部...
浅析Java中Swing与SWT和AWT的区别及实现_王亚南
03-11
Swing 和 SWT,AWT 技术都是在 Java 图形化界面设计中常用的开发包,在进行 Java GUI 编程时,大家或许经 常徘徊在 SWT,Swing,AWT 之间选择,哪一个更合适自己? 本文简单介绍了三者中各自的功能特点,以及之间的区别...
java 图形界面 java awt swt swing gui
11-03
java awt swt swing gui 教程 pdf
SWT、Swing 或 AWT:哪个更适合您?
Ryuka的专栏
06-01
2000
2006 年 4 月 27 日本文通过对 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包进行比较,可以帮助新应用程序的开发人员从中选择适当的工具。您可以通过本文了解对每个工具包的基本特性的介绍,以及使用每个工具包的优缺点。简介developerWorks 上另外一些作者已经展示了如何在 Swing 和 SW
Java GUI编程中AWT/swing/SWT的优缺点
SayGoodbyeToYou的专栏
03-24
4303
http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html
AWT
AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,是SUN专门针对Java GUI编程提供的最早的也是最初的开发工具包,用来建立和设置Java图形用户界面,这个工具包提供了一套与本地图形界面交互的接口。AWT 中的图形函数与操
java swt awt_AWT/SWT/Swing大比较之一:模型设计与实现
weixin_39650784的博客
03-06
121
前几天由于网络问题,访问不了新浪网,现在准备重新开始博客写作。最近打算写的内容主要包括Java性能、Swing和SWT的比较、Swing方面的一些技术。=====================================================总的来说Swing/AWT和SWT在事件处理机制上是类似的,窗口组件的树状结构也是类似的。图形用户界面系统在事件处理设计上有两大类,一类是单线...
swt 与 awt/swing 的区别与综合比较
web前后端开发
06-25
468
本文通过对 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包进行比较,可以帮助新应用程序的开发人员从中选择适当的工具。
[color=red][size=xx-large]综合网上各家所述 集结此文:[/size][/color]
是Swing是纯Java实现,而SWT和AWT是Java和JNI的混合...
java图像用户界面swing、awt、swt
henry的博客
10-06
1884
1、演进
(1)Sun已经提供了一个跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit)
(2)Sun又创建了一个新的gui框架swing,解决了awt存在的Icd(本地化)问题(swing是awt的继承发展,但Swing不是AWT的子类)
(3)IBM认为swing比较消耗内存,创建了一个新的GUI库,这就是SWT
(4)IBM为了方便
Eclipse下搭建SWT与Swing图形界面开发环境
热门推荐
深之JohnChen的专栏
07-29
1万+
Eclipse SWT Swing 图形界面开发
java GUI框架
08-12
Java提供了几种常用的GUI(图形用户界面)框架,包括:
1. Swing:Swing是Java的标准GUI库,提供了丰富的组件(如按钮、文本框、标签等)和布局管理器(如FlowLayout、BorderLayout等),用于构建桌面应用程序的用户界面。Swing是基于AWT(Abstract Window Toolkit)开发的,并提供了更好的外观和跨平台性能。
2. JavaFX:JavaFX是一个现代化的GUI框架,提供了丰富的UI控件、布局容器、多媒体支持和动画效果等功能。它使用FXML(一种基于XML的语言)来定义界面,也可以通过Java代码来创建和操作界面。JavaFX在Java 8之后成为Java的一部分,取代了Swing成为推荐的GUI开发框架。
3. SWT(Standard Widget Toolkit):SWT是Eclipse基金会开发的GUI库,它与操作系统本地窗口系统集成更紧密,提供更原生的外观和性能。SWT使用Java代码编写,但底层调用了操作系统的本地API。
这些GUI框架都有各自的特点和适用场景。Swing适用于构建跨平台的桌面应用程序,JavaFX提供了更现代化的界面和丰富的功能,而SWT则更注重与底层操作系统的集成。选择合适的GUI框架取决于你的需求和偏好。同时,一些第三方库和框架也可以用于Java GUI开发,如Java AWT、Apache Pivot等。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
光_影
CSDN认证博客专家
CSDN认证企业博客
码龄7年
暂无认证
0
原创
51万+
周排名
83万+
总排名
12万+
访问
等级
1184
积分
37
粉丝
68
获赞
15
评论
191
收藏
私信
关注
最新评论
Java中char和String 的深入理解 - 字符编码
Misa落雪:
你那个少了有一个腿的 虫 不是汉字把,
Java中char和String 的深入理解 - 字符编码
Misa落雪:
手写输入法,都写不出来,那就不是个汉字!!!
Java中char和String 的深入理解 - 字符编码
Misa落雪:
我的也是,大家的都是,不是
Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
渝涅:
jfx现在也挺尴尬的其实,jfx的运行时包还得另外下,oracle是准备放弃Java gui这一块了,让Java专注于服务端
【SpringBoot】核心依赖和自动配置
·Toto_:
请问引入部分的代码要在哪里写啊?怎么引入
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
JAVA序列号的serialVersionUID
JS对象—对象总结(创建、属性、方法)
js数组方法大全
2020年11篇
2019年30篇
2018年37篇
目录
目录
最新文章
JAVA序列号的serialVersionUID
JS对象—对象总结(创建、属性、方法)
js数组方法大全
2020年11篇
2019年30篇
2018年37篇
目录
评论 4
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
Java SWT 教程 · ZetCode 中文系列教程 · 看云
Java SWT 教程 · ZetCode 中文系列教程 · 看云
1分钟部署网站AI智能客服,大模型训练自有数据,简单好用,有效降低客服成本
广告
# Java SWT 教程
> 原文: [http://zetcode.com/gui/javaswt/](http://zetcode.com/gui/javaswt/)
这是 Java SWT 教程。 在本教程中,我们将学习使用 Java SWT 库进行 GUI 编程的基础。 本教程适合初学者和中级程序员。 本教程使用 JDK 8。
## 目录
* [简介](introduction/)
* [布局管理](layout/)
* [菜单和工具栏](menustoolbars/)
* [小部件](widgets/)
* [表格小部件](table/)
* [对话框](dialogs/)
* [绘图](painting/)
* [贪食蛇](nibbles/)
## SWT
标准窗口小部件工具箱(SWT)是用于 Java 编程语言的图形窗口小部件工具箱。 它最初由 IBM 开发,现已成为 Eclipse Foundation 的一部分。 它是 Swing 和 JavaFX 的替代方法。 SWT 使用 Windows API 或 GTK+ 之类的本地 GUI API 通过 Java 本机接口(JNI)创建其小部件。
[Tweet](https://twitter.com/share)
## 相关教程和电子书
有[高级 Java Swing 电子书](/ebooks/advancedjavaswing/), [Java Swing 教程](/tutorials/javaswingtutorial/), [JavaFX 教程](/gui/javafx/)和 [Java 教程](/lang/java/)。
ZetCode 数据库教程
MySQL 教程
MySQL 简介
MySQL 安装
MySQL 的第一步
MySQL 快速教程
MySQL 存储引擎
MySQL 数据类型
在 MySQL 中创建,更改和删除表
MySQL 表达式
在 MySQL 中插入,更新和删除数据
MySQL 中的SELECT语句
MySQL 子查询
MySQL 约束
在 MySQL 中导出和导入数据
在 MySQL 中连接表
MySQL 函数
MySQL 中的视图
MySQL 中的事务
MySQL 存储过程
MySQL Python 教程
MySQL Perl 教程
MySQL & Perl DBI
使用 Perl 连接到 MySQL 数据库
MySQL 中的 Perl 错误处理
使用 Perl 进行 MySQL 查询
在 MySQL 中使用 Perl 绑定参数&列
在 MySQL 中使用 Perl 处理图像
使用 Perl 获取 MySQL 元数据
Perl 的 MySQL 事务
MySQL C API 编程教程
MySQL Visual Basic 教程
MySQL PHP 教程
MySQL Java 教程
MySQL Ruby 教程
MySQL C# 教程
SQLite 教程
SQLite 简介
sqlite3 命令行工具
在 SQLite 中创建,删除和更改表
SQLite 表达式
SQLite 插入,更新,删除数据
SQLite SELECT语句
SQLite 约束
SQLite 连接表
SQLite 函数
SQLite 视图,触发器,事务
SQLite C 教程
SQLite Python 教程
SQLite Perl 教程
Perl DBI
使用 Perl 连接到 SQLite 数据库
SQLite Perl 错误处理
使用 Perl 的 SQLite 查询
使用 Perl 绑定 SQLite 参数&列
使用 Perl 在 SQLite 中处理图像
使用 Perl 获取 SQLite 元数据
使用 Perl 进行 SQLite 事务
SQLite Ruby 教程
连接到 SQLite 数据库
在 SQLite 中使用 Ruby 进行 SQL 查询
绑定参数
处理图像
使用 Ruby 获取 SQLite 元数据
Ruby 的 SQLite 事务
SQLite C# 教程
SQLite C# 简介
使用SqliteDataReader检索数据
ADO.NET 数据集
使用 C# 在 SQLite 中处理图像
使用 C# 获取 SQLite 元数据
使用 C# 的 SQLite 事务
SQLite Visual Basic 教程
SQLite Visual Basic 简介
使用SqliteDataReader检索数据
ADO.NET 的数据集
使用 Visual Basic 在 SQLite 中处理图像
使用 Visual Basic 获取 SQLite 元数据
使用 Visual Basic 的 SQLite 事务
PostgreSQL C 教程
PostgreSQL Ruby 教程
PostgreSQL PHP 教程
PostgreSQL PHP 编程简介
在 PostgreSQL 中使用 PHP 检索数据
在 PostgreSQL 中使用 PHP 处理图像
用 PHP 获取 PostgreSQL 元数据
在 PostgreSQL 中使用 PHP 进行事务
PostgreSQL Java 教程
Apache Derby 教程
Derby 简介
Derby 的安装&配置
Derby 工具
ij 工具
Derby 中的 SQL 查询
在 Derby 中使用 JDBC 进行编程
Derby 安全
使用 Derby & Apache Tomcat
NetBeans 和 Derby
SQLAlchemy 教程
SQLAlchemy 简介
原始 SQL
模式定义语言
SQL 表达式语言
SQLAlchemy 中的对象关系映射器
MongoDB PHP 教程
MongoDB JavaScript 教程
MongoDB Ruby 教程
Spring JdbcTemplate 教程
JDBI 教程
MyBatis 教程
Hibernate Derby 教程
ZetCode .NET 教程
Visual Basic 教程
Visual Basic
Visual Basic 语法结构
基本概念
Visual Basic 数据类型
Visual Basic 中的字符串
运算符
控制流
Visual Basic 数组
Visual Basic 中的过程&函数
在 Visual Basic 中组织代码
面向对象编程
Visual Basic 中的面向对象编程 II
Visual Basic 中的集合
输入和输出
C# 教程
C# 语言
C# 语法结构
C# 基础
C# 数据类型
C# 中的字符串
C# 运算符
C# 中的流控制
C# 数组
C# 面向对象编程
C# 中的方法
C# 面向对象编程 II
C# 属性
C# 结构
C# 委托
命名空间
C# 集合
C# 输入和输出
C# 目录教程
C# 字典教程
在 C# 中读取文本文件
C# 中的日期和时间
在 C# 中读取网页
C# HttpClient教程
ASP.NET Core 教程
ZetCode 图形教程
Java 2D 游戏教程
Java 游戏基础
动画
移动精灵
碰撞检测
Java 益智游戏
Java Snake
Breakout 游戏
Java 俄罗斯方块
Java 吃豆人
Java 太空侵略者
Java 扫雷
Java 推箱子
Java 2D 教程
介绍
基本绘图
形状和填充
透明度
合成
剪裁
变换
特效
图像
文字和字体
命中测试,移动物体
俄罗斯方块
Cario 图形教程
Cario 图形库
Cario 定义
Cairo 后端
Cairo 基本图形
形状和填充
渐变
透明度
合成
剪裁和遮罩
变换
Cairo 文字
Cairo 中的图像
根窗口
PyCairo 教程
PyCairo 简介
PyCairo 后端
PyCairo 中的基本绘图
PyCairo 形状和填充
PyCairo 渐变
PyCairo 剪裁&遮罩
PyCairo 的透明度
PyCairo 中的变换
PyCairo 中的文字
PyCairo 中的图像
根窗口
HTML5 画布教程
介绍
HTML5 画布中的直线
HTML5 画布形状
HTML5 画布填充
HTML5 画布中的透明度
HTML5 画布合成
HTML5 canvas 中的变换
HTML5 画布中的文字
HTML5 画布中的动画
HTML5 画布中的 Snake
ZetCode GUI 教程
Windows API 教程
Windows API 简介
Windows API main函数
Windows API 中的系统函数
Windows API 中的字符串
Windows API 中的日期和时间
Windows API 中的一个窗口
UI 的第一步
Windows API 菜单
Windows API 对话框
Windows API 控件 I
Windows API 控件 II
Windows API 控件 III
Windows API 中的高级控件
Windows API 中的自定义控件
Windows API 中的 GDI
PyQt4 教程
PyQt4 简介
PyQt4 中的第一个程序
PyQt4 中的菜单和工具栏
PyQt4 中的布局管理
PyQt4 中的事件和信号
PyQt4 中的对话框
PyQt4 小部件
PyQt4 小部件 II
PyQt4 中的拖放
PyQt4 中的绘图
PyQt4 中的自定义小部件
PyQt4 中的俄罗斯方块游戏
PyQt5 教程
PyQt5 简介
PyQt5 日期和时间
PyQt5 中的第一个程序
PyQt5 中的菜单和工具栏
PyQt5 中的布局管理
PyQt5 中的事件和信号
PyQt5 中的对话框
PyQt5 小部件
PyQt5 小部件 II
PyQt5 拖放
PyQt5 中的绘图
PyQt5 中的自定义小部件
PyQt5 中的俄罗斯方块
Qt4 教程
Qt4 工具包简介
Qt4 工具类
Qt4 中的字符串
Qt4 中的日期和时间
在 Qt4 中使用文件和目录
Qt4 中的第一个程序
Qt4 中的菜单和工具栏
Qt4 中的布局管理
Qt4 中的事件和信号
Qt4 小部件
Qt4 小部件 II
Qt4 中的绘图
Qt4 中的自定义小部件
Qt4 中的打砖块游戏
Qt5 教程
Qt5 工具包简介
Qt5 中的字符串
Qt5 中的日期和时间
Qt5 中的容器
在 Qt5 中处理文件和目录
Qt5 中的第一个程序
Qt5 中的菜单和工具栏
Qt5 中的布局管理
Qt5 中的事件和信号
Qt5 小部件
Qt5 小部件 II
Qt5 中的绘图
Qt5 中的自定义小部件
Qt5 中的贪食蛇
Qt5 中的打砖块游戏
PySide 教程
PySide 工具包简介
PySide 中的第一个程序
PySide 中的菜单和工具栏
PySide 中的布局管理
PySide 中的事件和信号
PySide 中的对话框
PySide 小部件
PySide 小部件 II
在 PySide 中拖放
在 PySide 中绘图
PySide 中的自定义小部件
PySide 中的俄罗斯方块游戏
Tkinter 教程
Tkinter 简介
Tkinter 中的布局管理
Tkinter 标准小部件属性
Tkinter 小部件
Tkinter 中的菜单和工具栏
Tkinter 中的对话框
Tkinter 中的绘图
Tkinter 中的贪食蛇
Tcl/Tk 教程
Tcl/Tk 简介
Tcl/Tk 中的布局管理
Tcl/Tk 小部件
Tcl/Tk 中的菜单和工具栏
Tcl/Tk 中的对话框
Tcl/Tk 绘图
贪食蛇
Qt 快速教程
Java Swing 教程
Java Swing 简介
Java Swing 首个程序
Java Swing 中的菜单和工具栏
Swing 布局管理
GroupLayout管理器
Java Swing 事件
基本的 Swing 组件
基本的 Swing 组件 II
Java Swing 对话框
Java Swing 模型架构
Swing 中的拖放
Swing 中的绘图
Java Swing 中的可调整大小的组件
Java Swing 中的益智游戏
俄罗斯方块
JavaFX 教程
JavaFX 简介
JavaFX 首个程序
JavaFX 布局窗格
基本的 JavaFX 控件
基本 JavaFX 控件 II
JavaFX 事件
JavaFX 效果
JavaFX 动画
JavaFX 画布
JavaFX 图表
Java SWT 教程
Java SWT 简介
Java SWT 中的布局管理
Java SWT 中的菜单和工具栏
Java SWT 中的小部件
Table小部件
Java SWT 中的对话框
Java SWT 绘图
Java SWT 中的贪食蛇
wxWidgets 教程
wxWidgets 简介
wxWidgets 助手类
wxWidgets 中的第一个程序
wxWidgets 中的菜单和工具栏
wxWidgets 中的布局管理
wxWidgets 中的事件
wxWidgets 中的对话框
wxWidgets 小部件
wxWidgets 小部件 II
wxWidgets 中的拖放
wxWidgets 中的设备上下文
wxWidgets 中的自定义小部件
wxWidgets 中的俄罗斯方块游戏
wxPython 教程
wxPython 简介
第一步
菜单和工具栏
wxPython 中的布局管理
wxPython 中的事件
wxPython 对话框
小部件
wxPython 中的高级小部件
wxPython 中的拖放
wxPython 图形
创建自定义小部件
wxPython 中的应用框架
wxPython 中的俄罗斯方块游戏
C# Winforms Mono 教程
Mono Winforms 简介
Mono Winforms 中的第一步
Mono Winforms 中的布局管理
Mono Winforms 中的菜单和工具栏
Mono Winforms 中的基本控件
Mono Winforms 中的高级控件
对话框
Mono Winforms 中的拖放
Mono Winforms 中的绘图
Mono Winforms 中的贪食蛇
Java Gnome 教程
Java Gnome 简介
Java Gnome 的第一步
Java Gnome 中的布局管理
Java Gnome 中的布局管理 II
Java Gnome 中的菜单
Java Gnome 中的工具栏
Java Gnome 中的事件
Java Gnome 中的小部件
Java Gnome 中的小部件 II
Java Gnome 中的高级小部件
Java Gnome 中的对话框
Java Gnome 中的 Pango
在 Java Gnome 中用 Cairo 绘图
Cario 绘图 II
Java Gnome 中的贪食蛇
QtJambi 教程
QtJambi 简介
QtJambi 中的布局管理
QtJambi 中的小部件
QtJambi 中的菜单和工具栏
QtJambi 对话框
QtJambi 中的绘图
QtJambi 中的自定义小部件
贪食蛇
GTK+ 教程
GTK+ 简介
GTK+ 中的第一个程序
GTK+ 中的菜单和工具栏
GTK+ 布局管理
GTK+ 事件和信号
GTK+ 对话框
GTK+ 小部件
GTK+ 小部件 II
GtkTreeView小部件
GtkTextView小部件
自定义 GTK+ 小部件
Ruby GTK 教程
Ruby GTK 简介
Ruby GTK 中的布局管理
Ruby GTK 中的小部件
Ruby GTK 中的菜单和工具栏
Ruby GTK 中的对话框
Ruby GTK Cario 绘图
Ruby GTK 中的自定义小部件
Ruby GTK 中的贪食蛇
GTK# 教程
GTK# 简介
GTK 的第一步
GTK# 中的布局管理
GTK 中的菜单
GTK# 中的工具栏
GTK# 中的事件
GTK# 中的小部件
GTK 中的小部件 II
GTK# 中的高级小部件
GTK# 中的对话框
Pango
GTK# 中的 Cario 绘图
GTK# 中的 Cario 绘图 II
GTK# 中的自定义小部件
Visual Basic GTK# 教程
Visual Basic GTK# 简介
布局管理
小部件
菜单和工具栏
对话框
Cario 绘图
自定义小部件
贪食蛇
PyGTK 教程
PyGTK 简介
PyGTK 的第一步
PyGTK 中的布局管理
PyGTK 中的菜单
PyGTK 中的工具栏
PyGTK 中的事件和信号
PyGTK 中的小部件
PyGTK 中的小部件 II
PyGTK 中的高级小部件
PyGTK 中的对话框
Pango
Pango II
PyGTK 中的 Cario 绘图
Cario 绘图 II
PyGTK 中的贪食蛇游戏
PyGTK 中的自定义小部件
PHP GTK 教程
PHP GTK 简介
PHP GTK 中的布局管理
PHP GTK 中的小部件
PHP GTK 中的菜单和工具栏
对话框
Cario 绘图
自定义小部件
贪食蛇
C# Qyoto 教程
Qyoto 介绍
布局管理
Qyoto 中的小部件
Qyoto 中的菜单和工具栏
Qyoto 对话框
Qyoto 中的绘图
Qyoto 中的绘图 II
Qyoto 中的自定义小部件
贪食蛇
Ruby Qt 教程
Ruby Qt 简介
Ruby Qt 中的布局管理
Ruby Qt 中的小部件
菜单和工具栏
Ruby Qt 中的对话框
用 Ruby Qt 绘图
Ruby Qt 中的自定义小部件
Ruby Qt 中的贪食蛇
Visual Basic Qyoto 教程
Qyoto 介绍
布局管理
Qyoto 中的小部件
Qyoto 中的菜单和工具栏
Qyoto 对话框
Qyoto 中的绘图
Qyoto 中的自定义小部件
贪食蛇
Mono IronPython Winforms 教程
介绍
IronPython Mono Winforms 中的第一步
布局管理
菜单和工具栏
Mono Winforms 中的基本控件
Mono Winforms 中的基本控件 II
Mono Winforms 中的高级控件
对话框
Mono Winforms 中的拖放
绘图
IronPython Mono Winforms 中的绘图 II
IronPython Mono Winforms 中的贪食蛇
IronPython Mono Winforms 中的俄罗斯方块游戏
FreeBASIC GTK 教程
Jython Swing 教程
Jython Swing 简介
Jython Swing 中的布局管理
Jython Swing 中的组件
Jython Swing 中的菜单和工具栏
Jython Swing 中的对话框
Jython Swing 中的绘图
Jython Swing 中的半字节
JRuby Swing 教程
JRuby Swing 简介
JRuby Swing 中的布局管理
JRuby Swing 中的组件
菜单和工具栏
JRuby Swing 中的对话框
在 JRuby Swing 中绘图
JRuby Swing 中的贪食蛇
Visual Basic Winforms 教程
Visual Basic Winforms 简介
布局管理
基本控制
进阶控件
菜单和工具栏
对话框
绘图
拖放
贪食蛇
JavaScript GTK 教程
JavaScript GTK 简介
布局管理
JavaScript GTK 中的小部件
JavaScript GTK 中的菜单和工具栏
JavaScript GTK 中的对话框
JavaScript GTK 中的 Cario 绘图
ZetCode Java 教程
Java 教程
Java 语言
Java 语法结构
Java 基础
Java 数据类型
Java 数据类型 II
Java 字符串
Java 数组
Java 表达式
Java 控制流程
Java 面向对象的编程
Java 方法
Java 面向对象编程 II
Java 包
Java 中的异常
Java 集合
Java 流
Java Future 教程
Java Comparable和Comparator
Java DOM 教程
Java MVC 教程
Java SAX 教程
Java JAXB 教程
Java JSON 处理教程
Java H2 教程
MongoDB Java 教程
Java 正则表达式教程
Java PDFBox 教程
Java 文件教程
Java Files.list教程
Java Files.walk教程
Java DirectoryStream教程
Java 外部与内部迭代器
Java 文件大小
用 Java 创建目录
用 Java 创建文件
Java Log4j 教程
Gson 教程
Java RequestDispatcher
Java HTTP GET/POST 请求
Java InputStream教程
Java FileOutputStream教程
Java FileInputStream教程
Java ZipInputStream教程
Java FileWriter教程
EJB 简介
Java forEach教程
Jetty 教程
Tomcat Derby 教程
Stripes 介绍
使用 Stripes 的 Java webapp,MyBatis,& Derby
EclipseLink 简介
Java 中的数据源
JSTL 中的 SQL 查询标记
Java 验证过滤器
Hibernate 验证器
用 Java 显示图像
Play 框架简介
Spark Java 简介
Java ResourceBundle教程
Jtwig 教程
Java Servlet 教程
Java 套接字教程
FreeMarker 教程
Android 教程
Java EE 5 教程
JSoup 教程
JFreeChart 教程
ImageIcon教程
用 Java 复制文件
Java 文件时间教程
如何使用 Java 获取当前日期时间
Java 列出目录内容
Java 附加到文件
Java ArrayList教程
用 Java 读写 ICO 图像
Java int到String的转换
Java HashSet教程
Java HashMap教程
Java static关键字
Java 中的HashMap迭代
用 Java 过滤列表
在 Java 中读取网页
Java 控制台应用
Java 集合的便利工厂方法
Google Guava 简介
OpenCSV 教程
用 Java8 的StringJoiner连接字符串
Java 中元素迭代的历史
Java 谓词
Java StringBuilder
Java 分割字串教学
Java NumberFormat
Java TemporalAdjusters教程
Apache FileUtils教程
Java Stream 过滤器
Java 流归约
Java 流映射
Java InputStreamReader教程
在 Java 中读取文本文件
Java Unix 时间
Java LocalTime
Java 斐波那契
Java ProcessBuilder教程
Java 11 的新功能
ZetCode JavaScript 教程
Ramda 教程
Lodash 教程
Collect.js 教程
Node.js 简介
Node HTTP 教程
Node-config 教程
Dotenv 教程
Joi 教程
Liquid.js 教程
faker.js 教程
Handsontable 教程
PouchDB 教程
Cheerio 教程
Axios 教程
Jest 教程
JavaScript 正则表达式
用 JavaScript 创建对象
Big.js 教程
Moment.js 教程
Day.js 教程
JavaScript Mustache 教程
Knex.js 教程
MongoDB JavaScript 教程
Sequelize 教程
Bookshelf.js 教程
Node Postgres 教程
Node Sass 教程
Document.querySelector教程
Document.all教程
JSON 服务器教程
JavaScript 贪食蛇教程
JavaScript 构建器模式教程
JavaScript 数组
XMLHttpRequest教程
从 JavaScript 中的 URL 读取 JSON
在 JavaScript 中循环遍历 JSON 数组
jQuery 教程
Google 图表教程
ZetCode Kotlin 教程
Kotlin Hello World 教程
Kotlin 变量
Kotlin 的运算符
Kotlin when表达式
Kotlin 数组
Kotlin 范围
Kotlin Snake
Kotlin Swing 教程
Kotlin 字符串
Kotlin 列表
Kotlin 映射
Kotlin 集合
Kotlin 控制流程
Kotlin 写入文件
Kotlin 读取文件教程
Kotlin 正则表达式
ZetCode 其它教程
TCL 教程
Tcl
Tcl 语法结构
Tcl 中的基本命令
Tcl 中的表达式
Tcl 中的控制流
Tcl 中的字符串
Tcl 列表
Tcl 中的数组
Tcl 中的过程
输入&输出
AWK 教程
Vaadin 教程
Vaadin 框架介绍
Vaadin Grid教程
Vaadin TextArea教程
Vaadin ComboBox教程
Vaadin Slider教程
Vaadin CheckBox教程
Vaadin Button教程
Vaadin DateField教程
Vaadin Link教程
ZetCode PHP 教程
PHP 教程
PHP
PHP 语法结构
PHP 基础
PHP 数据类型
PHP 字符串
PHP 运算符
PHP 中的控制流
PHP 数组
PHP 数组函数
PHP 中的函数
PHP 正则表达式
PHP 中的面向对象编程
PHP 中的面向对象编程 II
PHP Carbon 教程
PHP Monolog 教程
PHP 配置教程
PHP Faker 教程
Twig 教程
Valitron 教程
Doctrine DBAL QueryBuilder 教程
PHP Respect 验证教程
PHP Rakit 验证教程
PHP PDO 教程
CakePHP 数据库教程
PHP SQLite3 教程
PHP 文件系统函数
ZetCode Python 教程
Python 教程
Python 语言
交互式 Python
Python 语法结构
Python 数据类型
Python 字符串
Python 列表
Python 字典
Python 运算符
Python 关键字
Python 函数
Python 中的文件
Python 中的面向对象编程
Python 模块
Python 中的包
Python 异常
Python 迭代器和生成器
Python 内省
Python Faker 教程
Python f 字符串教程
Python bcrypt 教程
Python 套接字教程
Python smtplib教程
OpenPyXL 教程
Python pathlib教程
Python YAML 教程
Python 哈希教程
Python ConfigParser教程
Python 日志教程
Python argparse 教程
Python SQLite 教程
Python Cerberus 教程
Python PostgreSQL 教程
PyMongo 教程
PyMySQL 教程
Peewee 教程
pyDAL 教程
pytest 教程
Bottle 教程
Python Jinja 教程
PrettyTable 教程
BeautifulSoup 教程
pyquery 教程
Python for循环
Python 反转
Python Lambda 函数
Python 集合
Python 映射
Python CSV 教程-读写 CSV
Python 正则表达式
Python SimpleJson 教程
SymPy 教程
Pandas 教程
Matplotlib 教程
Pillow 教程
Python FTP 教程
Python Requests 教程
Python Arrow 教程
Python 列表推导式
Python 魔术方法
PyQt 中的QPropertyAnimation
PyQt 中的QNetworkAccessManager
ZetCode Ruby 教程
Ruby 教程
Ruby
Ruby 语法结构
Ruby 基础
Ruby 变量
Ruby 中的对象
Ruby 数据类型
Ruby 字符串
Ruby 表达式
Ruby 控制流
Ruby 数组
Ruby 哈希
Ruby 中的面向对象编程
Ruby 中的面向对象编程 II
Ruby 正则表达式
Ruby 输入&输出
Ruby HTTPClient教程
Ruby Faraday 教程
Ruby Net::HTTP教程
ZetCode Servlet 教程
从 Java Servlet 提供纯文本
Java Servlet JSON 教程
Java Servlet HTTP 标头
Java Servlet 复选框教程
Java servlet 发送图像教程
Java Servlet JQuery 列表教程
Servlet FreeMarker JdbcTemplate 教程-CRUD 操作
jQuery 自动补全教程
Java servlet PDF 教程
servlet 从 WAR 内读取 CSV 文件
Java HttpServletMapping
EasyUI datagrid
Java Servlet RESTFul 客户端
Java Servlet Log4j 教程
Java Servlet 图表教程
Java ServletConfig教程
Java Servlet 读取网页
嵌入式 Tomcat
Java Servlet 分页
Java Servlet Weld 教程
Java Servlet 上传文件
Java Servlet 提供 XML
Java Servlet 教程
JSTL forEach标签
使用 jsGrid 组件
ZetCode Spring 教程
Spring @Bean注解教程
Spring @Autowired教程
Spring @GetMapping教程
Spring @PostMapping教程
Spring @DeleteMapping教程
Spring @RequestMapping教程
Spring @PathVariable教程
Spring @RequestBody教程
Spring @RequestHeader教程
Spring Cookies 教程
Spring 资源教程
Spring 重定向教程
Spring 转发教程
Spring ModelAndView教程
Spring MessageSource教程
Spring AnnotationConfigApplicationContext
Spring BeanFactoryPostProcessor教程
Spring BeanFactory教程
Spring context:property-placeholder教程
Spring @PropertySource注解教程
Spring @ComponentScan教程
Spring @Configuration教程
Spring C 命名空间教程
Spring P 命名空间教程
Spring bean 引用教程
Spring @Qualifier注解教程
Spring ClassPathResource教程
Spring 原型作用域 bean
Spring Inject List XML 教程
Spring 概要文件 XML 教程
Spring BeanDefinitionBuilder教程
Spring 单例作用域 bean
独立的 Spring 应用
经典 Spring 应用中的JdbcTemplate
Spring EmbeddedDatabaseBuilder教程
Spring HikariCP 教程
Spring Web 应用简介
Spring BeanPropertyRowMapper教程
Spring DefaultServlet教程
Spring WebSocket 教程
Spring WebJars 教程
Spring @MatrixVariable教程
Spring Jetty 教程
Spring 自定义 404 错误页面教程
Spring WebApplicationInitializer教程
Spring BindingResult教程
Spring FreeMarker 教程
Spring Thymeleaf 教程
Spring ResourceHandlerRegistry教程
SpringRunner 教程
Spring MockMvc 教程
ZetCode Spring Boot 教程
Spring Boot 发送电子邮件教程
Spring Boot WebFlux 教程
Spring Boot ViewControllerRegistry教程
Spring Boot CommandLineRunner教程
Spring Boot ApplicationReadyEvent 教程
Spring Boot CORS 教程
Spring Boot @Order教程
Spring Boot @Lazy教程
Spring Boot Flash 属性
Spring Boot CrudRepository 教程
Spring Boot JpaRepository 教程
Spring Boot findById 教程
Spring Boot Data JPA @NamedQuery教程
Spring Boot Data JPA @Query教程
Spring Boot Querydsl 教程
Spring Boot Data JPA 排序教程
Spring Boot @DataJpaTest教程
Spring Boot TestEntityManager 教程
Spring Boot Data JPA 派生的查询
Spring Boot Data JPA 查询示例
Spring Boot Jersey 教程
Spring Boot CSV 教程
SpringBootServletInitializer教程
在 Spring Boot 中加载资源
Spring Boot H2 REST 教程
Spring Boot RestTemplate
Spring Boot REST XML 教程
Spring Boot Moustache 教程
Spring Boot Thymeleaf 配置
Spring Boot 自动控制器
Spring Boot FreeMarker 教程
Spring Boot Environment
Spring Boot Swing 集成教程
在 Spring Boot 中提供图像文件
在 Spring Boot 中创建 PDF 报告
Spring Boot 基本注解
Spring Boot @ResponseBody教程
Spring Boot @PathVariable教程
Spring Boot REST Data JPA 教程
Spring Boot @RequestParam教程
Spring Boot 列出 bean
Spring Boot @Bean
Spring Boot @Qualifier教程
在 Spring Boot 中提供静态内容
Spring Boot Whitelabel 错误
Spring Boot DataSourceBuilder 教程
Spring Boot H2 教程
Spring Boot Web JasperReports 集成
Spring Boot iText 教程
Spring Boot cmd JasperReports 集成
Spring Boot RESTFul 应用
Spring Boot 第一个 Web 应用
Spring Boot Groovy CLI
Spring Boot 上传文件
Spring Boot @ExceptionHandler
Spring Boot @ResponseStatus
Spring Boot ResponseEntity
Spring Boot @Controller
Spring Boot @RestController
Spring Boot @PostConstruct
Spring Boot @Component
Spring Boot @ConfigurationProperties教程
Spring Boot @Repository
Spring Boot MongoDB 教程
Spring Boot MongoDB Reactor 教程
Spring Boot PostgreSQL 教程
Spring Boot @ModelAttribute
Spring Boot 提交表单教程
Spring Boot Model
Spring Boot MySQL 教程
Spring Boot GenericApplicationContext
SpringApplicationBuilder教程
Spring Boot Undertow 教程
Spring Boot 登录页面教程
Spring Boot RouterFunction 教程
ZetCode Symfony 教程
Symfony DBAL 教程
Symfony 表单教程
Symfony CSRF 教程
Symfony Vue 教程
Symfony 简介
Symfony 请求教程
Symfony HttpClient教程
Symfony Flash 消息
在 Symfony 中发送邮件
Symfony 保留表单值
Symfony @Route注解教程
Symfony 创建路由
Symfony 控制台命令教程
Symfony 上传文件
Symfony 服务教程
Symfony 验证教程
Symfony 翻译教程
【插件开发】—— 7 SWT布局详解,不能再详细了! - xingoo - 博客园
【插件开发】—— 7 SWT布局详解,不能再详细了! - xingoo - 博客园
会员
周边
新闻
博问
AI培训
云市场
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式 ...
退出登录
注册
登录
xingoo
博客园
首页
管理
【插件开发】—— 7 SWT布局详解,不能再详细了!
前文回顾:
1 插件学习篇
2 简单的建立插件工程以及模型文件分析
3 利用扩展点,开发透视图
4 SWT编程须知
5 SWT简单控件的使用与布局搭配
6 SWT复杂空间与布局搭配
前面几篇都提到了SWT的布局,布局系统也为规整的UI提供了保障。那么如何设计一个布局呢?
Eclipse的布局机制,提供了两个对象概念,Layout(描述内部布局方式)以及GridData(描述本身布局方式)。
什么是Layout?
首先说一下Layout,layout定义了一个空间内部的布局格式。比如我们把箱子作为一个整体,那么箱子内部该怎么去设计,怎么放置东西进去,就需要用layout来指定。
而常用的布局方式,就包括FillLayout,gridLayout,RowLayout,以及FormLayout。
下面就针对这几种布局进行一下介绍:
Filllayout
也叫做填充布局,它会让里面的子空间以填充的方式进行布局。
比如我们采用如下的设计方式:
FillLayout layout = new FillLayout();
shell.setLayout(layout);
for(int i=0;i<10;i++){
Button button = new Button(shell,SWT.PUSH);
button.setText("Button"+i);
}
正常的布局是这样的:
经过拉伸就变成了这样:
RowLayout
也叫行布局,它会让内部的子空间以行为单位进行排列,遇到边界时,自动换成下一行。
RowLayout layout = new RowLayout();
shell.setLayout(layout);
for(int i=0;i<10;i++){
Button button = new Button(shell,SWT.PUSH);
Image img = new Image(null,"icons\\ok.png");
button.setImage(img);
button.setText("Button"+i);
}
得到的结果是这样的:
当压缩边界的时候,会自动换行
GridLayout
也叫做网格布局,它以规定网格的形式,指定每一行有多少列,元素会以每列几个的方式进行排列,超出的部分挤到下一行。
GridLayout layout = new GridLayout();
layout.numColumns = 3;
shell.setLayout(layout);
for(int i=0;i<10;i++){
Button button = new Button(shell,SWT.PUSH);
Image img = new Image(null,"icons\\ok.png");
button.setImage(img);
button.setText("Button"+i);
}
当指定每行有3个子控件时,无论怎么改变窗口的大小,都不会改变排列的方式
当改变窗口大小时,不会发生变化
FormLayout
感觉这个是最难使用的了,它会以一个Form表单的形式提供布局。先看一下使用方式吧:
FormLayout layout = new FormLayout();
shell.setLayout(layout);
Button cancelButton = new Button(shell,SWT.PUSH);
cancelButton.setText("Cancel");
FormData formData1 = new FormData();
formData1.right = new FormAttachment(100,-5); //第一个数字式百分比,也就是说 【宽度-5】
formData1.bottom = new FormAttachment(100,-5); //第一个数字式百分比,也就是说 【高度-5】
cancelButton.setLayoutData(formData1);
Button okButton = new Button(shell,SWT.PUSH);
okButton.setText("OK");
FormData formData2 = new FormData();
formData2.right = new FormAttachment(100,-60);
formData2.bottom = new FormAttachment(100,-5);
okButton.setLayoutData(formData2);
Text text = new Text(shell,SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
FormData formData3 = new FormData();
formData3.top = new FormAttachment(0,5);
formData3.bottom = new FormAttachment(cancelButton,-5);//底部距离 【底部控件-5个像素】
formData3.left = new FormAttachment(0,5);
formData3.right = new FormAttachment(100,-5);
text.setLayoutData(formData3);
Color color = new Color(null,255,0,0);
text.setForeground(color);
可以看到他提供了一个FormData的布局方式,通过FormAttachment实现,这个类需要两个参数,第一个是宽度(left或者right)或者高度(top或者bottom)的百分比,第二个参数是它相对加上的值。如果是负数,就是减去的像素值。而且提供Control类型的参数,也就是控件类型的参数。如果第一个参数指定一个控件,比如上面指定的那个bottom,那么他会自动获取这个控件对应的高度,在进行加减。
这样就保证了,某些控件的相对位置保持不变。
下面看一下效果:
拉伸后编程
什么是GridData呢?又该如何使用呢?
下面介绍一下GridData,这个也是一个重量级的参数:
这个参数用于指定目标如何摆放,它描述了以表格为单位的布局。
它描述了空间本身的一个布局摆放的方式:
并且搭配之前的GridLayout布局,通过每行有几列的方式,控制布局。先看一下都有什么参数,以及参数描述的意义:
GridData griddata = new GridData(SWT.FILL,SWT.FILL,false,false,1,1);
一般都是上面这样的参数格式:
第一个参数:水平方向如何对齐
第二个参数:竖直方向如何对齐
第三个参数:是否占用水平的剩余空间
第四个参数:是否占用竖直的剩余空间
第五个参数:水平的列数
第六个参数:竖直的行数
这样一来,举个例子就简单了。
比如我们指定了一个表格是三行三列的,那么通过设定
第一个控件参数是(SWT.FILL,SWT.FILL,false,false,1,1);
第二个参数是(SWT,SWT,false,false,1,2);
第三个参数是(SWT.FILL_BOTH);
第四个得到如下的布局:(SWT.FILL,SWT.FILL,false,false,1,1);
这样我们得到如下的布局:
感觉上面的图顿时拉低了文章的档次,凑合看吧。可以看到第二个控件,通过指定真的占用了两列。
但是第三个的FILL_BOTH并没有按照预期占用了剩余的所有控件,这就说明,填充布局还是不会垮行到下一列的布局的。
另外添加两个小知识,就是使用颜色以及图片。
颜色通常使用RGB来指定:
Color color = new Color(null,255,0,0);
text.setForeground(color);
颜色的第一参数是Device,可以填写为null;
而图片也图普通的控件一样,需要指定一个ImgData来指定图片的URL即可:
Image img = new Image(null,"icons\\ok.png");
button.setImage(img);
下面是这个例子所用到的代码:
package com.xingoo.plugin.swttest.test;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
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.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.xingoo.plugin.swttest.Abstract.AbstractExample;
public class LayoutTest extends AbstractExample{
public static void main(String[] args) {
new LayoutTest().run();
}
public void todo(Shell shell) {
//////////////////////////////////////////////////////
//FillLayout
//////////////////////////////////////////////////////
// FillLayout layout = new FillLayout();
// shell.setLayout(layout);
// for(int i=0;i<10;i++){
// Button button = new Button(shell,SWT.PUSH);
// button.setText("Button"+i);
//
//// Image img = new Image(null,"icons\\ok.png");
//// button.setImage(img);
// }
//////////////////////////////////////////////////////
//RowLayout
//////////////////////////////////////////////////////
// RowLayout layout = new RowLayout();
// shell.setLayout(layout);
// for(int i=0;i<10;i++){
// Button button = new Button(shell,SWT.PUSH);
// Image img = new Image(null,"icons\\ok.png");
// button.setImage(img);
// button.setText("Button"+i);
// }
//////////////////////////////////////////////////////
//GridLayout
//////////////////////////////////////////////////////
// GridLayout layout = new GridLayout();
// layout.numColumns = 3;
// shell.setLayout(layout);
// for(int i=0;i<10;i++){
// Button button = new Button(shell,SWT.PUSH);
// Image img = new Image(null,"icons\\ok.png");
// button.setImage(img);
// button.setText("Button"+i);
// }
GridLayout layout = new GridLayout();
layout.numColumns = 3;
shell.setLayout(layout);
Button btn1 = new Button(shell,SWT.PUSH);
GridData gd1 = new GridData(SWT.FILL,SWT.FILL,false,false,1,1);
gd1.widthHint = 100;
gd1.heightHint = 100;
btn1.setLayoutData(gd1);
Button btn2 = new Button(shell,SWT.PUSH);
GridData gd2 = new GridData(SWT.FILL,SWT.FILL,false,false,1,2);
gd2.widthHint = 100;
gd2.heightHint = 100;
btn2.setLayoutData(gd2);
Button btn3 = new Button(shell,SWT.PUSH);
GridData gd3 = new GridData(GridData.FILL_BOTH);
// gd3.widthHint = 100;
// gd3.heightHint = 100;
btn3.setLayoutData(gd3);
Button btn4 = new Button(shell,SWT.PUSH);
GridData gd4 = new GridData(SWT.FILL,SWT.FILL,false,false,1,1);
gd4.widthHint = 100;
gd4.heightHint = 100;
btn4.setLayoutData(gd4);
//////////////////////////////////////////////////////
//FormLayout
//////////////////////////////////////////////////////
// FormLayout layout = new FormLayout();
// shell.setLayout(layout);
//
// Button cancelButton = new Button(shell,SWT.PUSH);
// cancelButton.setText("Cancel");
// FormData formData1 = new FormData();
// formData1.right = new FormAttachment(100,-5); //第一个数字式百分比,也就是说 【宽度-5】
// formData1.bottom = new FormAttachment(100,-5); //第一个数字式百分比,也就是说 【高度-5】
// cancelButton.setLayoutData(formData1);
//
// Button okButton = new Button(shell,SWT.PUSH);
// okButton.setText("OK");
// FormData formData2 = new FormData();
// formData2.right = new FormAttachment(100,-60);
// formData2.bottom = new FormAttachment(100,-5);
// okButton.setLayoutData(formData2);
//
// Text text = new Text(shell,SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
// FormData formData3 = new FormData();
// formData3.top = new FormAttachment(0,5);
// formData3.bottom = new FormAttachment(cancelButton,-5);//底部距离 【底部控件-5个像素】
// formData3.left = new FormAttachment(0,5);
// formData3.right = new FormAttachment(100,-5);
// text.setLayoutData(formData3);
// Color color = new Color(null,255,0,0);
// text.setForeground(color);
}
}
View Code
当然,最好是参考前几篇例子,可以真正体会到布局的妙处!
作者:xingoo
出处:http://www.cnblogs.com/xing901022
本文版权归作者和博客园共有。欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接!
posted @
2014-11-14 23:02
xingoo
阅读(22274)
评论(0)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面返回顶部
公告
Copyright © 2024 xingoo
Powered by .NET 8.0 on Kubernetes
SWT Documentation | The Eclipse Foundation
SWT Documentation | The Eclipse Foundation
Skip to main content
Log in
Manage Cookies
Sponsor
EclipsePlatformSWTAbout Community MarketplaceEventsPlanet EclipseNewsletterVideosBlogsParticipate Report a BugForumsMailing ListsWikiIRCResearchEclipse IDE DownloadLearn MoreDocumentationGetting Started / SupportHow to ContributeIDE and ToolsNewcomer Forum
More
CommunityMarketplaceEventsPlanet EclipseNewsletterVideosBlogsParticipateReport a BugForumsMailing ListsWikiIRCResearchEclipse IDEDownloadLearn MoreDocumentationGetting Started / SupportHow to ContributeIDE and ToolsNewcomer Forum
Search
Toggle navigation
Breadcrumbs
HomeProjectsswtDocumentation
SWT Documentation
This page contains links to books, tutorials, and articles about SWT.
SWT in Books
SWT is in print in the following books.
"SWT: The Standard Widget Toolkit, Volume 1" by Steve Northover and Mike Wilson
This book can be read online at the
publisher's web site.
"The Definitive Guide to SWT and JFace" by Rob Warner and Robert Harris
"The Java Developer's Guide to Eclipse, Second Edition" by Jim D'Anjou, Scott Fairbrother, Dan Kehn, John Kellerman, and Pat McCarthy (Chapter 14)
"Contributing to Eclipse: Principles, Patterns, and Plugins" by Erich Gamma and Kent Beck (Chapter 34)
"Eclipse in Action: A Guide for the Java Developer" by David Gallardo, Ed Burnette, and Robert McGovern (Appendix D)
"Eclipse Rich Client Platform: Designing, Coding, and Packaging Java(TM) Applications" by Jeff McAffer and Jean-Michel Lemieux
"Eclipse: Building Commercial-Quality Plug-ins" by Eric Clayberg and Dan Rubel
"SWT/JFace in Action: GUI Design with Eclipse 3.0" by Matthew Scarpino, Stephen Holder, Stanford Ng and Laurent Mihalkovic
"Eclipse" and
"Eclipse Cookbook" by Steve Holzner
SWT Documentation Inside Eclipse
The Eclipse Help system contains good solid documentation for SWT in
the Platform Plug-in Developer Guide. To get there in Eclipse, select
Help > Help Contents >
Platform Plug-in Developer Guide.
SWT documentation appears in the following sections of the
Platform Plug-in Developer Guide:
Programmer's Guide: Standard Widget Toolkit
Reference: API Reference: org.eclipse.swt.* (javadoc for each package)
Examples Guide: Standard Widget Toolkit
SWT Online Documentation
In addition to reading SWT documentation inside Eclipse, you can read it online here:
Programmer's Guide
API Reference
Examples Guide
Online javadoc
Older versions of the Eclipse documentation
SWT Articles at eclipse.org and eclipse.org/swt
Articles at eclipse.org:
Articles about SWT on Eclipse Corner at eclipse.org (20 at last count)
Articles at eclipse.org/swt:
How to develop SWT applications in Eclipse
How to run the ControlExample and other SWT examples
How to deploy SWT applications on Mac OS X
How to generate the SWT JNI Code for Cocoa
How to deploy SWT applications using Java Web Start
How to use SWT from GIT
How to generate the SWT JNI Code
Using OpenGL with SWT 3.2
How to fix a bug in SWT
More Articles about SWT
External articles, interviews in online journals:
SWT articles published in OS News:
Desktop Java with SWT: an interview with Steve Northover
SWT articles on IBM Developerworks Library:
Equipping SWT applications with content assistants
SWT Online Tutorials
There have been a few tutorials posted about SWT that you may find useful:
Getting Started with Eclipse and SWT
This site contains some tutorials and example programs that will help programmers who are
new to Eclipse and the Standard Widget Toolkit (SWT) install Eclipse correctly and run some
simple Java/SWT programs.
Compiling Eclipse Applications for Windows With GCJ/MinGW
A guide for compiling an SWT application into an executable.
An introduction to SWT
Adapted from "SWT and JFace", a No Fluff Just Stuff 2004 presentation.
SWT Home
Widgets
Snippets
Examples
FAQ
Tools
Javadoc
Documentation
Community
Bugs
Contact Us
Back to the top
Eclipse Foundation
About UsContact UsSponsorMembersGovernanceCode of ConductLogo and ArtworkBoard of DirectorsCareers
Legal
Privacy PolicyTerms of UseComplianceEclipse Public LicenseLegal Resources
Useful Links
Report a BugDocumentationHow to ContributeMailing ListsForumsMarketplace
Other
IDE and ToolsProjectsWorking GroupsResearch@EclipseReport a VulnerabilityService Status
Copyright © Eclipse Foundation AISBL. All Rights Reserved.
Back to the top
学过JAVA ,想学GUI。网友说swing awt被淘汰了。请教现在主流的JAVA gui开发学啥? - 知乎
学过JAVA ,想学GUI。网友说swing awt被淘汰了。请教现在主流的JAVA gui开发学啥? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册图形用户界面用户界面设计Swing(Java)学过JAVA ,想学GUI。网友说swing awt被淘汰了。请教现在主流的JAVA gui开发学啥?关注者82被浏览286,476关注问题写回答邀请回答好问题 42 条评论分享19 个回答默认排序圆胖肿Java mayb late bt never absent 关注稍微讲一下java gui的历史吧,java的gui的延伸其实还包括了安卓以及谷歌做的那些努力java最早的图形控件就是awt,这个没问题,但是awt做的事很少,基本上只是做一点简单的包装,所以如果你用的是awt的话,你可能会有比较多的工作要做,比如你想做动画,用awt就会遇到屏幕闪烁的问题,所以你要去弄离屏表面,然后渲染完之后再flip过去,这个属于极为低端的技术,awt这种低层次的封装你就必需要用这种手段,开发很慢,其实你用c之类的,估计还能遇到这种问题这是第一个阶段那后来就出现了一个发展,sun当时发展出了swing,但是这时候爆发了一个巨大的导致分裂的冲突,那就是ibm当时提出了使用swt,而sun提出了swing,swt代表着native widget的分支和走向,而swing则代表了emulate widget的分支和走向这两者的区别呢,我这里简单说一下,native widget的做法主张,更多地复用操作系统本身的控件和样式,举个例子,比如windows提供了图形库directx3d,macosx提供了图形库是metal,标准则是opengl和vulkan,那么swt一派就认为,我们应该提供一个统一的api,然后这个api在实现的时候,根据操作系统的差异,自动选择不同的图形库予以使用,这样这个api就是一层thin wrapper,这样做的好处就是,你可以很快滴利用上操作系统提供的各种图形库,比如win上就用directx,mac上就用metal,etc.还有窗口的样式等,但是坏处就是,你在不同的操作系统上,看到的样式什么的,会有差异,比如swt在它网站上给出的几个例子就很好滴说明这一点,不同操作系统上的展示有明显的不同,如下图:同样的窗口在不同操作系统上的展示,很明显可以看出很多差异来那swing则表示,这个太不跨平台了,java应该编译一次,然后到处运行,而且到处运行时候看起来应该是一样的,彻底屏蔽操作系统带来的差异,应该做一层thick wrapper,厚包装,那这样做的坏处有几个,第一个就是不同操作系统的图形库不一样,那强行一致的结果就是,只能用最弱鸡的那个去搞了,当时标准是opengl,那就是opengl了,在win上也用不了directx,而且不是所有的操作系统都有这么高级的渲染工具的,所以swing还缺省提供了一个没有硬件加速,纯软件渲染的界面,而且更要命的是,缺省是不开硬件加速的,所以这就导致swing做出来的时候,慢,因为没开硬件加速,哪怕你的显卡支持你能用硬件加速渲染,它还是缺省会用纯软件渲染,然后你要懂怎么开硬件加速才能实现你想要的效果,就像很多人可能至今都不知道idea的vmoption其实是可以开硬件加速的吧?在help里面,选择vmoption,然后添加上这一行:-Dsun.java2d.opengl=true,以启动硬件加速参考:https://stackoverflow.com/questions/4627320/java-hardware-acceleration而且还很要命的一点,swing的组长似乎对于gui好看不好看没有什么概念,缺省用的是unix那一套gui,就是几十年前的那种gui,这里贴出苹果早期的gui,macos也是freebsd的变种,都是unix的一员,所以早期版本的gui还保留了比较多unix原始的形态,看看就能感觉出来跟swing那个是不是很像了,看拖动条的紫色,几乎一摸一样unix gui早期机能所限,能做成这样已经很好了,但是进入90年代之后,还在画这种窗口,那就只能给人感觉原始了这是第二个阶段,这个阶段的过程就是swing和swt两边吵翻天,内讧,最后java在gui上大败,铩羽而归,因为swing缺省的界面丑,慢,加上java早期本身也不怎么快,所以java在gui上几乎是没有咬下任何市场,早期在智能机上的j2me也被教主复出之后的iphone搞死了,swt最大的遗产就是eclipse了,swing最大的遗产就是idea还有netbeans了然后进入第三个阶段,java后来发现,swing这个搞法不是个办法,没人用,sun在临死之前,总算头脑清醒了一回,走回swt的道路,搞出了javafx,然后sun就挂了,一开始是找ibm收购,ibm嫌贵,不买,然后sun才去找oracle收购,javafx也跟swt一样,根据os会自动选择不同的图形库,比如win上用的就是directx3d,mac上用的就是metal(将来,参考project lanai)那这里还有一个分支,那就是教主复出之后,把iphone搞起来了,一搞起来就把可以装在j2me的智能机给搞死了,然后有一家公司叫做Google,Google其实在sun作为java当家的时候,Google大量参与了java标准的制定,一个是Google一个是Apache,这俩货几乎常年都在jcp执行委员会里呆着,所以java早期的大量标准的制定,都跟这俩货有很大关系。那Google看到苹果做出了iphone之后,就有样学样,弄出了安卓,当然一开始是鲁宾做的,然后Google收购来的,但是Google在安卓上使用的是一个魔改的java,所以保留了很多java原始的特性,当然Google拿到java之后,它就没照搬swing,但是呢,它保留了很多swing的影子,然后在Google被oracle告了之后,另劈新道,搞出了dart,flutter这些东西,而Google的skia引擎目前主要还是依赖opengl渲染,将来会加入vulkan渲染,因为这两是标准,这就跟swing很像了你看,这个阶段swt变成了javafx,swing承认失败,java2d组开始更多地投入javafx,而javafx的设计沿袭了swt的设计,就是对操作系统底层的api做一层thin wrapper,但是安卓这边,则更多地延续了swing的设计,到了flutter阶段,实际上Google也还是自己做一层thick wrapper,flutter能保证不同操作系统上看到的界面是一样的,如果你用的是material design的话,那在ios上也有涟漪效果,如果你用的是cuptertino的话,那你在安卓机器上也能看到金属高光,但是这样做成本就高,但是Google有钱也有人,而且一直有传言说,Google招了太多人进去,无事可做,所以安排点工作给他们去做,哪怕这些工作只是重复造轮子,但是总比让他们闲着好,所以就让他们去造更快更好的轮子吧。flutter的设计就有一点这种味道在里面,什么都自己做,而且Google还做得相当不错但是java没那么多人,所以javafx就选择了更加鸡贼一点的道路,做一层thin wrapper,看上去不一样就不一样,跨平台能用就行,javafx的组其实没有那么多人,常见就那么几个,johan,kevin,还有巴西人博格斯,其实没几个,flutter team的规模远比javafx的开发规模要大得多那这个阶段就是我们目前正在经历的阶段,如果你问java gui用啥,那就是javafx,这个是java所有项目的共识,javafx也比较容易扩展,13之后,你都可以用native的手段来渲染,可以借助nativefx或者是driftfx项目,然后用上比如qt之类的控件。这里说一下,javafx的社区可以看到很多说德语的人,来自德国,奥地利,瑞士等,很多相关项目都是德国人在做,德国人在这种工程领域上造诣可见一斑。如果你不纠结于java自身,那你也可以看看flutter这些,dart/flutter其实就是Google版的java/javafx,因为dart以及dartvm的作者之一lars bak本身就是缺省jvm hotspot的作者,它的很多设计,原理什么,都跟java社区的差不多,不能说完全一样,但是你都能看到很多共同点,比如pub就是maven,skia就是prism,dart就是java,如果你会java的话,搞dart很快,分分钟上手总结一下,第一阶段awt,第二阶段swing和swt,第三阶段javafx和flutter如果你要学,学最后两个编辑于 2019-09-02 23:30赞同 34214 条评论分享收藏喜欢收起子谦幻想学者 关注Java的GUI我倒是用过不少。Swing的话是Java最传统的GUI了,初始界面不怎么样,但是有很多LookAndFeel,如果想偷懒可以直接使用其他人封装的LookAndFeel改变界面,效果也是不错的,Swing经过了这么久的发展,已经十分成熟,多数的坑都能够找到解决办法,淘汰到算不上,不过好像已经不更新了,因为Java在主推另一个GUI技术,JavaFX。JavaFX是Java目前官方推荐的GUI技术,XML进行布局,支持CSS,你学过HTML之类的WEB开发的话,应该知道CSS是个啥,他的界面极其灵活,通过FXML和CSS也能够很快速的构建界面,但是系统的资源消耗会比较大,不过这应该不是什么问题吧。它还直接支持音频视频和动画效果,好像还有3D功能,不过现在应该还不稳定,JavaFX应该还是可以移植到Android的,ios不是很清楚。但是这个东西在windows之外的平台上面会有坑点,要特别注意。SWT、JFace,这个是Eclipse用的技术,就是那个Java的开发工具Eclipse,还可以吧,但是需要一些平台相关的东西,用起来稍微有点别扭,UI里面有些细节不能自己控制,但是界面的效率会高一些,毕竟是直接的JNI,很多是直接使用系统本身的控件,好像是支持CSS的,反正我没用出来过。QtJambi,Qt的Java版,Qt本身是c++的类库,这个是给java提供的语言绑定,不过qt的话只到了Qt4,也不知道有没有人继续更新维护。这个版本提供的设计器好像有点问题,不过可以自己编写代码进行设计,反正设计器的ui文件最终也会变成java代码,如果你用过Qt的话可以试试。Gnome-Java,Linux系统可以试试,因为他不支持windows,我没有用过他,只是知道而已。哦,对了,AWT,不知道你为啥会提到这个,现在你就当他不存在好了,基本是不会直接使用AWT的。2020 - 8 -14 更新Java版本有了一个新的Qt封装,基于javacpp技术,这个应该比较新,喜欢qt的应该可以尝试一下,名字叫做JavaCPP Presets For Qt,我们可以直接在maven搜索qt就能找到,它依赖于JavaCPP Presets For Qt Platforms,所以需要在maven中加入他。编辑于 2020-08-14 10:04赞同 334 条评论分享收藏喜欢
【SWT】常用代码(二)-阿里云开发者社区
【SWT】常用代码(二)-阿里云开发者社区
产品解决方案文档与社区权益中心定价云市场合作伙伴支持与服务了解阿里云售前咨询 95187-1 在线服务售后咨询 4008013260 在线服务其他服务 我要建议 我要投诉更多联系方式备案控制台开发者社区首页探索云世界探索云世界云上快速入门,热门云上应用快速查找了解更多问产品动手实践考认证TIANCHI大赛活动广场活动广场丰富的线上&线下活动,深入探索云世界任务中心做任务,得社区积分和周边高校计划让每位学生受益于普惠算力训练营资深技术专家手把手带教话题畅聊无限,分享你的技术见解开发者评测最真实的开发者用云体验乘风者计划让创作激发创新阿里云MVP遇见技术追梦人直播技术交流,直击现场下载下载海量开发者使用工具、手册,免费下载镜像站极速、全面、稳定、安全的开源镜像技术资料开发手册、白皮书、案例集等实战精华插件为开发者定制的Chrome浏览器插件探索云世界新手上云云上应用构建云上数据管理云上探索人工智能云计算弹性计算无影存储网络倚天云原生容器serverless中间件微服务可观测消息队列数据库关系型数据库NoSQL数据库数据仓库数据管理工具PolarDB开源向量数据库热门Modelscope模型即服务弹性计算云原生数据库物联网云效DevOps龙蜥操作系统平头哥钉钉开放平台大数据大数据计算实时数仓Hologres实时计算FlinkE-MapReduceDataWorksElasticsearch机器学习平台PAI智能搜索推荐人工智能机器学习平台PAI视觉智能开放平台智能语音交互自然语言处理多模态模型pythonsdk通用模型开发与运维云效DevOps钉钉宜搭支持服务镜像站码上公益
开发者社区
开发与运维
文章
正文
【SWT】常用代码(二)
2023-08-16
89
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议》和
《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:
【SWT】常用代码(二)
零零年夏
目录
热门文章
最新文章
为什么选择阿里云什么是云计算全球基础设施技术领先稳定可靠安全合规分析师报告产品和定价全部产品免费试用产品动态产品定价价格计算器云上成本管理解决方案技术解决方案文档与社区文档开发者社区天池大赛培训与认证权益中心免费试用高校计划企业扶持计划推荐返现计划支持与服务基础服务企业增值服务迁云服务官网公告健康看板信任中心关注阿里云关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务售前咨询:95187-1售后服务:400-80-13260法律声明及隐私权政策Cookies政策廉正举报安全举报联系我们加入我们阿里巴巴集团淘宝网天猫全球速卖通阿里巴巴国际交易市场1688阿里妈妈飞猪阿里云计算AliOS万网高德UC友盟优酷钉钉支付宝达摩院淘宝海外阿里云盘饿了么© 2009-2024 Aliyun.com 版权所有 增值电信业务经营许可证: 浙B2-20080101 域名注册服务机构许可: 浙D3-20210002 京D3-20220015浙公网安备 33010602009975号浙B2-20080101-4