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 [email protected] 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
【轉(zhuǎn)帖】Java圖形界面開(kāi)發(fā):SWT全接觸-CSDN博客
【轉(zhuǎn)帖】Java圖形界面開(kāi)發(fā):SWT全接觸
最新推薦文章于?2024-01-26 13:17:00?發(fā)布
msdnchina
最新推薦文章于?2024-01-26 13:17:00?發(fā)布
閱讀量1.6w
收藏
20
點(diǎn)贊數(shù)
2
分類專欄:
JAVA
文章標(biāo)簽:
java
swt
JAVA
專欄收錄該內(nèi)容
8 篇文章
0 訂閱
訂閱專欄
本文轉(zhuǎn)自:https://www.xuebuyuan.com/1457795.html
從Java誕生至今,已經(jīng)在太多的領(lǐng)域取得成功,然而它卻很少在圖形界面程序上嶄露頭角。究其原因,Java語(yǔ)言缺省的圖形界面開(kāi)發(fā)包AWT和SWING實(shí)在是難脫其究,無(wú)論速度和外觀,它們都難以讓人接受。如今,Eclipse組織編寫(xiě)的SWT開(kāi)發(fā)包,為Java程序員提供了AWT和SWING之外的一個(gè)更佳的選擇。在本文中,對(duì)SWT做了簡(jiǎn)單但盡可能全面的介紹。
?
????????Java語(yǔ)言的聲望和它在桌面應(yīng)用程序(GUI程序)所取得的成就顯然極不相符,至今仍然很少能看到非常成功Java桌面程序。雖然有JBuilder,Netbean,JProbe等大型軟件作為代表,但這仍不能證明Java的GUI程序是成功的:它們的外觀總是和同一操作系統(tǒng)平臺(tái)下的其它軟件顯得格格不入。對(duì)機(jī)器配置的需求也似乎永無(wú)止境,這使得它們只能被一些總是擁有當(dāng)前最高性能PC的程序員們所容忍,或是那些不在乎金錢(qián)和時(shí)間的專業(yè)用戶所接受。對(duì)絕大多數(shù)計(jì)算機(jī)使用者來(lái)說(shuō),AWT或SWING代表著怪異的界面和無(wú)法接受的速度。Standard Widget Toolkit(SWT)或許是Java這一噩夢(mèng)的終結(jié)者,廣大Java程序員終于可以開(kāi)發(fā)出高效率的GUI程序,它們擁有標(biāo)準(zhǔn)的外觀,幾乎沒(méi)有人能看出你的程序是用Java寫(xiě)出來(lái)的,更為重要的是,這些程序是跨平臺(tái)的。
????????SWT本身僅僅是Eclipse組織為了開(kāi)發(fā)Eclipse IDE環(huán)境所編寫(xiě)的一組底層圖形界面API?;蛟S是無(wú)心插柳,或是有意為之,至今為止,SWT無(wú)論是在性能和外觀上,都超越了SUN公司提供的AWT和SWING。目前Eclipse IDE已經(jīng)開(kāi)發(fā)到了2.1版本,SWT已經(jīng)十分穩(wěn)定。這里指的穩(wěn)定應(yīng)該包含兩層意思:
????????一是指性能上的穩(wěn)定,其中的關(guān)鍵是源于SWT的設(shè)計(jì)理念。SWT最大化了操作系統(tǒng)的圖形構(gòu)件API,就是說(shuō)只要操作系統(tǒng)提供了相應(yīng)圖形的構(gòu)件,那么SWT只是簡(jiǎn)單應(yīng)用JNI技術(shù)調(diào)用它們,只有那些操作系統(tǒng)中不提供的構(gòu)件,SWT才自己去做一個(gè)模擬的實(shí)現(xiàn)??梢钥闯鯯WT性能上的穩(wěn)定大多時(shí)候取決于相應(yīng)操作系統(tǒng)圖形構(gòu)件的穩(wěn)定性。
????????另一個(gè)穩(wěn)定是指SWT API包中的類、方法的名稱和結(jié)構(gòu)已經(jīng)少有改變,程序員不用擔(dān)心由于Eclipse組織開(kāi)發(fā)進(jìn)度很快(Eclipse IDE每天都會(huì)有一個(gè)Nightly版本的發(fā)布),而導(dǎo)致自己的程序代碼變化過(guò)大。從一個(gè)版本的SWT更新至另一版本,通常只需要簡(jiǎn)單將SWT包換掉就可以了。
?
第一個(gè)SWT程序
?
????????下面讓我們開(kāi)始一個(gè)SWT程序。(注意:以下的例子和說(shuō)明主要針對(duì)Windows平臺(tái),其它的操作系統(tǒng)應(yīng)該大同小異)。首先要在Eclipse安裝文件中找到SWT包,Eclipse組織并不提供單獨(dú)的SWT包下載,必須下載完整的Eclipse開(kāi)發(fā)環(huán)境才能得到SWT包。SWT是作為Eclipse開(kāi)發(fā)環(huán)境的一個(gè)插件形式存在,可以在${你的eclipse安裝路徑}/plugins路徑下的眾多子目錄下去搜索SWT.JAR文件,在找到的JAR文件中包含了SWT全部的Java類文件。因?yàn)镾WT應(yīng)用了JNI技術(shù),因此同時(shí)也要找到相對(duì)應(yīng)的JNI本地化庫(kù)文件,由于版本和操作平臺(tái)的不同,本地化庫(kù)文件的名稱會(huì)有些差別,比如SWT-WIN32-2116.DLL是Window平臺(tái)下Eclipse Build 2116的動(dòng)態(tài)庫(kù),而在Unix平臺(tái)相應(yīng)版本的庫(kù)文件的擴(kuò)展名應(yīng)該是.so,等等。注意的是,Eclipse是一個(gè)開(kāi)放源代碼的項(xiàng)目,因此你也可以在這些目錄中找到SWT的源代碼,相信這會(huì)對(duì)開(kāi)發(fā)很有幫助。?
下面是一段打開(kāi)空窗口的代碼(只有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();
// 開(kāi)始事件處理循環(huán),直到用戶關(guān)閉窗口
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
確信在CLASSPATH中包括了SWT.JAR文件,先用Javac編譯例子程序。編譯無(wú)錯(cuò)后可運(yùn)行java -Djava.library.path=${你的SWT本地庫(kù)文件所在路徑} com.e2one.example.OpenShell,比如SWT-WIN32-2116.DLL件所在的路徑是C:/swtlib,運(yùn)行的命令應(yīng)該是java -Djava.library.path=c:/swtlib com.e2one.example.OpenShell。成功運(yùn)行后,系統(tǒng)會(huì)打開(kāi)了一個(gè)空的窗口。
?
剖析SWT API
?
????????下面再讓我們進(jìn)一步分析SWT API的組成。所有的SWT類都用org.eclipse.swt做為包的前綴,下面為了簡(jiǎn)化說(shuō)明,我們用*號(hào)代表前綴org.eclipse.swt,比如*.widgets包,代表的是org.eclipse.swt.widgets包。
????????我們最常用的圖形構(gòu)件基本都被包括在*.widgets包中,比如Button,Combo,Text,Label,Sash,Table等等。其中兩個(gè)最重要的構(gòu)件當(dāng)數(shù)Shell和Composite。Shell相當(dāng)于應(yīng)用程序的主窗口框架,上面的例子代碼中就是應(yīng)用Shell構(gòu)件打開(kāi)一個(gè)空窗口。Composite相當(dāng)于SWING中的Panel對(duì)象,充當(dāng)著構(gòu)件容器的角色,當(dāng)我們想在一個(gè)窗口中加入一些構(gòu)件時(shí),最好到使用Composite作為其它構(gòu)件的容器,然后再去*.layout包找出一種合適的布局方式。SWT對(duì)構(gòu)件的布局也采用了SWING或AWT中Layout和Layout Data結(jié)合的方式,在*.layout包中可以找到四種Layout和與它們相對(duì)應(yīng)的布局結(jié)構(gòu)對(duì)象(Layout Data)。在*.custom包中,包含了對(duì)一些基本圖形構(gòu)件的擴(kuò)展,比如其中的CLabel,就是對(duì)標(biāo)準(zhǔn)Label構(gòu)件的擴(kuò)展,上面可以同時(shí)加入文字和圖片,也可以加邊框。StyledText是Text構(gòu)件的擴(kuò)展,它提供了豐富的文本功能,比如對(duì)某段文字的背景色、前景色或字體的設(shè)置。在*.custom包中也可找到一個(gè)新的StackLayout布局方式。
????????SWT對(duì)用戶操作的響應(yīng),比如鼠標(biāo)或鍵盤(pán)事件,也是采用了AWT和SWING中的Observer模式,在*.event包中可以找到事件監(jiān)聽(tīng)的Listener接口和相應(yīng)的事件對(duì)象,例如常用的鼠標(biāo)事件監(jiān)聽(tīng)接口MouseListener,MouseMoveListener和MouseTrackListener,及對(duì)應(yīng)的事件對(duì)象MouseEvent。
????????*.graphics包中可以找到針對(duì)圖片、光標(biāo)、字體或繪圖的API。比如可通過(guò)Image類調(diào)用系統(tǒng)中不同類型的圖片文件。通過(guò)GC類實(shí)現(xiàn)對(duì)圖片、構(gòu)件或顯示器的繪圖功能。
????????對(duì)不同平臺(tái),Eclipse還開(kāi)發(fā)了一些富有針對(duì)性的API。例如,在Windows平臺(tái),可以通過(guò)*.ole.win32包很容易的調(diào)用ole控件,這使Java程序內(nèi)嵌IE瀏覽器或Word、Excel等程序成為可能!
????????要進(jìn)一步了解SWT的情況,可以在Eclipse IDE的幫助文檔中找到SWT的JavaDoc說(shuō)明。當(dāng)然最深入的了解莫過(guò)于去讀SWT的源代碼,這也正是開(kāi)放源代碼項(xiàng)目對(duì)程序員的魅力所在!?
??????????????????????????????????????????????????????????????????????????????更復(fù)雜的程序
????????下面讓我們展示一個(gè)比上面例子更加復(fù)雜一些的程序。這個(gè)程序擁有一個(gè)文本框和一個(gè)按鍵,當(dāng)用戶點(diǎn)擊按鍵的時(shí)候,文本框顯示一句歡迎信息。
????????為了文本框和按鍵有比較合理的大小和布局,這里采用了GradLayout布局方式。這種布局是SWT中最常用也是最強(qiáng)大的布局方式,幾乎所有的格式都可能通過(guò)GradLayout去達(dá)到。下面的程序也涉及到了如何應(yīng)用系統(tǒng)資源(Color),以及如何釋放系統(tǒng)資源。
?
private void initShell(Shell shell) {
//為Shell設(shè)置布局對(duì)象
GridLayout gShellLay = new GridLayout();
shell.setLayout(gShellLay);
//構(gòu)造一個(gè)Composite構(gòu)件作為文本框和按鍵的容器
Composite panel = new Composite(shell,SWT.NONE);
//為Panel指定一個(gè)布局結(jié)構(gòu)對(duì)象。這里讓Panel盡可能的占滿Shell,也就是全部應(yīng)用程序窗口的空間。
GridData gPanelData = new
GridData(GridData.GRAB_HORIZONTAL|GridData.GRAB_VERTICAL|GridData.FILL_BOTH);
panel.setLayoutData(gPanelData);
//為Panel也設(shè)置一個(gè)布局對(duì)象。文本框和按鍵將按這個(gè)布局對(duì)象來(lái)顯示。
GridLayout gPanelLay = new GridLayout();
panel.setLayout(gPanelLay);
//為Panel生成一個(gè)背景色
final Color bkColor = new Color(Display.getCurrent(),200,0,200);
panel.setBackground(bkColor);
//生成文本框
final Text text = new Text(panel,SWT.MULTI|SWT.WRAP);
//為文本框指定一個(gè)布局結(jié)構(gòu)對(duì)象,這里讓文本框盡可能的占滿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");
//為按鍵指定鼠標(biāo)事件
butt.addMouseListener(new MouseAdapter(){
public void mouseDown(MouseEvent e){
//當(dāng)用戶點(diǎn)擊按鍵的時(shí)候,顯示信息
text.setText("Hello SWT");
}
});
//當(dāng)主窗口關(guān)閉時(shí),會(huì)觸發(fā)DisposeListener。這里用來(lái)釋放Panel的背景色。
shell.addDisposeListener(new DisposeListener(){
public void widgetDisposed(DisposeEvent e) {
bkColor.dispose();
}
});
}
把這段代碼中的方法initShell()加入到第一個(gè)打開(kāi)空窗口的例子中,得到的是一段能成功運(yùn)行的完整GUI應(yīng)用程序。運(yùn)行方法可參考第一個(gè)例子。
?
系統(tǒng)資源的管理
?
????????在一個(gè)圖形化的操作系統(tǒng)中開(kāi)發(fā)程序,都要調(diào)用系統(tǒng)中的資源,如圖片、字體、顏色等。通常這些資源都是有限的,程序員務(wù)必非常小心的使用這些資源:當(dāng)不再使用它們時(shí),就請(qǐng)盡快釋放,不然操作系統(tǒng)遲早會(huì)油盡燈枯,不得不重新啟動(dòng),更嚴(yán)重的會(huì)導(dǎo)致系統(tǒng)崩潰。
????????SWT是用Java開(kāi)發(fā)的,Java語(yǔ)言本身的一大優(yōu)勢(shì)就是JVM的“垃圾回收機(jī)制”,程序員通常不用理會(huì)變量的釋放,內(nèi)存的回收等問(wèn)題。那么對(duì)SWT而言,系統(tǒng)資源的操作是不是也是如此?答案是一個(gè)壞消息,一個(gè)好消息。
????????壞消息是SWT并沒(méi)采用JVM的垃圾回收機(jī)制去處理操作系統(tǒng)的資源回收問(wèn)題,一個(gè)關(guān)鍵的因素是因?yàn)镴VM的垃圾回收機(jī)制是不可控的,也就是說(shuō)程序員不能知道,也不可能做到在某一時(shí)刻讓JVM回收資源!這對(duì)系統(tǒng)資源的處理是致命的,試想你的程序希望在一個(gè)循環(huán)語(yǔ)句中去查看數(shù)萬(wàn)張圖片,常規(guī)的處理方式是每次調(diào)入一張,查看,然后就立即釋放該圖片資源,而后在循環(huán)調(diào)入下一張圖片,這對(duì)操作系統(tǒng)而言,任何時(shí)刻程序占用的僅僅是一張圖片的資源。但如果這個(gè)過(guò)程完全交給JVM去處理,也許會(huì)是在循環(huán)語(yǔ)句結(jié)束后,JVM才會(huì)去釋放圖片資源,其結(jié)果可能是你的程序還沒(méi)有運(yùn)行結(jié)束,操作系統(tǒng)已經(jīng)宕掉。
????????但下面的好消息也許會(huì)讓這個(gè)壞消息變得無(wú)關(guān)緊要。對(duì)于SWT,只需了解兩條簡(jiǎn)單的“黃金”法則就可以放心的使用系統(tǒng)資源!之所以稱為黃金法則,一是因?yàn)樯?,只有兩條,二是因?yàn)樗鼈兂銎娴暮?jiǎn)單。第一條是“誰(shuí)占用,誰(shuí)釋放”,第二條是“父構(gòu)件被銷毀,子構(gòu)件也同時(shí)被銷毀”。第一條原則是一個(gè)無(wú)任何例外的原則,只要程序調(diào)用了系統(tǒng)資源類的構(gòu)造函數(shù),程序就應(yīng)該關(guān)心在某一時(shí)刻要釋放這個(gè)系統(tǒng)資源。比如調(diào)用了
?
Font font = new Font (display, "Courier", 10, SWT.NORMAL);
那么就應(yīng)該在不在需要這個(gè)Font的時(shí)候調(diào)用
?
font.dispose();
對(duì)于第二個(gè)原則,是指如果程序調(diào)用某一構(gòu)件的dispose()方法,那么所有這個(gè)構(gòu)件的子構(gòu)件也會(huì)被自動(dòng)調(diào)用dispose()方法而銷毀。通常這里指的子構(gòu)件與父構(gòu)件的關(guān)系是在調(diào)用構(gòu)件的構(gòu)造函數(shù)時(shí)形成的。比如,
?
Shell shell = new Shell();
Composite parent = new Composite(shell,SWT.NULL);
Composite child = new Composite(parent,SWT.NULL);
其中parent的父構(gòu)件是shell,而shell則是程序的主窗口,所以沒(méi)有相應(yīng)的父構(gòu)件,同時(shí)parent又包括了child子構(gòu)件。如果調(diào)用shell.dispose()方法,應(yīng)用第二條法則,那么parent和child構(gòu)件的dispose()方法也會(huì)被SWT API自動(dòng)調(diào)用,它們也隨之銷毀。
對(duì)于這兩個(gè)法則,參考資料2中的文章有更加深入的介紹。
?
線程問(wèn)題
?
????????在任何操作平臺(tái)的GUI系統(tǒng)中,對(duì)構(gòu)件或一些圖形API的訪問(wèn)操作都要被嚴(yán)格同步并串行化。例如,在一個(gè)圖形界面中的按鍵構(gòu)件可被設(shè)成可用狀態(tài)(enable)或禁用狀態(tài)(disable),正常的處理方式是,用戶對(duì)按鍵狀態(tài)設(shè)置操作都要被放入到GUI系統(tǒng)的事件處理隊(duì)列中(這意味著訪問(wèn)操作被串行化),然后依次處理(這意味著訪問(wèn)操作被同步)。想象當(dāng)按鍵可用狀態(tài)的設(shè)置函數(shù)還沒(méi)有執(zhí)行結(jié)束的時(shí)候,程序就希望再設(shè)置該按鍵為禁用狀態(tài),勢(shì)必會(huì)引起沖突。實(shí)際上,這種操作在任何GUI系統(tǒng)都會(huì)觸發(fā)異常。
????????Java語(yǔ)言本身就提供了多線程機(jī)制,這種機(jī)制對(duì)GUI編程來(lái)說(shuō)是不利的,它不能保證圖形構(gòu)件操作的同步與串行化。SWT采用了一種簡(jiǎn)單而直接的方式去適應(yīng)本地GUI系統(tǒng)對(duì)線程的要求:在SWT中,通常存在一個(gè)被稱為"用戶線程"的唯一線程,只有在這個(gè)線程中才能調(diào)用對(duì)構(gòu)件或某些圖形API的訪問(wèn)操作。如果在非用戶線程中程序直接調(diào)用這些訪問(wèn)操作,那么SWTExcepiton異常會(huì)被拋出。但是SWT也在*.widget.Display類中提供了兩個(gè)方法可以間接的在非用戶線程的進(jìn)行圖形構(gòu)件的訪問(wèn)操作,這是通過(guò)的syncExec(Runnable)和asyncExec(Runnable)這兩個(gè)方法去實(shí)現(xiàn)的。例如:
?
//此時(shí)程序運(yùn)行在一個(gè)非用戶線程中,并且希望在構(gòu)件panel上加入一個(gè)按鍵。
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
Button butt = new Button(panel,SWT.PUSH);
butt.setText("Push");
}
});
方法syncExec()和asyncExec()的區(qū)別在于前者要在指定的線程執(zhí)行結(jié)束后才返回,而后者則無(wú)論指定的線程是否執(zhí)行都會(huì)立即返回到當(dāng)前線程。
?
SWT的擴(kuò)展:JFace
?
????????JFace與SWT的關(guān)系好比Microsoft的MFC與SDK的關(guān)系,JFace是基于SWT開(kāi)發(fā),其API比SWT更加易于使用,但功能卻沒(méi)SWT來(lái)的直接。比如下面的代碼應(yīng)用JFace中的MessageDialog打開(kāi)一個(gè)警告對(duì)話框:
?
MessageDialog.openWarning(parent,"Warning","Warning message");
如果只用SWT完成以上功能,語(yǔ)句不會(huì)少于30行!
????????JFace原本是為更加方便的使用SWT而編寫(xiě)的一組API,其主要目的是為了開(kāi)發(fā)Eclipse IDE環(huán)境,而不是為了應(yīng)用到其它的獨(dú)立應(yīng)用程序。因此在Eclipse 2.1版本之前,很難將JFace API完整的從Eclipse的內(nèi)核API中剝離出來(lái),總是要多多少少導(dǎo)入一些非JFace以外的Eclipse核心代碼類或接口才能得到一個(gè)沒(méi)有任何編譯錯(cuò)誤的JFace開(kāi)發(fā)包。但目前Eclipse組織似乎已經(jīng)逐漸意識(shí)到了JFace在開(kāi)發(fā)獨(dú)立應(yīng)用程序起到的重要作用,在正在開(kāi)發(fā)的2.1版本中,JFace也開(kāi)始變成了和SWT一樣的完整獨(dú)立的開(kāi)發(fā)包,只是這個(gè)開(kāi)發(fā)包還在變動(dòng)中(筆者寫(xiě)本文時(shí),應(yīng)用的Eclipse2.1M3版本)。JFace開(kāi)發(fā)包的包前綴是以org.eclipse.jface開(kāi)頭。JAR包和源代碼也和SWT一樣,也在${你的eclipse安裝路徑}/plugins路徑下去找。
????????對(duì)開(kāi)發(fā)人員來(lái)說(shuō),在開(kāi)發(fā)一個(gè)圖形構(gòu)件的時(shí)候,比較好的方式是先到JFace包去找一找,看是不是有更簡(jiǎn)潔的實(shí)現(xiàn)方法,如果沒(méi)有再用SWT包去自己實(shí)現(xiàn)。比如JFace為對(duì)話框提供了很好的支持,除了各種類型的對(duì)話框(比如上面用的MessageDialog,或是帶有Title欄的對(duì)話框),如要實(shí)現(xiàn)一個(gè)自定義的對(duì)話框也最好從JFace中的Dialog類繼承,而不是從SWT中的*.widget.Dialog繼承。
????????應(yīng)用JFace中的Preference包中的類很容易為自己的軟件做出一個(gè)很專業(yè)的配置對(duì)話框。對(duì)于Tree、Table等圖形構(gòu)件,它們?cè)陲@示的同時(shí)也要和數(shù)據(jù)關(guān)聯(lián),例如Table中顯示的數(shù)據(jù),在JFace中的View包中為此類構(gòu)件提供了Model-View方式的編程方法,這種方法使顯示與數(shù)據(jù)分開(kāi),更加利于開(kāi)發(fā)與維護(hù)。JFace中提供最多的功能就是對(duì)文本內(nèi)容的處理??梢栽趏rg.eclipse.jface.text.*包中找到數(shù)十個(gè)與文本處理相關(guān)類。
?
與應(yīng)用程序更近一步
?
????????Java程序通常是以class文件的方式發(fā)布的,運(yùn)行class需要JRE或JDK的支持。這又是Java GUI程序的另一個(gè)致命的弱點(diǎn),想象對(duì)一個(gè)面向廣大用戶的應(yīng)用程序來(lái)說(shuō),無(wú)論你的程序功能有多簡(jiǎn)單,或是你的代碼十分的精簡(jiǎn),你都不得不讓用戶去下載一個(gè)7、8M的JRE,那是多么令人沮喪的一件事。而且對(duì)程序員來(lái)說(shuō),Class通常意味著源代碼的暴露,反編譯的工具讓那些居心叵測(cè)的人輕易得到你的源代碼。雖然有很多對(duì)Class的加密方法,但那總是以犧牲性能為代價(jià)的。好在我們還有其它的方式可用:把Class編譯成exe文件!
????????參考資料3提供了應(yīng)用GCJ將SWT編譯成exe文件的詳細(xì)方法。作為對(duì)那篇文章的補(bǔ)充,就是目前也可以通過(guò)下載Cygwin得到Windows下的GCJ。 Excelsior也是筆者曾經(jīng)用過(guò)的一款很好的編譯器,唯一的遺憾就是它的價(jià)格!
????????通過(guò)SWT開(kāi)發(fā)包,簡(jiǎn)單、跨平臺(tái)、可靠等這些Java語(yǔ)言本身所具有的優(yōu)點(diǎn)正漸漸融合到圖形界面的應(yīng)用程序開(kāi)發(fā)中去。因此,我相信Java語(yǔ)言的另一扇成功之門(mén)正在逐漸打開(kāi)。
參考資料:
http://www.e2one.com 極一軟件工作室應(yīng)用SWT&JFace API開(kāi)發(fā)出的企業(yè)實(shí)時(shí)通訊IM軟件,是SWT&JFace開(kāi)發(fā)Standalone程序的范例。
http://www.eclipse.org/articles/swt-design-2/swt-design-2.html 這篇文章中詳細(xì)論述了SWT開(kāi)發(fā)者應(yīng)該如何管理系統(tǒng)資源。
http://www-900.ibm.com/developerWorks/cn/linux/guitoolkit/j-nativegui/index.shtml 描述了如何將SWT程序應(yīng)用GCJ編譯成本機(jī)應(yīng)用程序文件。
http://www-900.ibm.com/developerWorks/cn/java/l-eclipse/index.shtml 介紹了Eclipse的使用及簡(jiǎn)單的插件開(kāi)發(fā)過(guò)程。
www.eclipse.org 所有的關(guān)于Eclipse, SWT, JFace的問(wèn)題都可以在這里找到答案。也是下載Eclipse開(kāi)發(fā)環(huán)境的網(wǎng)站。
http://www.cygwin.com/ 可以得得到Windows版本的GCJ。
關(guān)于作者
倪大鵬,有多年的軟件開(kāi)發(fā)經(jīng)驗(yàn),其中近四年的時(shí)間集中在Java相關(guān)技術(shù)的研究??梢酝ㄟ^(guò)e-mail: [email protected]與他聯(lián)系。
『引自?IBM DW中國(guó)』?
優(yōu)惠劵
msdnchina
關(guān)注
關(guān)注
2
點(diǎn)贊
踩
20
收藏
覺(jué)得還不錯(cuò)?
一鍵收藏
知道了
0
評(píng)論
【轉(zhuǎn)帖】Java圖形界面開(kāi)發(fā):SWT全接觸
本文轉(zhuǎn)自:https://www.xuebuyuan.com/1457795.html從Java誕生至今,已經(jīng)在太多的領(lǐng)域取得成功,然而它卻很少在圖形界面程序上嶄露頭角。究其原因,Java語(yǔ)言缺省的圖形界面開(kāi)發(fā)包AWT和SWING實(shí)在是難脫其究,無(wú)論速度和外觀,它們都難以讓人接受。如今,Eclipse組織編寫(xiě)的SWT開(kāi)發(fā)包,為Java程序員提供了AWT和SWING之外的一個(gè)更佳的選擇。在本文中...
復(fù)制鏈接
掃一掃
專欄目錄
Java SWT 圖形用戶界面教程 PDF
07-22
Java SWT 圖形用戶界面教程 PDF
Java SWT 圖形用戶界面教程 PDF
Java圖形化界面編程超詳細(xì)知識(shí)點(diǎn)(5)——Swing編程
m0_66908465的博客
04-05
9071
本篇文章主要介紹Java圖形化界面編程中Swing類庫(kù)的詳細(xì)知識(shí)點(diǎn)總結(jié),方便大家在圖形化界面編程時(shí)快速找到自己所需要的方法,希望對(duì)大家完成課設(shè)有所幫助。
參與評(píng)論
您還未登錄,請(qǐng)先
登錄
后發(fā)表或查看評(píng)論
JAVA SWT table界面+數(shù)據(jù)(多圖)
華容道的博客
03-01
1萬(wàn)+
界面
1.布局
選用兩個(gè)composite,
設(shè)置shell的Layout為FillLayout;
設(shè)置Layout-Type(布局類型)為垂直分布;
設(shè)置右滑塊,下滑塊;
2.添加table組件
上面的composite添加的是CheckboxTableViewer,下面的是普通的Table;
同樣需要設(shè)置兩個(gè)composite的Layout屬性為Fill...
JavaGUI開(kāi)發(fā)之SWT框架【Shell】
最新發(fā)布
qq_62835094的博客
01-26
969
在SWT框架中,shell組件可以理解為窗口shell的創(chuàng)建需要指定Display()組件,因此shell的創(chuàng)建一般使用的都是如下代碼Display組件,負(fù)責(zé)連接OS操作系統(tǒng),同時(shí)負(fù)責(zé)管理GUI 組件。Display在SWT框架中有著舉足輕重的作用,但一般開(kāi)發(fā)過(guò)程中,沒(méi)怎么調(diào)用過(guò)display的api,因此本文不會(huì)詳細(xì)介紹Display,感興趣的讀者可以自行查看文檔。Shell組件的處境也和Display差不多。本文主要介紹Shell的創(chuàng)建方式,以及不同的創(chuàng)建方式得到的不同樣式。
Eclipse的SWT Designer下載地址及安裝方法(詳細(xì)教程)
熱門(mén)推薦
catfishlyf的博客
12-21
1萬(wàn)+
初次接觸SWT工程,打算用這個(gè)編寫(xiě)一個(gè)記事本。跟著我一步步從無(wú)到有建立SWT工程吧!
Java界面 SWT基本組件——文本框(Text)
海上機(jī)械師
03-10
1萬(wàn)+
SWT 中文本框(Text)的基本類型與基礎(chǔ)應(yīng)用
文本框是常見(jiàn)的控件之一,是可以輸入文字的控件。
文本框有單行文本框()和多行文本框()兩種,包含可編輯的文本框與只讀的文本框
本次試驗(yàn)通過(guò)一個(gè)小程序來(lái)說(shuō)明一個(gè)文本框常用的方法。該程序類似編輯器的功能,具有對(duì)文本進(jìn)行全選、使用剪貼板功能的復(fù)制和粘貼功能、
代碼如下:
shell.setSize(350, 283);
shell.setTex
“ODM OEM OBM的區(qū)別”網(wǎng)址匯總
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的介紹(配置,打包步驟)
無(wú)若
07-27
3844
SWT的介紹(附加:Eclicpse3.1.1下配置SWT,打包發(fā)布SWT程序,轉(zhuǎn)EXE一條龍過(guò)程記錄)?一、SWT的介紹?(使用SWT在各個(gè)操作系統(tǒng)上的效果)?SWT(Standard Widget Toolkit) Standard Widget Toolkit是一個(gè)開(kāi)源的GUI編程框架,與AWT/Swing有相似的用處,著名的開(kāi)源IDE-eclipse就是用SW
Eclipse下搭建SWT與Swing圖形界面開(kāi)發(fā)環(huán)境
深之JohnChen的專欄
07-29
1萬(wàn)+
Eclipse SWT Swing 圖形界面開(kāi)發(fā)
Java中AWT、Swing與SWT三大GUI技術(shù)的原理與效率差異
遠(yuǎn)方
09-27
2815
MineHe原創(chuàng)看了一下對(duì)Java GUI討論的帖子,所以寫(xiě)了一篇文章來(lái)闡述一下各種GUI技術(shù)的優(yōu)劣。Java世界中,目前最知名的三大GUI庫(kù)分別是:1、AWT(Abstract Window Toolkit)抽象窗口工具包庫(kù),包含于所有的Java SDK中2、Swing高級(jí)圖形庫(kù),包含于Java2 SDK中3、來(lái)自IBM Eclipse開(kāi)源項(xiàng)目的SWT(Standard Widget Toolk
JavaGUI——Swing組件基礎(chǔ)
weixin_46235428的博客
12-03
851
文章目錄一、面板組件二、文本框密碼框標(biāo)簽組件三、單選框和復(fù)選框四、下拉框列表框滾動(dòng)窗格組件五、多行文本框組件六、菜單欄組件七、流式布局八、網(wǎng)格布局九、邊界布局
一、面板組件
一個(gè)界面只可以有一個(gè)JFrame頂層容器,但是可以有多個(gè)JPanel面板組件,
而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各種布局管理器,
這樣可以組合使用達(dá)到較為復(fù)雜的布局效果。
面板組件可以設(shè)置布局模式,實(shí)現(xiàn)多模式布局,但默認(rèn)為流式布局。
面板組件里可以添加其他組件
代碼如下(
SWT/JFace(一)——概述
cole丶的博客
03-12
1711
一、SWT
1. 概述
SWT(Standard Widget Toolkit,標(biāo)準(zhǔn)圖形工具箱)是一種用java開(kāi)發(fā)的GUI程序的技術(shù)。與出自Sun的AWT (Abstract Widget Toolkit,抽象圖形工具箱)和Swing不同,SWT是Eclipse的開(kāi)發(fā)人員自行建造的。它無(wú)論在界面美觀度上還是在性能上都遠(yuǎn)遠(yuǎn)超越了AWT和Swing,即使和操作系統(tǒng)上的本地圖形界面程序相比也毫不遜色,...
【SWT】創(chuàng)建自己的SWT組件
小子寶丁的博客
08-08
1239
本文為部分譯文,交代了兩種方法創(chuàng)建SWT小組件
SWT 全接觸
hangke的專欄
10-25
1008
?Java 世界的人似乎一直都對(duì) Java 的桌面應(yīng)用程序十分不滿,從 AWT 到 SWING,從默認(rèn)的 Theme到第三方的產(chǎn)品,不是太難看(AWT)就是在某些平臺(tái)有 BUG(SWING,Quaqua--一個(gè)Windows平臺(tái)下的仿Mac的主題包),再不就是對(duì)中文支持不好(某些第三方 LookAndFeel)。于是,如果想要獲得和本機(jī)平臺(tái)一致的用戶界面和比較穩(wěn)定的性能,SWT就成
SWT介紹 -jobslong
weixin_30902675的博客
04-05
70
---恢復(fù)內(nèi)容開(kāi)始---
SWT介紹
說(shuō)明:為了達(dá)到更好的閱讀效果,請(qǐng)點(diǎn)擊以下鏈接,我們的dropbox里面下載pdf或者word文件,我們?yōu)槊恳粋€(gè)blog都生成了相關(guān)的文件,如果你需要相關(guān)的軟件也可以在評(píng)論留言,我可以上傳供大家下載;
https://www.dropbox.com/home用戶名:[email protected] 密碼:com.gmail@jobs...
swing,swt之爭(zhēng)(jvm和JNI相對(duì)于本地方法和遠(yuǎn)程方法)
sole_ghost的專欄
04-14
2241
1.正方 SWT優(yōu)于Swing Java語(yǔ)言的聲望和它在桌面應(yīng)用程序(GUI程序)所取得的成就顯然極不相符,至今仍然很少能看到非常成功Java桌面程序。雖然有JBuilder,Netbean,JProbe等大型軟件作為代表,但這仍不能證明Java的GUI程序是成功的:它們的外觀總是和同一操作系統(tǒng)平臺(tái)下的其它軟件顯得格格不入。對(duì)機(jī)器配置的需求也似乎永無(wú)止境,這使得它們只能被一些總是擁有當(dāng)前最高性能
SWT概述二
longcxm1的博客
01-31
398
SWT技術(shù)是第一套基于java的第三方的圖形工具庫(kù)。它的設(shè)計(jì)思想是提供一套通用的API,使得開(kāi)發(fā)出的圖形程序不僅可以不加修改地在平臺(tái)間移植,而且在外觀上和速度上能與使用C/C++等語(yǔ)言在操縱系統(tǒng)平臺(tái)上開(kāi)發(fā)出來(lái)的本地圖形程序毫無(wú)差別。
當(dāng)一個(gè)布局管理器被安裝到窗口上時(shí),它就負(fù)責(zé)安排窗口中各個(gè)控件的位置和尺寸。當(dāng)窗口尺寸發(fā)生變化時(shí),布局管理器會(huì)根據(jù)一定的策略重新計(jì)算這些數(shù)據(jù),并將控件...
org.eclipse.swt.win32的64位jar包
05-30
org.eclipse.swt.win32的64位jar包,不是32位的;之前網(wǎng)上下了個(gè)32位的,不能用。
[總結(jié)]對(duì)JFace的一點(diǎn)總結(jié)
李上網(wǎng)來(lái) Blog
03-07
2870
最近研究了一下JFace,下面寫(xiě)點(diǎn)總結(jié),備忘。
?
先簡(jiǎn)單介紹一下JFace:
基于Java的圖形庫(kù)最主要的有三種,它們分別是AWT、Swing和SWT;它們產(chǎn)生的時(shí)間大體如下:
AWT(abstract windowing toolkit,1995年,隨JDK一起,SUN公司) --->Swing(JFC, java foundation classes, 1997年,隨JDK一起,su
運(yùn)放參數(shù)的詳細(xì)解釋和分析-轉(zhuǎn)帖TI工作人員的資料(doc版)
07-27
在TI論壇看到的帖子,感覺(jué)挺好,就整理成word文檔了,內(nèi)容主要是運(yùn)放datasheet常見(jiàn)參數(shù)的解釋和分析。TI原帖地址“http://www.deyisupport.com/question_answer/analog/amplifiers/f/52/t/20214.aspx”...感謝原作者。
“相關(guān)推薦”對(duì)你有幫助么?
非常沒(méi)幫助
沒(méi)幫助
一般
有幫助
非常有幫助
提交
msdnchina
CSDN認(rèn)證博客專家
CSDN認(rèn)證企業(yè)博客
碼齡21年
暫無(wú)認(rèn)證
758
原創(chuàng)
1萬(wàn)+
周排名
46萬(wàn)+
總排名
462萬(wàn)+
訪問(wèn)
等級(jí)
5萬(wàn)+
積分
384
粉絲
254
獲贊
165
評(píng)論
880
收藏
私信
關(guān)注
熱門(mén)文章
linux下查看網(wǎng)卡信息的命令
108757
windows下 sqlplus / as sysdba 報(bào)ora-12560的終極解決方法
63333
使用netstat查看tcp連接、udp連接
41337
red hat官方的rhel操作系統(tǒng)版本號(hào)與內(nèi)核版本號(hào)的對(duì)應(yīng)關(guān)系
38746
檢查docker版本的兩個(gè)命令
38145
分類專欄
DPU
1篇
OceanBase
1篇
PostgreSQL數(shù)據(jù)庫(kù)
105篇
PG13配置參數(shù)
2篇
vagrant
1篇
UOS
1篇
tidb
2篇
龍芯
1篇
19c
1篇
Oracle DB 12c新特性
41篇
Oracle GoldenGate
28篇
MOS文章翻譯
86篇
HVR數(shù)據(jù)復(fù)制軟件
8篇
InfiniBand相關(guān)技術(shù)
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相關(guān)技術(shù)
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篇
最新評(píng)論
How to force xfs filesystem to shutdown?
Cat_yy9:
您好,麻煩問(wèn)下,這問(wèn)題解決了咩~
windows下 sqlplus / as sysdba 報(bào)ora-12560的終極解決方法
whitesails:
sqlplus /@數(shù)據(jù)庫(kù)的SID as sysdba 這樣可以了
獲得Windows主機(jī)的主機(jī)序列號(hào)
laidone:
SerialNumber
Default string??
DIX技術(shù)和T10 PI技術(shù)
weixin_42995907:
T10 PI格式化可以用哪些軟件
一個(gè)有用的技術(shù)網(wǎng)站
靜&慢&遠(yuǎn):
進(jìn)不去了
您愿意向朋友推薦“博客詳情頁(yè)”嗎?
強(qiáng)烈不推薦
不推薦
一般般
推薦
強(qiáng)烈推薦
提交
最新文章
PostgreSQL中的大寫(xiě)列名
2021中國(guó)DPU行業(yè)發(fā)展白皮書(shū)
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數(shù)據(jù)庫(kù)
105篇
PG13配置參數(shù)
2篇
vagrant
1篇
UOS
1篇
tidb
2篇
龍芯
1篇
19c
1篇
Oracle DB 12c新特性
41篇
Oracle GoldenGate
28篇
MOS文章翻譯
86篇
HVR數(shù)據(jù)復(fù)制軟件
8篇
InfiniBand相關(guān)技術(shù)
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相關(guān)技術(shù)
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篇
目錄
評(píng)論
被折疊的??條評(píng)論
為什么被折疊?
到【灌水樂(lè)園】發(fā)言
查看更多評(píng)論
添加紅包
祝福語(yǔ)
請(qǐng)?zhí)顚?xiě)紅包祝福語(yǔ)或標(biāo)題
紅包數(shù)量
個(gè)
紅包個(gè)數(shù)最小為10個(gè)
紅包總金額
元
紅包金額最低5元
余額支付
當(dāng)前余額3.43元
前往充值 >
需支付:10.00元
取消
確定
下一步
知道了
成就一億技術(shù)人!
領(lǐng)取后你會(huì)自動(dòng)成為博主和紅包主的粉絲
規(guī)則
hope_wisdom 發(fā)出的紅包
實(shí)付元
使用余額支付
點(diǎn)擊重新獲取
掃碼支付
錢(qián)包余額
0
抵扣說(shuō)明:
1.余額是錢(qián)包充值的虛擬貨幣,按照1:1的比例進(jìn)行支付金額的抵扣。 2.余額無(wú)法直接購(gòu)買(mǎi)下載,可以購(gòu)買(mǎi)VIP、付費(fèi)專欄及課程。
余額充值
JVM桌面框架的狀態(tài):SWT - 知乎切換模式寫(xiě)文章登錄/注冊(cè)JVM桌面框架的狀態(tài):SWT君慕賢什么是SWT?SWT源自Eclipse項(xiàng)目,最初是IDE。開(kāi)發(fā)人員為Eclipse建立了一個(gè)專用框架,用于在其中構(gòu)建其圖形組件。Swing和SWT的設(shè)計(jì)差異很大。Swing從頭開(kāi)始用Java實(shí)現(xiàn)小部件的繪制。SWT是依賴本地圖形對(duì)象的精簡(jiǎn)包裝API。這有兩個(gè)主要好處:窗口小部件看起來(lái)是平臺(tái)固有的。渲染速度更快。SWT APISWT背后有一個(gè)指導(dǎo)原則:因?yàn)樗蕾囉诒緳C(jī)圖形對(duì)象,所以每個(gè)組件都需要一個(gè)“父”對(duì)象作為其第一個(gè)參數(shù)。父對(duì)象是繪制子對(duì)象的對(duì)象。每個(gè)SWT組件的構(gòu)造函數(shù)都將父級(jí)作為其第一個(gè)參數(shù)。SWT的樂(lè)趣SWT具有一些特性,其中大多數(shù)與基于系統(tǒng)庫(kù)的設(shè)計(jì)有關(guān)。原生依賴性SWT為每個(gè)主流操作系統(tǒng)(例如Windows,Mac OSX等)提供JAR。例如,這是筆記本電腦的Maven依賴項(xiàng):
JAR坐標(biāo)取決于平臺(tái)。它們包含JNI綁定形式的必需本機(jī)庫(kù)。僅在運(yùn)行時(shí)需要JAR。SWT事件控制回路Swing提供了一個(gè)開(kāi)箱即用的事件控制循環(huán)。SWT并非如此。我們需要將以下代碼復(fù)制粘貼到我們的每個(gè)應(yīng)用程序中:SWT與操作系統(tǒng)之間的橋梁。創(chuàng)建頂層窗口。顯示它。盡管該系統(tǒng)的窗口本機(jī)資源尚未釋放。處理排隊(duì)的事件。如果什么也不需要做…什么都不做。釋放所有系統(tǒng)本機(jī)資源。無(wú)參構(gòu)造函數(shù)窗口和對(duì)話框Shell在SWT中均表示為實(shí)例。頂級(jí)窗口不需要父級(jí),因此Shell提供了一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)。但是由于Shell是圖形控件,因此其所有父類也都提供了這樣的構(gòu)造函數(shù)。這些構(gòu)造函數(shù)的主體為空,調(diào)用它們不會(huì)執(zhí)行任何操作。組件創(chuàng)建順序在父對(duì)象上實(shí)例化組件的順序就是將它們添加到該父對(duì)象的布局中的順序。如果需要將它們分離,則需要發(fā)揮創(chuàng)造力, 例如。將對(duì)構(gòu)造函數(shù)的調(diào)用包裝在lambda中。這是一個(gè)SWT示例,按此順序顯示標(biāo)簽,文本字段和按鈕:造型如上一片段所示,小部件的樣式在其實(shí)例化期間發(fā)生。這些樣式SWT以樣式位的形式編碼在類中:LEAD = 1 << 14LEFT = LEADSINGLE = 1 << 2BORDER = 1 << 11PUSH = 1 << 3等等循環(huán)依賴請(qǐng)注意,的構(gòu)造函數(shù)Control采用一個(gè)Composite實(shí)例,該實(shí)例本身是的子類Control。這種循環(huán)依賴關(guān)系綁定到同一包中。顯示表格數(shù)據(jù)SWT僅關(guān)注小部件及其渲染。與Swing和JavaFX相對(duì),它沒(méi)有數(shù)據(jù)模型的概念:您需要自己管理數(shù)據(jù)。對(duì)于0-D數(shù)據(jù)(例如文本字段),甚至對(duì)于1D數(shù)據(jù)(例如列表框),它都可以管理。對(duì)于二維數(shù)據(jù)(即表),這很麻煩。因此,大多數(shù)圖形框架在組件與其管理的數(shù)據(jù)之間引入了模型抽象。例如,Swing具有JTable和TableModel。Eclipse提供了JFace庫(kù),該庫(kù)通過(guò)SWT API等提供了數(shù)據(jù)模型抽象。例如,對(duì)于表,JFace具有TableViewer類。每個(gè)JFace查看器類的核心都包含一個(gè)SWT控件。包裝在很深的層次上適用:SWTTableColumn被JFace的包裝TableColumnViewer。本Viewer類具有豐富的類型層次來(lái)處理不同尺寸的數(shù)據(jù)。IStructuredContentProvider提供多行數(shù)據(jù),例如表中的數(shù)據(jù)。由于API是在泛型之前設(shè)計(jì)的,因此需要在StructuredViewer級(jí)別上進(jìn)行運(yùn)行時(shí)檢查以驗(yàn)證set的類型IContentProvider。此外,StructuredViewer還提供了排序,過(guò)濾和“裝飾”功能。注意,有一個(gè)庫(kù)可以管理模型和控件之間的雙向數(shù)據(jù)綁定:JFace Data Binding。我找不到兼容的版本。結(jié)論不可否認(rèn)SWT的成功。從使用它開(kāi)發(fā)的軟件項(xiàng)目數(shù)量中可以看出這一點(diǎn)。SWT提供了完全本地的外觀GUI。從好的方面來(lái)說(shuō),這意味著應(yīng)用程序具有本機(jī)行為。另一方面,與此功能相關(guān)的成本:對(duì)平臺(tái)庫(kù)的依賴,這違反了“一次編譯,隨處運(yùn)行”的承諾。由于缺少泛型,因此運(yùn)行時(shí)檢查而不是編譯時(shí)檢查。由于上述兩個(gè)原因,API有時(shí)會(huì)顯得笨拙。原文作者:didiao java原文鏈接:https://blog.csdn.net/weixin_46699878/article/details/113420613文章來(lái)源:CSDN侵刪發(fā)布于 2021-01-30 14:08JavaswtJava 程序員?贊同 1??添加評(píng)論?分享?喜歡?收藏?申請(qǐng)
Java中AWT、Swing與SWT三大GUI技術(shù)的原理與效率差異_swt和awt-CSDN博客
Java中AWT、Swing與SWT三大GUI技術(shù)的原理與效率差異
最新推薦文章于?2024-01-26 12:41:56?發(fā)布
光_影
最新推薦文章于?2024-01-26 12:41:56?發(fā)布
閱讀量2.1w
收藏
26
點(diǎn)贊數(shù)
5
看了一下對(duì)Java GUI討論的帖子,所以寫(xiě)了一篇文章來(lái)闡述一下各種GUI技術(shù)的優(yōu)劣。 Java世界中,目前最知名的三大GUI庫(kù)分別是: 1、AWT(Abstract Window Toolkit)抽象窗口工具包庫(kù),包含于所有的Java SDK中 2、Swing高級(jí)圖形庫(kù),包含于Java2 SDK中 3、來(lái)自IBM Eclipse開(kāi)源項(xiàng)目的SWT(Standard Widget Toolkit)標(biāo)準(zhǔn)窗口部件庫(kù),不包含于JDK中,需要從Eclipse單獨(dú)下載一、AWT的原理:小巧卻簡(jiǎn)陋的GUI系統(tǒng) AWT出現(xiàn)于Java 1.x中,是Java初期所內(nèi)置的一種面向窗口應(yīng)用的庫(kù)。AWT使用的技術(shù)是對(duì)等設(shè)計(jì)模式(即Peer),其結(jié)構(gòu)關(guān)系參見(jiàn)下圖。 從這幅類關(guān)系圖很容易看出AWT的技術(shù)實(shí)現(xiàn)和Peer設(shè)計(jì)模式。圖中,黃色的類是java.awt包中的類,淺灰色部分是Java虛擬機(jī)部分,而深灰色則是Windows平臺(tái)。 awt的重點(diǎn)是對(duì)等Peer設(shè)計(jì)模式。所謂Peer對(duì)等設(shè)計(jì)模式就是將awt控件直接對(duì)應(yīng)到運(yùn)行平臺(tái)上的一個(gè)類似或者等同控件上。比如圖中的Button類就是對(duì)應(yīng)了深灰色的Windows的標(biāo)準(zhǔn)Button功能。 對(duì)等模式用于在兩個(gè)控件間之間建立一個(gè)相互作用的聯(lián)系,而充當(dāng)紐帶的則是Java虛擬機(jī)和虛擬機(jī)-GDI的接口(以Windows為例子)。所以,我們可以看出,awt首先需要經(jīng)過(guò)通用的Java技術(shù)來(lái)控制圖形、事件等,然后Java虛擬機(jī)再將請(qǐng)求傳送到具體的平臺(tái)圖形和控件接口去交互。 對(duì)等模式的效率并不很高,因?yàn)锳WT通過(guò)了虛擬機(jī)和虛擬機(jī)-GDI這兩個(gè)層次來(lái)完成一個(gè)操作,經(jīng)過(guò)的層次系統(tǒng)越多,速度和效率就越慢。而且Peer對(duì)等模式有一個(gè)致命的弱點(diǎn):移植性非常差! 這就是Sun為什么要用Swing來(lái)誘惑我們離開(kāi)AWT的主要原因。因?yàn)榧热皇菍?duì)等模式,那么AWT就必須使用所有圖形操作系統(tǒng)的圖形接口功能的交集,因?yàn)?AWT的接口只有一套,所以,為了保證移植性,就只能使用所有系統(tǒng)都能夠支持的最少特性。因而我們經(jīng)??梢月?tīng)見(jiàn)有人抱怨AWT的功能太少,圖形太難看等等,這是為了保證移植性而作出的犧牲。二、猛犸巨獸的誕生-Swing 從Java2 即Java 1.2版本開(kāi)始,Sun開(kāi)始在JDK中提供一套新的圖形界面接口系統(tǒng)-Swing。所有Java愛(ài)好者都投入了對(duì)Swing的研究和迷戀。隨著一大批使用Swing作為界面技術(shù)的IDE和程序出現(xiàn),很快大家都意識(shí)到Swing的問(wèn)題所在。 一些人認(rèn)為Swing是輕量級(jí)的GUI系統(tǒng),無(wú)論官方如何說(shuō),沒(méi)有一個(gè)Java程序員會(huì)認(rèn)為Swing是輕量級(jí)的,相反,Swing是一個(gè)非常巨大的GUI庫(kù),這一點(diǎn)已經(jīng)是Java界的共識(shí)。 Swing的一些底層類是借用了AWT的Component、Container、Window等少數(shù)幾個(gè)基礎(chǔ)類。估計(jì)的原因是為了保持與AWT的兼容,方便大家將代碼移植到Swing上。 下面是Swing的類關(guān)系圖: 菊黃色類為Swing包的類。對(duì)比一下Swing的圖與AWT的圖,我們可以發(fā)現(xiàn),Swing圖中,awt體系中的深灰色Windows控件類已經(jīng)被去掉了。因?yàn)镾wing不再沿用Peer對(duì)等模式來(lái)實(shí)現(xiàn)GUI界面。 這是Swing的核心思想之一,Swing是完全基于Java自繪制圖形而實(shí)現(xiàn)的,因而Swing的界面看起來(lái)與Windows不再有任何類似,尤其是窗口控件的樣式(雖然我們也可以通過(guò)換膚來(lái)達(dá)到模擬Windows界面的效果)。所以上圖清楚的表明了Swing是一個(gè)高層的GUI系統(tǒng),而不像AWT那樣與運(yùn)行平臺(tái)技術(shù)更加靠近的系統(tǒng)。我們?nèi)匀挥肂utton與Panel來(lái)做了一個(gè)例子,圖中關(guān)系看出,Swing的類繼承關(guān)系比AWT要復(fù)雜的多,而且Swing類大多都經(jīng)過(guò)了中間的轉(zhuǎn)接類-JComponent。而我們常用的JFrame則另辟蹊徑,從awt的window繼承了下來(lái)。 這種結(jié)構(gòu)關(guān)系決定了Swing的龐大與復(fù)雜性。很多初學(xué)者都難以理解Swing的模式和結(jié)構(gòu)。 Swing 中的控件都是利用Java圖形功能繪制出來(lái)的,而不是對(duì)應(yīng)到平臺(tái)的一個(gè)具體控件實(shí)現(xiàn)。我們所用的所有Swing控件都是直接或者間接用Graphics繪制出來(lái)的,這種實(shí)現(xiàn)方式最大的好處是很靈活,我們想要什么樣的控件,就直接用Graphics繪制出來(lái)就是了。 Sun之所以用這種方式來(lái)實(shí)現(xiàn),是為了在不犧牲移植性的基礎(chǔ)上加入豐富的界面交互功能。但是缺點(diǎn)也很明顯:Swing的速度和效率是所有GUI系統(tǒng)中最慢的。 JBuilder和NetBeans的IDE都是純正的Swing界面,啟動(dòng)一下,然后操作一下,比如拖動(dòng)窗口之類的試試,你就會(huì)明白我在說(shuō)什么。 之所以導(dǎo)致這個(gè)結(jié)果,其原因是: 1、Swing的類層次太深,一個(gè)JFrame經(jīng)過(guò)了4層的類繼承關(guān)系,如果再加上虛擬機(jī)的圖形功能內(nèi)部實(shí)現(xiàn),就有6層的轉(zhuǎn)接關(guān)系,每一次的繼承和轉(zhuǎn)接都會(huì)消耗系統(tǒng)資源和速度損失。(過(guò)多的繼承會(huì)降低系統(tǒng)的速度,因?yàn)椴僮髯宇愅鞘褂没愔赶騺?lái)完成通用操作的) 2、Swing是基于自繪制圖形技術(shù)的,而Java為了保持可移植性,所以無(wú)法使用硬件加速和平臺(tái)特性來(lái)加快圖形操作的速度。因而Java的圖形技術(shù)都是“高層”的圖形技術(shù),就好像我們用Windows GDI去做動(dòng)畫(huà)一樣,當(dāng)然速度會(huì)很慢。三、新的曙光-SWT 應(yīng)該說(shuō),稍有閱歷的Java的程序員都知道很多人對(duì)Swing效率低下的抱怨。IBM贊助的Eclipse開(kāi)放源碼項(xiàng)目,搞了一個(gè)另類的GUI系統(tǒng)-SWT。 SWT是一個(gè)非常獨(dú)特的技術(shù),其核心思想和Windows上的DirectX如出一轍,也許SWT的程序員真的是借鑒了DirectX成功的秘訣。 下面是SWT技術(shù)原理的類關(guān)系圖:
?
我們會(huì)看見(jiàn),SWT的類關(guān)系非常直接而且易懂,有點(diǎn)像Delphi的API接口思想(此是我隨便亂彈,與Delphi沒(méi)有什么關(guān)系)。最重要的一點(diǎn)就是SWT的核心思想:SWT的功能實(shí)現(xiàn)是完全構(gòu)筑在以JNI為基礎(chǔ)的,對(duì)運(yùn)行平臺(tái)的直接調(diào)用封裝上的。 我們可以從圖中看見(jiàn),SWT的功能沒(méi)有通過(guò)任何Java虛擬機(jī)來(lái)操作,而是直接調(diào)用Windows GDI和Shell功能,這一點(diǎn)是通過(guò)JNI方法調(diào)用完成。 一定會(huì)有人說(shuō)SWT破壞了java的移植思想,不過(guò)Eclipse的大范圍流行,正好證明了SWT非但沒(méi)有阻礙移植性,反而提高了各種操作系統(tǒng)對(duì)于Java GUI的利用和期待。這不能不說(shuō)Eclipse項(xiàng)目組是充滿智慧的。 在Eclipse下,plugin目錄的swt目錄下,你可以發(fā)現(xiàn)一個(gè)dll動(dòng)態(tài)庫(kù)文件,這個(gè)dll就是JNI方法調(diào)用庫(kù)。 基于SWT技術(shù)實(shí)現(xiàn)的Eclipse界面不但速度很快,效率很高,而且比Swing要美觀的多。這就是直接調(diào)用封裝的效果。 我們看看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; } ?
我想任何一個(gè)有點(diǎn)Windows編程知識(shí)的人都會(huì)驚訝SWT的方式和做法,LRESULT、WindowProc都是做什么的,我想不用我多說(shuō)了。我第一次看見(jiàn)SWT的代碼時(shí),驚訝的張大了嘴,我實(shí)在無(wú)法想象SWT項(xiàng)目組敢于將Java技術(shù)與Windows平臺(tái)結(jié)合到如此緊密(當(dāng)然,Linux平臺(tái)版本也同樣的結(jié)合緊密)。我居然在SWT里發(fā)現(xiàn)了一個(gè)叫Tray的類,猜猜看它是干什么的?Tray可以讓你在java程序中顯示一個(gè)任務(wù)欄圖標(biāo),極度暈眩! 我想,不用再繼續(xù)介紹SWT了,你一定也很興奮,從SWT開(kāi)始,JavaGUI并不一定意味著緩慢、低效率、弱小的功能,Windows程序的眩目與速度,Java程序也可以擁有,這就是SWT的價(jià)值。 更加重要的是,SWT打破了長(zhǎng)久以來(lái)人們對(duì)于移植性的誤區(qū),似乎移植性就只能使用少到可憐的功能,我們也可以用JNI來(lái)?yè)肀ava的世界,我想,將來(lái)不僅僅是界面會(huì)借助JNI的方式,也許我們的很多Java思想都會(huì)悄悄的發(fā)生改變,也許有一天我們的Java代碼可以運(yùn)行的像VB一樣快,這種思想意識(shí)的變革就是SWT的價(jià)值。
至于Swing的結(jié)局,我不知道,但是我知道我更加喜歡輕量級(jí)的而且快速的SWT,給你的程序多一個(gè)選擇吧。
優(yōu)惠劵
光_影
關(guān)注
關(guān)注
5
點(diǎn)贊
踩
26
收藏
覺(jué)得還不錯(cuò)?
一鍵收藏
知道了
4
評(píng)論
Java中AWT、Swing與SWT三大GUI技術(shù)的原理與效率差異
看了一下對(duì)Java GUI討論的帖子,所以寫(xiě)了一篇文章來(lái)闡述一下各種GUI技術(shù)的優(yōu)劣。Java世界中,目前最知名的三大GUI庫(kù)分別是:1、AWT(Abstract Window Toolkit)抽象窗口工具包庫(kù),包含于所有的Java SDK中2、Swing高級(jí)圖形庫(kù),包含于Java2 SDK中3、來(lái)自IBM Eclipse開(kāi)源項(xiàng)目的SWT(Standard Widget Toolkit)標(biāo)...
復(fù)制鏈接
掃一掃
SWT Swing與AWT區(qū)別
02-13
本文對(duì) Eclipse 的 Standard Windows Toolkit with JFace、Java 的 Swing 和 Abstract Windows Toolkit GUI 工具包進(jìn)行了比較。通過(guò)此處提供的比較,您可以確定在自己的新應(yīng)用程序中應(yīng)該使用哪個(gè) GUI 工具包。
在大部分情況中,決定都是在 Swing 與結(jié)合了 JFace 的 SWT 之間進(jìn)行的。通常來(lái)說(shuō),每個(gè)工具包都非常完整且功能強(qiáng)大,足以構(gòu)建功能完善的 GUI,但是 Swing 通常要比單獨(dú)使用 SWT(不使用 JFace 時(shí))更好。Swing 具有內(nèi)嵌于 Java 技術(shù)的優(yōu)點(diǎn),是完全可移植的,無(wú)可爭(zhēng)議地是一種更好的架構(gòu)。Swing 也具有高級(jí)圖形應(yīng)用程序所需要的優(yōu)點(diǎn)。SWT 具有可以作為本地應(yīng)用程序?qū)崿F(xiàn)的優(yōu)點(diǎn),這可以提高性能,并利用基于 SWT 的 GUI 來(lái)實(shí)現(xiàn)本地兼容性。
如果您只為一種平臺(tái)來(lái)開(kāi)發(fā)系統(tǒng),那么 SWT 就具有主機(jī)兼容性方面的優(yōu)點(diǎn),包括與主機(jī)特性的集成,例如在 Windows 上對(duì) ActiveX 控件的使用。
JAVA_SWT_TEST.rar_SWT_WIDGET_awt_java swt_java 工具箱
09-23
標(biāo)準(zhǔn)窗口小部件工具箱的 Java 二維作圖 SWT (標(biāo)準(zhǔn)窗口小部件工具箱,Standard Widget Toolkit)是在 Eclipse 平臺(tái)上使用的窗口小部件工具箱。它也可以作為 Swing/AWT 的一個(gè)重要替代產(chǎn)品,用于構(gòu)建任何類型的 Java GUI 應(yīng)用程序。
4?條評(píng)論
您還未登錄,請(qǐng)先
登錄
后發(fā)表或查看評(píng)論
前端同時(shí)傳遞文件數(shù)據(jù)+非文件數(shù)據(jù),前后端解決方案
最新發(fā)布
qq_62835094的博客
01-26
397
之前錄制視頻《文件上傳組件》的時(shí)候有位觀眾提了個(gè)問(wèn)題,如果我沒(méi)有理解錯(cuò)的話,應(yīng)該就是前后同時(shí)傳遞文件數(shù)據(jù)非文件數(shù)據(jù),前后端數(shù)據(jù)該如何接收,這里我給出我自己的解決方案tip:下文在編寫(xiě)前端代碼的時(shí)候,用到了這篇文章寫(xiě)的組件。
Java GUI SWT/Swing/AWT的介紹及比較
11-07
本文通過(guò)對(duì) Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包進(jìn)行比較,可以幫助新應(yīng)用程序的開(kāi)發(fā)人員從中選擇適當(dāng)?shù)墓ぞ摺?
您可以通過(guò)本文了解對(duì)每個(gè)工具包的基本特性的介紹,以及使用每個(gè)工具包的優(yōu)缺點(diǎn)。
AWT 、Swing、SWT的區(qū)別與比較(網(wǎng)摘)
zhangmingji的專欄
10-22
405
??????AWT
????? AWT 是Abstract Window ToolKit (抽象窗口工具包)的縮寫(xiě),這個(gè)工具包提供了一套與本地圖形界面進(jìn)行交互的接口。AWT 中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對(duì)應(yīng)的關(guān)系,我們把它稱為peers。 也就是說(shuō),當(dāng)我們利用 AWT 來(lái)構(gòu)件圖形用戶界面的時(shí)候,我們實(shí)際上是在利用操作系統(tǒng)所提供的圖形庫(kù)。由于不同操作系統(tǒng)的圖形庫(kù)所提供的功能是...
【UI編程】Java AWT/Swing/SWT/JavaFX雜談
一段曲折的旅程,一個(gè)艱難的人生
11-16
2387
Java界面編程粗略介紹,解開(kāi)Java是否合適做桌面重程序的心結(jié)。
1.初識(shí)GUI、AWT、Swing
qq_47701945的博客
07-31
441
1.GUI(Graphics User Interface)就是我們通常所說(shuō)的圖像用戶界面
我們使用的Windows之所以廣為人知,其最初的吸引力就是它提供的圖形用戶界面
2.AWT(Abstract Window Toolkit):抽象窗口工具集,它是Sun提供的一套用于創(chuàng)建GUI界面的類庫(kù),它為Java應(yīng)用程序提供了基本的圖像組件
優(yōu)點(diǎn):使用AWT創(chuàng)建的圖像界面應(yīng)用和所在的運(yùn)行平臺(tái)有相同的界面風(fēng)格(跨平臺(tái))
缺點(diǎn):1.使用AWT做出的圖像化界面在所有平臺(tái)上都顯得很簡(jiǎn)陋,功能也非常有限
...
JavaGui超詳細(xì)筆記——Gui概念、Swing概述、容器組件、布局管理器、常用組件、事件處理、對(duì)話框、內(nèi)部類
xinin919的博客
08-16
2636
Gui概念、Swing概述、容器組件、布局管理器、常用組件、事件處理、對(duì)話框、內(nèi)部類
細(xì)說(shuō):AWT,SWT,Swing
hqs7636的專欄
06-13
196
[url]http://www.java3z.com/cwbwebhome/article/article2/21005.html?id=1709[/url]
Overview概述
Java GUI 工具包一直是一個(gè)倍受爭(zhēng)議的話題。同樣的爭(zhēng)論也發(fā)生在其他編程語(yǔ)言如Smalltalk。實(shí)際上每個(gè)平臺(tái)無(wú)關(guān)的語(yǔ)言都存在著這樣的爭(zhēng)論。Java作為當(dāng)前最受廣泛使用的編程語(yǔ)言而尤為突出。
...
java awt原理_Java中AWT、Swing與SWT三大GUI技術(shù)的原理與效率差別
weixin_39648824的博客
02-28
488
看了一下對(duì)Java GUI討論的帖子,因此寫(xiě)了一篇文章來(lái)闡述一下各類GUI技術(shù)的優(yōu)劣。Java世界中,目前最知名的三大GUI庫(kù)分別是:一、AWT(Abstract Window Toolkit)抽象窗口工具包庫(kù),包含于全部的Java SDK中二、Swing高級(jí)圖形庫(kù),包含于Java2 SDK中三、來(lái)自IBM Eclipse開(kāi)源項(xiàng)目的SWT(Standard Widget Toolkit)標(biāo)準(zhǔn)窗口部...
淺析Java中Swing與SWT和AWT的區(qū)別及實(shí)現(xiàn)_王亞南
03-11
Swing 和 SWT,AWT 技術(shù)都是在 Java 圖形化界面設(shè)計(jì)中常用的開(kāi)發(fā)包,在進(jìn)行 Java GUI 編程時(shí),大家或許經(jīng) 常徘徊在 SWT,Swing,AWT 之間選擇,哪一個(gè)更合適自己? 本文簡(jiǎn)單介紹了三者中各自的功能特點(diǎn),以及之間的區(qū)別...
java 圖形界面 java awt swt swing gui
11-03
java awt swt swing gui 教程 pdf
SWT、Swing 或 AWT:哪個(gè)更適合您?
Ryuka的專欄
06-01
2000
2006 年 4 月 27 日本文通過(guò)對(duì) Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包進(jìn)行比較,可以幫助新應(yīng)用程序的開(kāi)發(fā)人員從中選擇適當(dāng)?shù)墓ぞ?。您可以通過(guò)本文了解對(duì)每個(gè)工具包的基本特性的介紹,以及使用每個(gè)工具包的優(yōu)缺點(diǎn)。簡(jiǎn)介developerWorks 上另外一些作者已經(jīng)展示了如何在 Swing 和 SW
Java GUI編程中AWT/swing/SWT的優(yōu)缺點(diǎn)
SayGoodbyeToYou的專欄
03-24
4303
http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html
AWT
AWT是Abstract Window Toolkit(抽象窗口工具包)的縮寫(xiě),是SUN專門(mén)針對(duì)Java GUI編程提供的最早的也是最初的開(kāi)發(fā)工具包,用來(lái)建立和設(shè)置Java圖形用戶界面,這個(gè)工具包提供了一套與本地圖形界面交互的接口。AWT 中的圖形函數(shù)與操
java swt awt_AWT/SWT/Swing大比較之一:模型設(shè)計(jì)與實(shí)現(xiàn)
weixin_39650784的博客
03-06
121
前幾天由于網(wǎng)絡(luò)問(wèn)題,訪問(wèn)不了新浪網(wǎng),現(xiàn)在準(zhǔn)備重新開(kāi)始博客寫(xiě)作。最近打算寫(xiě)的內(nèi)容主要包括Java性能、Swing和SWT的比較、Swing方面的一些技術(shù)。=====================================================總的來(lái)說(shuō)Swing/AWT和SWT在事件處理機(jī)制上是類似的,窗口組件的樹(shù)狀結(jié)構(gòu)也是類似的。圖形用戶界面系統(tǒng)在事件處理設(shè)計(jì)上有兩大類,一類是單線...
swt 與 awt/swing 的區(qū)別與綜合比較
web前后端開(kāi)發(fā)
06-25
468
本文通過(guò)對(duì) Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包進(jìn)行比較,可以幫助新應(yīng)用程序的開(kāi)發(fā)人員從中選擇適當(dāng)?shù)墓ぞ摺?
[color=red][size=xx-large]綜合網(wǎng)上各家所述 集結(jié)此文:[/size][/color]
是Swing是純Java實(shí)現(xiàn),而SWT和AWT是Java和JNI的混合...
java圖像用戶界面swing、awt、swt
henry的博客
10-06
1884
1、演進(jìn)
(1)Sun已經(jīng)提供了一個(gè)跨平臺(tái)GUI開(kāi)發(fā)工具包AWT抽象窗口工具箱(Abstract Window Toolkit)
(2)Sun又創(chuàng)建了一個(gè)新的gui框架swing,解決了awt存在的Icd(本地化)問(wèn)題(swing是awt的繼承發(fā)展,但Swing不是AWT的子類)
(3)IBM認(rèn)為swing比較消耗內(nèi)存,創(chuàng)建了一個(gè)新的GUI庫(kù),這就是SWT
(4)IBM為了方便
Eclipse下搭建SWT與Swing圖形界面開(kāi)發(fā)環(huán)境
熱門(mén)推薦
深之JohnChen的專欄
07-29
1萬(wàn)+
Eclipse SWT Swing 圖形界面開(kāi)發(fā)
java GUI框架
08-12
Java提供了幾種常用的GUI(圖形用戶界面)框架,包括:
1. Swing:Swing是Java的標(biāo)準(zhǔn)GUI庫(kù),提供了豐富的組件(如按鈕、文本框、標(biāo)簽等)和布局管理器(如FlowLayout、BorderLayout等),用于構(gòu)建桌面應(yīng)用程序的用戶界面。Swing是基于AWT(Abstract Window Toolkit)開(kāi)發(fā)的,并提供了更好的外觀和跨平臺(tái)性能。
2. JavaFX:JavaFX是一個(gè)現(xiàn)代化的GUI框架,提供了豐富的UI控件、布局容器、多媒體支持和動(dòng)畫(huà)效果等功能。它使用FXML(一種基于XML的語(yǔ)言)來(lái)定義界面,也可以通過(guò)Java代碼來(lái)創(chuàng)建和操作界面。JavaFX在Java 8之后成為Java的一部分,取代了Swing成為推薦的GUI開(kāi)發(fā)框架。
3. SWT(Standard Widget Toolkit):SWT是Eclipse基金會(huì)開(kāi)發(fā)的GUI庫(kù),它與操作系統(tǒng)本地窗口系統(tǒng)集成更緊密,提供更原生的外觀和性能。SWT使用Java代碼編寫(xiě),但底層調(diào)用了操作系統(tǒng)的本地API。
這些GUI框架都有各自的特點(diǎn)和適用場(chǎng)景。Swing適用于構(gòu)建跨平臺(tái)的桌面應(yīng)用程序,JavaFX提供了更現(xiàn)代化的界面和豐富的功能,而SWT則更注重與底層操作系統(tǒng)的集成。選擇合適的GUI框架取決于你的需求和偏好。同時(shí),一些第三方庫(kù)和框架也可以用于Java GUI開(kāi)發(fā),如Java AWT、Apache Pivot等。
“相關(guān)推薦”對(duì)你有幫助么?
非常沒(méi)幫助
沒(méi)幫助
一般
有幫助
非常有幫助
提交
光_影
CSDN認(rèn)證博客專家
CSDN認(rèn)證企業(yè)博客
碼齡7年
暫無(wú)認(rèn)證
0
原創(chuàng)
51萬(wàn)+
周排名
83萬(wàn)+
總排名
12萬(wàn)+
訪問(wèn)
等級(jí)
1184
積分
37
粉絲
68
獲贊
15
評(píng)論
191
收藏
私信
關(guān)注
最新評(píng)論
Java中char和String 的深入理解 - 字符編碼
Misa落雪:
你那個(gè)少了有一個(gè)腿的 蟲(chóng) 不是漢字把,
Java中char和String 的深入理解 - 字符編碼
Misa落雪:
手寫(xiě)輸入法,都寫(xiě)不出來(lái),那就不是個(gè)漢字?。?!
Java中char和String 的深入理解 - 字符編碼
Misa落雪:
我的也是,大家的都是,不是
Java中AWT、Swing與SWT三大GUI技術(shù)的原理與效率差異
渝涅:
jfx現(xiàn)在也挺尷尬的其實(shí),jfx的運(yùn)行時(shí)包還得另外下,oracle是準(zhǔn)備放棄Java gui這一塊了,讓Java專注于服務(wù)端
【SpringBoot】核心依賴和自動(dòng)配置
·Toto_:
請(qǐng)問(wèn)引入部分的代碼要在哪里寫(xiě)?。吭趺匆?/p>
您愿意向朋友推薦“博客詳情頁(yè)”嗎?
強(qiáng)烈不推薦
不推薦
一般般
推薦
強(qiáng)烈推薦
提交
最新文章
JAVA序列號(hào)的serialVersionUID
JS對(duì)象—對(duì)象總結(jié)(創(chuàng)建、屬性、方法)
js數(shù)組方法大全
2020年11篇
2019年30篇
2018年37篇
目錄
目錄
最新文章
JAVA序列號(hào)的serialVersionUID
JS對(duì)象—對(duì)象總結(jié)(創(chuàng)建、屬性、方法)
js數(shù)組方法大全
2020年11篇
2019年30篇
2018年37篇
目錄
評(píng)論?4
被折疊的??條評(píng)論
為什么被折疊?
到【灌水樂(lè)園】發(fā)言
查看更多評(píng)論
添加紅包
祝福語(yǔ)
請(qǐng)?zhí)顚?xiě)紅包祝福語(yǔ)或標(biāo)題
紅包數(shù)量
個(gè)
紅包個(gè)數(shù)最小為10個(gè)
紅包總金額
元
紅包金額最低5元
余額支付
當(dāng)前余額3.43元
前往充值 >
需支付:10.00元
取消
確定
下一步
知道了
成就一億技術(shù)人!
領(lǐng)取后你會(huì)自動(dòng)成為博主和紅包主的粉絲
規(guī)則
hope_wisdom 發(fā)出的紅包
實(shí)付元
使用余額支付
點(diǎn)擊重新獲取
掃碼支付
錢(qián)包余額
0
抵扣說(shuō)明:
1.余額是錢(qián)包充值的虛擬貨幣,按照1:1的比例進(jìn)行支付金額的抵扣。 2.余額無(wú)法直接購(gòu)買(mǎi)下載,可以購(gòu)買(mǎi)VIP、付費(fèi)專欄及課程。
余額充值
Java SWT 教程 · ZetCode 中文系列教程 · 看云
1分鐘部署網(wǎng)站AI智能客服,大模型訓(xùn)練自有數(shù)據(jù),簡(jiǎn)單好用,有效降低客服成本
廣告
# Java SWT 教程
> 原文: [http://zetcode.com/gui/javaswt/](http://zetcode.com/gui/javaswt/)
這是 Java SWT 教程。 在本教程中,我們將學(xué)習(xí)使用 Java SWT 庫(kù)進(jìn)行 GUI 編程的基礎(chǔ)。 本教程適合初學(xué)者和中級(jí)程序員。 本教程使用 JDK 8。
## 目錄
* [簡(jiǎn)介](introduction/)
* [布局管理](layout/)
* [菜單和工具欄](menustoolbars/)
* [小部件](widgets/)
* [表格小部件](table/)
* [對(duì)話框](dialogs/)
* [繪圖](painting/)
* [貪食蛇](nibbles/)
## SWT
標(biāo)準(zhǔn)窗口小部件工具箱(SWT)是用于 Java 編程語(yǔ)言的圖形窗口小部件工具箱。 它最初由 IBM 開(kāi)發(fā),現(xiàn)已成為 Eclipse Foundation 的一部分。 它是 Swing 和 JavaFX 的替代方法。 SWT 使用 Windows API 或 GTK+ 之類的本地 GUI API 通過(guò) Java 本機(jī)接口(JNI)創(chuàng)建其小部件。
[Tweet](https://twitter.com/share)
## 相關(guān)教程和電子書(shū)
有[高級(jí) Java Swing 電子書(shū)](/ebooks/advancedjavaswing/), [Java Swing 教程](/tutorials/javaswingtutorial/), [JavaFX 教程](/gui/javafx/)和 [Java 教程](/lang/java/)。
ZetCode 數(shù)據(jù)庫(kù)教程
MySQL 教程
MySQL 簡(jiǎn)介
MySQL 安裝
MySQL 的第一步
MySQL 快速教程
MySQL 存儲(chǔ)引擎
MySQL 數(shù)據(jù)類型
在 MySQL 中創(chuàng)建,更改和刪除表
MySQL 表達(dá)式
在 MySQL 中插入,更新和刪除數(shù)據(jù)
MySQL 中的SELECT語(yǔ)句
MySQL 子查詢
MySQL 約束
在 MySQL 中導(dǎo)出和導(dǎo)入數(shù)據(jù)
在 MySQL 中連接表
MySQL 函數(shù)
MySQL 中的視圖
MySQL 中的事務(wù)
MySQL 存儲(chǔ)過(guò)程
MySQL Python 教程
MySQL Perl 教程
MySQL & Perl DBI
使用 Perl 連接到 MySQL 數(shù)據(jù)庫(kù)
MySQL 中的 Perl 錯(cuò)誤處理
使用 Perl 進(jìn)行 MySQL 查詢
在 MySQL 中使用 Perl 綁定參數(shù)&列
在 MySQL 中使用 Perl 處理圖像
使用 Perl 獲取 MySQL 元數(shù)據(jù)
Perl 的 MySQL 事務(wù)
MySQL C API 編程教程
MySQL Visual Basic 教程
MySQL PHP 教程
MySQL Java 教程
MySQL Ruby 教程
MySQL C# 教程
SQLite 教程
SQLite 簡(jiǎn)介
sqlite3 命令行工具
在 SQLite 中創(chuàng)建,刪除和更改表
SQLite 表達(dá)式
SQLite 插入,更新,刪除數(shù)據(jù)
SQLite SELECT語(yǔ)句
SQLite 約束
SQLite 連接表
SQLite 函數(shù)
SQLite 視圖,觸發(fā)器,事務(wù)
SQLite C 教程
SQLite Python 教程
SQLite Perl 教程
Perl DBI
使用 Perl 連接到 SQLite 數(shù)據(jù)庫(kù)
SQLite Perl 錯(cuò)誤處理
使用 Perl 的 SQLite 查詢
使用 Perl 綁定 SQLite 參數(shù)&列
使用 Perl 在 SQLite 中處理圖像
使用 Perl 獲取 SQLite 元數(shù)據(jù)
使用 Perl 進(jìn)行 SQLite 事務(wù)
SQLite Ruby 教程
連接到 SQLite 數(shù)據(jù)庫(kù)
在 SQLite 中使用 Ruby 進(jìn)行 SQL 查詢
綁定參數(shù)
處理圖像
使用 Ruby 獲取 SQLite 元數(shù)據(jù)
Ruby 的 SQLite 事務(wù)
SQLite C# 教程
SQLite C# 簡(jiǎn)介
使用SqliteDataReader檢索數(shù)據(jù)
ADO.NET 數(shù)據(jù)集
使用 C# 在 SQLite 中處理圖像
使用 C# 獲取 SQLite 元數(shù)據(jù)
使用 C# 的 SQLite 事務(wù)
SQLite Visual Basic 教程
SQLite Visual Basic 簡(jiǎn)介
使用SqliteDataReader檢索數(shù)據(jù)
ADO.NET 的數(shù)據(jù)集
使用 Visual Basic 在 SQLite 中處理圖像
使用 Visual Basic 獲取 SQLite 元數(shù)據(jù)
使用 Visual Basic 的 SQLite 事務(wù)
PostgreSQL C 教程
PostgreSQL Ruby 教程
PostgreSQL PHP 教程
PostgreSQL PHP 編程簡(jiǎn)介
在 PostgreSQL 中使用 PHP 檢索數(shù)據(jù)
在 PostgreSQL 中使用 PHP 處理圖像
用 PHP 獲取 PostgreSQL 元數(shù)據(jù)
在 PostgreSQL 中使用 PHP 進(jìn)行事務(wù)
PostgreSQL Java 教程
Apache Derby 教程
Derby 簡(jiǎn)介
Derby 的安裝&配置
Derby 工具
ij 工具
Derby 中的 SQL 查詢
在 Derby 中使用 JDBC 進(jìn)行編程
Derby 安全
使用 Derby & Apache Tomcat
NetBeans 和 Derby
SQLAlchemy 教程
SQLAlchemy 簡(jiǎn)介
原始 SQL
模式定義語(yǔ)言
SQL 表達(dá)式語(yǔ)言
SQLAlchemy 中的對(duì)象關(guān)系映射器
MongoDB PHP 教程
MongoDB JavaScript 教程
MongoDB Ruby 教程
Spring JdbcTemplate 教程
JDBI 教程
MyBatis 教程
Hibernate Derby 教程
ZetCode .NET 教程
Visual Basic 教程
Visual Basic
Visual Basic 語(yǔ)法結(jié)構(gòu)
基本概念
Visual Basic 數(shù)據(jù)類型
Visual Basic 中的字符串
運(yùn)算符
控制流
Visual Basic 數(shù)組
Visual Basic 中的過(guò)程&函數(shù)
在 Visual Basic 中組織代碼
面向?qū)ο缶幊?/p>
Visual Basic 中的面向?qū)ο缶幊?II
Visual Basic 中的集合
輸入和輸出
C# 教程
C# 語(yǔ)言
C# 語(yǔ)法結(jié)構(gòu)
C# 基礎(chǔ)
C# 數(shù)據(jù)類型
C# 中的字符串
C# 運(yùn)算符
C# 中的流控制
C# 數(shù)組
C# 面向?qū)ο缶幊?/p>
C# 中的方法
C# 面向?qū)ο缶幊?II
C# 屬性
C# 結(jié)構(gòu)
C# 委托
命名空間
C# 集合
C# 輸入和輸出
C# 目錄教程
C# 字典教程
在 C# 中讀取文本文件
C# 中的日期和時(shí)間
在 C# 中讀取網(wǎng)頁(yè)
C# HttpClient教程
ASP.NET Core 教程
ZetCode 圖形教程
Java 2D 游戲教程
Java 游戲基礎(chǔ)
動(dòng)畫(huà)
移動(dòng)精靈
碰撞檢測(cè)
Java 益智游戲
Java Snake
Breakout 游戲
Java 俄羅斯方塊
Java 吃豆人
Java 太空侵略者
Java 掃雷
Java 推箱子
Java 2D 教程
介紹
基本繪圖
形狀和填充
透明度
合成
剪裁
變換
特效
圖像
文字和字體
命中測(cè)試,移動(dòng)物體
俄羅斯方塊
Cario 圖形教程
Cario 圖形庫(kù)
Cario 定義
Cairo 后端
Cairo 基本圖形
形狀和填充
漸變
透明度
合成
剪裁和遮罩
變換
Cairo 文字
Cairo 中的圖像
根窗口
PyCairo 教程
PyCairo 簡(jiǎn)介
PyCairo 后端
PyCairo 中的基本繪圖
PyCairo 形狀和填充
PyCairo 漸變
PyCairo 剪裁&遮罩
PyCairo 的透明度
PyCairo 中的變換
PyCairo 中的文字
PyCairo 中的圖像
根窗口
HTML5 畫(huà)布教程
介紹
HTML5 畫(huà)布中的直線
HTML5 畫(huà)布形狀
HTML5 畫(huà)布填充
HTML5 畫(huà)布中的透明度
HTML5 畫(huà)布合成
HTML5 canvas 中的變換
HTML5 畫(huà)布中的文字
HTML5 畫(huà)布中的動(dòng)畫(huà)
HTML5 畫(huà)布中的 Snake
ZetCode GUI 教程
Windows API 教程
Windows API 簡(jiǎn)介
Windows API main函數(shù)
Windows API 中的系統(tǒng)函數(shù)
Windows API 中的字符串
Windows API 中的日期和時(shí)間
Windows API 中的一個(gè)窗口
UI 的第一步
Windows API 菜單
Windows API 對(duì)話框
Windows API 控件 I
Windows API 控件 II
Windows API 控件 III
Windows API 中的高級(jí)控件
Windows API 中的自定義控件
Windows API 中的 GDI
PyQt4 教程
PyQt4 簡(jiǎn)介
PyQt4 中的第一個(gè)程序
PyQt4 中的菜單和工具欄
PyQt4 中的布局管理
PyQt4 中的事件和信號(hào)
PyQt4 中的對(duì)話框
PyQt4 小部件
PyQt4 小部件 II
PyQt4 中的拖放
PyQt4 中的繪圖
PyQt4 中的自定義小部件
PyQt4 中的俄羅斯方塊游戲
PyQt5 教程
PyQt5 簡(jiǎn)介
PyQt5 日期和時(shí)間
PyQt5 中的第一個(gè)程序
PyQt5 中的菜單和工具欄
PyQt5 中的布局管理
PyQt5 中的事件和信號(hào)
PyQt5 中的對(duì)話框
PyQt5 小部件
PyQt5 小部件 II
PyQt5 拖放
PyQt5 中的繪圖
PyQt5 中的自定義小部件
PyQt5 中的俄羅斯方塊
Qt4 教程
Qt4 工具包簡(jiǎn)介
Qt4 工具類
Qt4 中的字符串
Qt4 中的日期和時(shí)間
在 Qt4 中使用文件和目錄
Qt4 中的第一個(gè)程序
Qt4 中的菜單和工具欄
Qt4 中的布局管理
Qt4 中的事件和信號(hào)
Qt4 小部件
Qt4 小部件 II
Qt4 中的繪圖
Qt4 中的自定義小部件
Qt4 中的打磚塊游戲
Qt5 教程
Qt5 工具包簡(jiǎn)介
Qt5 中的字符串
Qt5 中的日期和時(shí)間
Qt5 中的容器
在 Qt5 中處理文件和目錄
Qt5 中的第一個(gè)程序
Qt5 中的菜單和工具欄
Qt5 中的布局管理
Qt5 中的事件和信號(hào)
Qt5 小部件
Qt5 小部件 II
Qt5 中的繪圖
Qt5 中的自定義小部件
Qt5 中的貪食蛇
Qt5 中的打磚塊游戲
PySide 教程
PySide 工具包簡(jiǎn)介
PySide 中的第一個(gè)程序
PySide 中的菜單和工具欄
PySide 中的布局管理
PySide 中的事件和信號(hào)
PySide 中的對(duì)話框
PySide 小部件
PySide 小部件 II
在 PySide 中拖放
在 PySide 中繪圖
PySide 中的自定義小部件
PySide 中的俄羅斯方塊游戲
Tkinter 教程
Tkinter 簡(jiǎn)介
Tkinter 中的布局管理
Tkinter 標(biāo)準(zhǔn)小部件屬性
Tkinter 小部件
Tkinter 中的菜單和工具欄
Tkinter 中的對(duì)話框
Tkinter 中的繪圖
Tkinter 中的貪食蛇
Tcl/Tk 教程
Tcl/Tk 簡(jiǎn)介
Tcl/Tk 中的布局管理
Tcl/Tk 小部件
Tcl/Tk 中的菜單和工具欄
Tcl/Tk 中的對(duì)話框
Tcl/Tk 繪圖
貪食蛇
Qt 快速教程
Java Swing 教程
Java Swing 簡(jiǎn)介
Java Swing 首個(gè)程序
Java Swing 中的菜單和工具欄
Swing 布局管理
GroupLayout管理器
Java Swing 事件
基本的 Swing 組件
基本的 Swing 組件 II
Java Swing 對(duì)話框
Java Swing 模型架構(gòu)
Swing 中的拖放
Swing 中的繪圖
Java Swing 中的可調(diào)整大小的組件
Java Swing 中的益智游戲
俄羅斯方塊
JavaFX 教程
JavaFX 簡(jiǎn)介
JavaFX 首個(gè)程序
JavaFX 布局窗格
基本的 JavaFX 控件
基本 JavaFX 控件 II
JavaFX 事件
JavaFX 效果
JavaFX 動(dòng)畫(huà)
JavaFX 畫(huà)布
JavaFX 圖表
Java SWT 教程
Java SWT 簡(jiǎn)介
Java SWT 中的布局管理
Java SWT 中的菜單和工具欄
Java SWT 中的小部件
Table小部件
Java SWT 中的對(duì)話框
Java SWT 繪圖
Java SWT 中的貪食蛇
wxWidgets 教程
wxWidgets 簡(jiǎn)介
wxWidgets 助手類
wxWidgets 中的第一個(gè)程序
wxWidgets 中的菜單和工具欄
wxWidgets 中的布局管理
wxWidgets 中的事件
wxWidgets 中的對(duì)話框
wxWidgets 小部件
wxWidgets 小部件 II
wxWidgets 中的拖放
wxWidgets 中的設(shè)備上下文
wxWidgets 中的自定義小部件
wxWidgets 中的俄羅斯方塊游戲
wxPython 教程
wxPython 簡(jiǎn)介
第一步
菜單和工具欄
wxPython 中的布局管理
wxPython 中的事件
wxPython 對(duì)話框
小部件
wxPython 中的高級(jí)小部件
wxPython 中的拖放
wxPython 圖形
創(chuàng)建自定義小部件
wxPython 中的應(yīng)用框架
wxPython 中的俄羅斯方塊游戲
C# Winforms Mono 教程
Mono Winforms 簡(jiǎn)介
Mono Winforms 中的第一步
Mono Winforms 中的布局管理
Mono Winforms 中的菜單和工具欄
Mono Winforms 中的基本控件
Mono Winforms 中的高級(jí)控件
對(duì)話框
Mono Winforms 中的拖放
Mono Winforms 中的繪圖
Mono Winforms 中的貪食蛇
Java Gnome 教程
Java Gnome 簡(jiǎn)介
Java Gnome 的第一步
Java Gnome 中的布局管理
Java Gnome 中的布局管理 II
Java Gnome 中的菜單
Java Gnome 中的工具欄
Java Gnome 中的事件
Java Gnome 中的小部件
Java Gnome 中的小部件 II
Java Gnome 中的高級(jí)小部件
Java Gnome 中的對(duì)話框
Java Gnome 中的 Pango
在 Java Gnome 中用 Cairo 繪圖
Cario 繪圖 II
Java Gnome 中的貪食蛇
QtJambi 教程
QtJambi 簡(jiǎn)介
QtJambi 中的布局管理
QtJambi 中的小部件
QtJambi 中的菜單和工具欄
QtJambi 對(duì)話框
QtJambi 中的繪圖
QtJambi 中的自定義小部件
貪食蛇
GTK+ 教程
GTK+ 簡(jiǎn)介
GTK+ 中的第一個(gè)程序
GTK+ 中的菜單和工具欄
GTK+ 布局管理
GTK+ 事件和信號(hào)
GTK+ 對(duì)話框
GTK+ 小部件
GTK+ 小部件 II
GtkTreeView小部件
GtkTextView小部件
自定義 GTK+ 小部件
Ruby GTK 教程
Ruby GTK 簡(jiǎn)介
Ruby GTK 中的布局管理
Ruby GTK 中的小部件
Ruby GTK 中的菜單和工具欄
Ruby GTK 中的對(duì)話框
Ruby GTK Cario 繪圖
Ruby GTK 中的自定義小部件
Ruby GTK 中的貪食蛇
GTK# 教程
GTK# 簡(jiǎn)介
GTK 的第一步
GTK# 中的布局管理
GTK 中的菜單
GTK# 中的工具欄
GTK# 中的事件
GTK# 中的小部件
GTK 中的小部件 II
GTK# 中的高級(jí)小部件
GTK# 中的對(duì)話框
Pango
GTK# 中的 Cario 繪圖
GTK# 中的 Cario 繪圖 II
GTK# 中的自定義小部件
Visual Basic GTK# 教程
Visual Basic GTK# 簡(jiǎn)介
布局管理
小部件
菜單和工具欄
對(duì)話框
Cario 繪圖
自定義小部件
貪食蛇
PyGTK 教程
PyGTK 簡(jiǎn)介
PyGTK 的第一步
PyGTK 中的布局管理
PyGTK 中的菜單
PyGTK 中的工具欄
PyGTK 中的事件和信號(hào)
PyGTK 中的小部件
PyGTK 中的小部件 II
PyGTK 中的高級(jí)小部件
PyGTK 中的對(duì)話框
Pango
Pango II
PyGTK 中的 Cario 繪圖
Cario 繪圖 II
PyGTK 中的貪食蛇游戲
PyGTK 中的自定義小部件
PHP GTK 教程
PHP GTK 簡(jiǎn)介
PHP GTK 中的布局管理
PHP GTK 中的小部件
PHP GTK 中的菜單和工具欄
對(duì)話框
Cario 繪圖
自定義小部件
貪食蛇
C# Qyoto 教程
Qyoto 介紹
布局管理
Qyoto 中的小部件
Qyoto 中的菜單和工具欄
Qyoto 對(duì)話框
Qyoto 中的繪圖
Qyoto 中的繪圖 II
Qyoto 中的自定義小部件
貪食蛇
Ruby Qt 教程
Ruby Qt 簡(jiǎn)介
Ruby Qt 中的布局管理
Ruby Qt 中的小部件
菜單和工具欄
Ruby Qt 中的對(duì)話框
用 Ruby Qt 繪圖
Ruby Qt 中的自定義小部件
Ruby Qt 中的貪食蛇
Visual Basic Qyoto 教程
Qyoto 介紹
布局管理
Qyoto 中的小部件
Qyoto 中的菜單和工具欄
Qyoto 對(duì)話框
Qyoto 中的繪圖
Qyoto 中的自定義小部件
貪食蛇
Mono IronPython Winforms 教程
介紹
IronPython Mono Winforms 中的第一步
布局管理
菜單和工具欄
Mono Winforms 中的基本控件
Mono Winforms 中的基本控件 II
Mono Winforms 中的高級(jí)控件
對(duì)話框
Mono Winforms 中的拖放
繪圖
IronPython Mono Winforms 中的繪圖 II
IronPython Mono Winforms 中的貪食蛇
IronPython Mono Winforms 中的俄羅斯方塊游戲
FreeBASIC GTK 教程
Jython Swing 教程
Jython Swing 簡(jiǎn)介
Jython Swing 中的布局管理
Jython Swing 中的組件
Jython Swing 中的菜單和工具欄
Jython Swing 中的對(duì)話框
Jython Swing 中的繪圖
Jython Swing 中的半字節(jié)
JRuby Swing 教程
JRuby Swing 簡(jiǎn)介
JRuby Swing 中的布局管理
JRuby Swing 中的組件
菜單和工具欄
JRuby Swing 中的對(duì)話框
在 JRuby Swing 中繪圖
JRuby Swing 中的貪食蛇
Visual Basic Winforms 教程
Visual Basic Winforms 簡(jiǎn)介
布局管理
基本控制
進(jìn)階控件
菜單和工具欄
對(duì)話框
繪圖
拖放
貪食蛇
JavaScript GTK 教程
JavaScript GTK 簡(jiǎn)介
布局管理
JavaScript GTK 中的小部件
JavaScript GTK 中的菜單和工具欄
JavaScript GTK 中的對(duì)話框
JavaScript GTK 中的 Cario 繪圖
ZetCode Java 教程
Java 教程
Java 語(yǔ)言
Java 語(yǔ)法結(jié)構(gòu)
Java 基礎(chǔ)
Java 數(shù)據(jù)類型
Java 數(shù)據(jù)類型 II
Java 字符串
Java 數(shù)組
Java 表達(dá)式
Java 控制流程
Java 面向?qū)ο蟮木幊?/p>
Java 方法
Java 面向?qū)ο缶幊?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 正則表達(dá)式教程
Java PDFBox 教程
Java 文件教程
Java Files.list教程
Java Files.walk教程
Java DirectoryStream教程
Java 外部與內(nèi)部迭代器
Java 文件大小
用 Java 創(chuàng)建目錄
用 Java 創(chuàng)建文件
Java Log4j 教程
Gson 教程
Java RequestDispatcher
Java HTTP GET/POST 請(qǐng)求
Java InputStream教程
Java FileOutputStream教程
Java FileInputStream教程
Java ZipInputStream教程
Java FileWriter教程
EJB 簡(jiǎn)介
Java forEach教程
Jetty 教程
Tomcat Derby 教程
Stripes 介紹
使用 Stripes 的 Java webapp,MyBatis,& Derby
EclipseLink 簡(jiǎn)介
Java 中的數(shù)據(jù)源
JSTL 中的 SQL 查詢標(biāo)記
Java 驗(yàn)證過(guò)濾器
Hibernate 驗(yàn)證器
用 Java 顯示圖像
Play 框架簡(jiǎn)介
Spark Java 簡(jiǎn)介
Java ResourceBundle教程
Jtwig 教程
Java Servlet 教程
Java 套接字教程
FreeMarker 教程
Android 教程
Java EE 5 教程
JSoup 教程
JFreeChart 教程
ImageIcon教程
用 Java 復(fù)制文件
Java 文件時(shí)間教程
如何使用 Java 獲取當(dāng)前日期時(shí)間
Java 列出目錄內(nèi)容
Java 附加到文件
Java ArrayList教程
用 Java 讀寫(xiě) ICO 圖像
Java int到String的轉(zhuǎn)換
Java HashSet教程
Java HashMap教程
Java static關(guān)鍵字
Java 中的HashMap迭代
用 Java 過(guò)濾列表
在 Java 中讀取網(wǎng)頁(yè)
Java 控制臺(tái)應(yīng)用
Java 集合的便利工廠方法
Google Guava 簡(jiǎn)介
OpenCSV 教程
用 Java8 的StringJoiner連接字符串
Java 中元素迭代的歷史
Java 謂詞
Java StringBuilder
Java 分割字串教學(xué)
Java NumberFormat
Java TemporalAdjusters教程
Apache FileUtils教程
Java Stream 過(guò)濾器
Java 流歸約
Java 流映射
Java InputStreamReader教程
在 Java 中讀取文本文件
Java Unix 時(shí)間
Java LocalTime
Java 斐波那契
Java ProcessBuilder教程
Java 11 的新功能
ZetCode JavaScript 教程
Ramda 教程
Lodash 教程
Collect.js 教程
Node.js 簡(jiǎn)介
Node HTTP 教程
Node-config 教程
Dotenv 教程
Joi 教程
Liquid.js 教程
faker.js 教程
Handsontable 教程
PouchDB 教程
Cheerio 教程
Axios 教程
Jest 教程
JavaScript 正則表達(dá)式
用 JavaScript 創(chuàng)建對(duì)象
Big.js 教程
Moment.js 教程
Day.js 教程
JavaScript Mustache 教程
Knex.js 教程
MongoDB JavaScript 教程
Sequelize 教程
Bookshelf.js 教程
Node Postgres 教程
Node Sass 教程
Document.querySelector教程
Document.all教程
JSON 服務(wù)器教程
JavaScript 貪食蛇教程
JavaScript 構(gòu)建器模式教程
JavaScript 數(shù)組
XMLHttpRequest教程
從 JavaScript 中的 URL 讀取 JSON
在 JavaScript 中循環(huán)遍歷 JSON 數(shù)組
jQuery 教程
Google 圖表教程
ZetCode Kotlin 教程
Kotlin Hello World 教程
Kotlin 變量
Kotlin 的運(yùn)算符
Kotlin when表達(dá)式
Kotlin 數(shù)組
Kotlin 范圍
Kotlin Snake
Kotlin Swing 教程
Kotlin 字符串
Kotlin 列表
Kotlin 映射
Kotlin 集合
Kotlin 控制流程
Kotlin 寫(xiě)入文件
Kotlin 讀取文件教程
Kotlin 正則表達(dá)式
ZetCode 其它教程
TCL 教程
Tcl
Tcl 語(yǔ)法結(jié)構(gòu)
Tcl 中的基本命令
Tcl 中的表達(dá)式
Tcl 中的控制流
Tcl 中的字符串
Tcl 列表
Tcl 中的數(shù)組
Tcl 中的過(guò)程
輸入&輸出
AWK 教程
Vaadin 教程
Vaadin 框架介紹
Vaadin Grid教程
Vaadin TextArea教程
Vaadin ComboBox教程
Vaadin Slider教程
Vaadin CheckBox教程
Vaadin Button教程
Vaadin DateField教程
Vaadin Link教程
ZetCode PHP 教程
PHP 教程
PHP
PHP 語(yǔ)法結(jié)構(gòu)
PHP 基礎(chǔ)
PHP 數(shù)據(jù)類型
PHP 字符串
PHP 運(yùn)算符
PHP 中的控制流
PHP 數(shù)組
PHP 數(shù)組函數(shù)
PHP 中的函數(shù)
PHP 正則表達(dá)式
PHP 中的面向?qū)ο缶幊?/p>
PHP 中的面向?qū)ο缶幊?II
PHP Carbon 教程
PHP Monolog 教程
PHP 配置教程
PHP Faker 教程
Twig 教程
Valitron 教程
Doctrine DBAL QueryBuilder 教程
PHP Respect 驗(yàn)證教程
PHP Rakit 驗(yàn)證教程
PHP PDO 教程
CakePHP 數(shù)據(jù)庫(kù)教程
PHP SQLite3 教程
PHP 文件系統(tǒng)函數(shù)
ZetCode Python 教程
Python 教程
Python 語(yǔ)言
交互式 Python
Python 語(yǔ)法結(jié)構(gòu)
Python 數(shù)據(jù)類型
Python 字符串
Python 列表
Python 字典
Python 運(yùn)算符
Python 關(guān)鍵字
Python 函數(shù)
Python 中的文件
Python 中的面向?qū)ο缶幊?/p>
Python 模塊
Python 中的包
Python 異常
Python 迭代器和生成器
Python 內(nèi)省
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循環(huán)
Python 反轉(zhuǎn)
Python Lambda 函數(shù)
Python 集合
Python 映射
Python CSV 教程-讀寫(xiě) CSV
Python 正則表達(dá)式
Python SimpleJson 教程
SymPy 教程
Pandas 教程
Matplotlib 教程
Pillow 教程
Python FTP 教程
Python Requests 教程
Python Arrow 教程
Python 列表推導(dǎo)式
Python 魔術(shù)方法
PyQt 中的QPropertyAnimation
PyQt 中的QNetworkAccessManager
ZetCode Ruby 教程
Ruby 教程
Ruby
Ruby 語(yǔ)法結(jié)構(gòu)
Ruby 基礎(chǔ)
Ruby 變量
Ruby 中的對(duì)象
Ruby 數(shù)據(jù)類型
Ruby 字符串
Ruby 表達(dá)式
Ruby 控制流
Ruby 數(shù)組
Ruby 哈希
Ruby 中的面向?qū)ο缶幊?/p>
Ruby 中的面向?qū)ο缶幊?II
Ruby 正則表達(dá)式
Ruby 輸入&輸出
Ruby HTTPClient教程
Ruby Faraday 教程
Ruby Net::HTTP教程
ZetCode Servlet 教程
從 Java Servlet 提供純文本
Java Servlet JSON 教程
Java Servlet HTTP 標(biāo)頭
Java Servlet 復(fù)選框教程
Java servlet 發(fā)送圖像教程
Java Servlet JQuery 列表教程
Servlet FreeMarker JdbcTemplate 教程-CRUD 操作
jQuery 自動(dòng)補(bǔ)全教程
Java servlet PDF 教程
servlet 從 WAR 內(nèi)讀取 CSV 文件
Java HttpServletMapping
EasyUI datagrid
Java Servlet RESTFul 客戶端
Java Servlet Log4j 教程
Java Servlet 圖表教程
Java ServletConfig教程
Java Servlet 讀取網(wǎng)頁(yè)
嵌入式 Tomcat
Java Servlet 分頁(yè)
Java Servlet Weld 教程
Java Servlet 上傳文件
Java Servlet 提供 XML
Java Servlet 教程
JSTL forEach標(biāo)簽
使用 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 轉(zhuǎn)發(fā)教程
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
獨(dú)立的 Spring 應(yīng)用
經(jīng)典 Spring 應(yīng)用中的JdbcTemplate
Spring EmbeddedDatabaseBuilder教程
Spring HikariCP 教程
Spring Web 應(yīng)用簡(jiǎn)介
Spring BeanPropertyRowMapper教程
Spring DefaultServlet教程
Spring WebSocket 教程
Spring WebJars 教程
Spring @MatrixVariable教程
Spring Jetty 教程
Spring 自定義 404 錯(cuò)誤頁(yè)面教程
Spring WebApplicationInitializer教程
Spring BindingResult教程
Spring FreeMarker 教程
Spring Thymeleaf 教程
Spring ResourceHandlerRegistry教程
SpringRunner 教程
Spring MockMvc 教程
ZetCode Spring Boot 教程
Spring Boot 發(fā)送電子郵件教程
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 自動(dòng)控制器
Spring Boot FreeMarker 教程
Spring Boot Environment
Spring Boot Swing 集成教程
在 Spring Boot 中提供圖像文件
在 Spring Boot 中創(chuàng)建 PDF 報(bào)告
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 中提供靜態(tài)內(nèi)容
Spring Boot Whitelabel 錯(cuò)誤
Spring Boot DataSourceBuilder 教程
Spring Boot H2 教程
Spring Boot Web JasperReports 集成
Spring Boot iText 教程
Spring Boot cmd JasperReports 集成
Spring Boot RESTFul 應(yīng)用
Spring Boot 第一個(gè) Web 應(yīng)用
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 登錄頁(yè)面教程
Spring Boot RouterFunction 教程
ZetCode Symfony 教程
Symfony DBAL 教程
Symfony 表單教程
Symfony CSRF 教程
Symfony Vue 教程
Symfony 簡(jiǎn)介
Symfony 請(qǐng)求教程
Symfony HttpClient教程
Symfony Flash 消息
在 Symfony 中發(fā)送郵件
Symfony 保留表單值
Symfony @Route注解教程
Symfony 創(chuàng)建路由
Symfony 控制臺(tái)命令教程
Symfony 上傳文件
Symfony 服務(wù)教程
Symfony 驗(yàn)證教程
Symfony 翻譯教程
【插件開(kāi)發(fā)】—— 7 SWT布局詳解,不能再詳細(xì)了! - xingoo - 博客園
會(huì)員
周邊
新聞
博問(wèn)
AI培訓(xùn)
云市場(chǎng)
所有博客
當(dāng)前博客
我的博客
我的園子
賬號(hào)設(shè)置
簡(jiǎn)潔模式 ...
退出登錄
注冊(cè)
登錄
xingoo
博客園
首頁(yè)
管理
【插件開(kāi)發(fā)】—— 7 SWT布局詳解,不能再詳細(xì)了!
前文回顧:
1?插件學(xué)習(xí)篇
2?簡(jiǎn)單的建立插件工程以及模型文件分析
3?利用擴(kuò)展點(diǎn),開(kāi)發(fā)透視圖
4?SWT編程須知
5?SWT簡(jiǎn)單控件的使用與布局搭配
6 SWT復(fù)雜空間與布局搭配
前面幾篇都提到了SWT的布局,布局系統(tǒng)也為規(guī)整的UI提供了保障。那么如何設(shè)計(jì)一個(gè)布局呢?
Eclipse的布局機(jī)制,提供了兩個(gè)對(duì)象概念,Layout(描述內(nèi)部布局方式)以及GridData(描述本身布局方式)。
什么是Layout?
首先說(shuō)一下Layout,layout定義了一個(gè)空間內(nèi)部的布局格式。比如我們把箱子作為一個(gè)整體,那么箱子內(nèi)部該怎么去設(shè)計(jì),怎么放置東西進(jìn)去,就需要用layout來(lái)指定。
而常用的布局方式,就包括FillLayout,gridLayout,RowLayout,以及FormLayout。
下面就針對(duì)這幾種布局進(jìn)行一下介紹:
Filllayout
也叫做填充布局,它會(huì)讓里面的子空間以填充的方式進(jìn)行布局。
比如我們采用如下的設(shè)計(jì)方式:
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);
}
正常的布局是這樣的:
經(jīng)過(guò)拉伸就變成了這樣:
?
RowLayout
也叫行布局,它會(huì)讓內(nèi)部的子空間以行為單位進(jìn)行排列,遇到邊界時(shí),自動(dòng)換成下一行。
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);
}
得到的結(jié)果是這樣的:
當(dāng)壓縮邊界的時(shí)候,會(huì)自動(dòng)換行
GridLayout
也叫做網(wǎng)格布局,它以規(guī)定網(wǎng)格的形式,指定每一行有多少列,元素會(huì)以每列幾個(gè)的方式進(jìn)行排列,超出的部分?jǐn)D到下一行。
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);
}
當(dāng)指定每行有3個(gè)子控件時(shí),無(wú)論怎么改變窗口的大小,都不會(huì)改變排列的方式
當(dāng)改變窗口大小時(shí),不會(huì)發(fā)生變化
?
FormLayout
感覺(jué)這個(gè)是最難使用的了,它會(huì)以一個(gè)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); //第一個(gè)數(shù)字式百分比,也就是說(shuō) 【寬度-5】
formData1.bottom = new FormAttachment(100,-5); //第一個(gè)數(shù)字式百分比,也就是說(shuō) 【高度-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個(gè)像素】
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);
可以看到他提供了一個(gè)FormData的布局方式,通過(guò)FormAttachment實(shí)現(xiàn),這個(gè)類需要兩個(gè)參數(shù),第一個(gè)是寬度(left或者right)或者高度(top或者bottom)的百分比,第二個(gè)參數(shù)是它相對(duì)加上的值。如果是負(fù)數(shù),就是減去的像素值。而且提供Control類型的參數(shù),也就是控件類型的參數(shù)。如果第一個(gè)參數(shù)指定一個(gè)控件,比如上面指定的那個(gè)bottom,那么他會(huì)自動(dòng)獲取這個(gè)控件對(duì)應(yīng)的高度,在進(jìn)行加減。
這樣就保證了,某些控件的相對(duì)位置保持不變。
下面看一下效果:
拉伸后編程
?
什么是GridData呢?又該如何使用呢?
下面介紹一下GridData,這個(gè)也是一個(gè)重量級(jí)的參數(shù):
這個(gè)參數(shù)用于指定目標(biāo)如何擺放,它描述了以表格為單位的布局。
它描述了空間本身的一個(gè)布局?jǐn)[放的方式:
并且搭配之前的GridLayout布局,通過(guò)每行有幾列的方式,控制布局。先看一下都有什么參數(shù),以及參數(shù)描述的意義:
GridData griddata = new GridData(SWT.FILL,SWT.FILL,false,false,1,1);
一般都是上面這樣的參數(shù)格式:
第一個(gè)參數(shù):水平方向如何對(duì)齊
第二個(gè)參數(shù):豎直方向如何對(duì)齊
第三個(gè)參數(shù):是否占用水平的剩余空間
第四個(gè)參數(shù):是否占用豎直的剩余空間
第五個(gè)參數(shù):水平的列數(shù)
第六個(gè)參數(shù):豎直的行數(shù)
這樣一來(lái),舉個(gè)例子就簡(jiǎn)單了。
比如我們指定了一個(gè)表格是三行三列的,那么通過(guò)設(shè)定
第一個(gè)控件參數(shù)是(SWT.FILL,SWT.FILL,false,false,1,1);
第二個(gè)參數(shù)是(SWT,SWT,false,false,1,2);
第三個(gè)參數(shù)是(SWT.FILL_BOTH);
第四個(gè)得到如下的布局:(SWT.FILL,SWT.FILL,false,false,1,1);
?
這樣我們得到如下的布局:
感覺(jué)上面的圖頓時(shí)拉低了文章的檔次,湊合看吧??梢钥吹降诙€(gè)控件,通過(guò)指定真的占用了兩列。
但是第三個(gè)的FILL_BOTH并沒(méi)有按照預(yù)期占用了剩余的所有控件,這就說(shuō)明,填充布局還是不會(huì)垮行到下一列的布局的。
?
另外添加兩個(gè)小知識(shí),就是使用顏色以及圖片。
顏色通常使用RGB來(lái)指定:
Color color = new Color(null,255,0,0);
text.setForeground(color);
顏色的第一參數(shù)是Device,可以填寫(xiě)為null;
而圖片也圖普通的控件一樣,需要指定一個(gè)ImgData來(lái)指定圖片的URL即可:
Image img = new Image(null,"icons\\ok.png");
button.setImage(img);
?
下面是這個(gè)例子所用到的代碼:
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); //第一個(gè)數(shù)字式百分比,也就是說(shuō) 【寬度-5】
// formData1.bottom = new FormAttachment(100,-5); //第一個(gè)數(shù)字式百分比,也就是說(shuō) 【高度-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個(gè)像素】
// 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
當(dāng)然,最好是參考前幾篇例子,可以真正體會(huì)到布局的妙處!
作者:xingoo
出處:http://www.cnblogs.com/xing901022
本文版權(quán)歸作者和博客園共有。歡迎轉(zhuǎn)載,但必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接!
posted @
2014-11-14 23:02?
xingoo?
閱讀(22274)?
評(píng)論(0)?
編輯?
收藏?
舉報(bào)
會(huì)員力量,點(diǎn)亮園子希望
刷新頁(yè)面返回頂部
公告
Copyright ? 2024 xingoo
Powered by .NET 8.0 on Kubernetes
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
學(xué)過(guò)JAVA ,想學(xué)GUI。網(wǎng)友說(shuō)swing awt被淘汰了。請(qǐng)教現(xiàn)在主流的JAVA gui開(kāi)發(fā)學(xué)啥? - 知乎首頁(yè)知乎知學(xué)堂發(fā)現(xiàn)等你來(lái)答?切換模式登錄/注冊(cè)圖形用戶界面用戶界面設(shè)計(jì)Swing(Java)學(xué)過(guò)JAVA ,想學(xué)GUI。網(wǎng)友說(shuō)swing awt被淘汰了。請(qǐng)教現(xiàn)在主流的JAVA gui開(kāi)發(fā)學(xué)啥?關(guān)注者82被瀏覽286,476關(guān)注問(wèn)題?寫(xiě)回答?邀請(qǐng)回答?好問(wèn)題 4?2 條評(píng)論?分享?19 個(gè)回答默認(rèn)排序圓胖腫Java mayb late bt never absent? 關(guān)注稍微講一下java gui的歷史吧,java的gui的延伸其實(shí)還包括了安卓以及谷歌做的那些努力java最早的圖形控件就是awt,這個(gè)沒(méi)問(wèn)題,但是awt做的事很少,基本上只是做一點(diǎn)簡(jiǎn)單的包裝,所以如果你用的是awt的話,你可能會(huì)有比較多的工作要做,比如你想做動(dòng)畫(huà),用awt就會(huì)遇到屏幕閃爍的問(wèn)題,所以你要去弄離屏表面,然后渲染完之后再flip過(guò)去,這個(gè)屬于極為低端的技術(shù),awt這種低層次的封裝你就必需要用這種手段,開(kāi)發(fā)很慢,其實(shí)你用c之類的,估計(jì)還能遇到這種問(wèn)題這是第一個(gè)階段那后來(lái)就出現(xiàn)了一個(gè)發(fā)展,sun當(dāng)時(shí)發(fā)展出了swing,但是這時(shí)候爆發(fā)了一個(gè)巨大的導(dǎo)致分裂的沖突,那就是ibm當(dāng)時(shí)提出了使用swt,而sun提出了swing,swt代表著native widget的分支和走向,而swing則代表了emulate widget的分支和走向這兩者的區(qū)別呢,我這里簡(jiǎn)單說(shuō)一下,native widget的做法主張,更多地復(fù)用操作系統(tǒng)本身的控件和樣式,舉個(gè)例子,比如windows提供了圖形庫(kù)directx3d,macosx提供了圖形庫(kù)是metal,標(biāo)準(zhǔn)則是opengl和vulkan,那么swt一派就認(rèn)為,我們應(yīng)該提供一個(gè)統(tǒng)一的api,然后這個(gè)api在實(shí)現(xiàn)的時(shí)候,根據(jù)操作系統(tǒng)的差異,自動(dòng)選擇不同的圖形庫(kù)予以使用,這樣這個(gè)api就是一層thin wrapper,這樣做的好處就是,你可以很快滴利用上操作系統(tǒng)提供的各種圖形庫(kù),比如win上就用directx,mac上就用metal,etc.還有窗口的樣式等,但是壞處就是,你在不同的操作系統(tǒng)上,看到的樣式什么的,會(huì)有差異,比如swt在它網(wǎng)站上給出的幾個(gè)例子就很好滴說(shuō)明這一點(diǎn),不同操作系統(tǒng)上的展示有明顯的不同,如下圖:同樣的窗口在不同操作系統(tǒng)上的展示,很明顯可以看出很多差異來(lái)那swing則表示,這個(gè)太不跨平臺(tái)了,java應(yīng)該編譯一次,然后到處運(yùn)行,而且到處運(yùn)行時(shí)候看起來(lái)應(yīng)該是一樣的,徹底屏蔽操作系統(tǒng)帶來(lái)的差異,應(yīng)該做一層thick wrapper,厚包裝,那這樣做的壞處有幾個(gè),第一個(gè)就是不同操作系統(tǒng)的圖形庫(kù)不一樣,那強(qiáng)行一致的結(jié)果就是,只能用最弱雞的那個(gè)去搞了,當(dāng)時(shí)標(biāo)準(zhǔn)是opengl,那就是opengl了,在win上也用不了directx,而且不是所有的操作系統(tǒng)都有這么高級(jí)的渲染工具的,所以swing還缺省提供了一個(gè)沒(méi)有硬件加速,純軟件渲染的界面,而且更要命的是,缺省是不開(kāi)硬件加速的,所以這就導(dǎo)致swing做出來(lái)的時(shí)候,慢,因?yàn)闆](méi)開(kāi)硬件加速,哪怕你的顯卡支持你能用硬件加速渲染,它還是缺省會(huì)用純軟件渲染,然后你要懂怎么開(kāi)硬件加速才能實(shí)現(xiàn)你想要的效果,就像很多人可能至今都不知道idea的vmoption其實(shí)是可以開(kāi)硬件加速的吧?在help里面,選擇vmoption,然后添加上這一行:-Dsun.java2d.opengl=true,以啟動(dòng)硬件加速參考:https://stackoverflow.com/questions/4627320/java-hardware-acceleration而且還很要命的一點(diǎn),swing的組長(zhǎng)似乎對(duì)于gui好看不好看沒(méi)有什么概念,缺省用的是unix那一套gui,就是幾十年前的那種gui,這里貼出蘋(píng)果早期的gui,macos也是freebsd的變種,都是unix的一員,所以早期版本的gui還保留了比較多unix原始的形態(tài),看看就能感覺(jué)出來(lái)跟swing那個(gè)是不是很像了,看拖動(dòng)條的紫色,幾乎一摸一樣unix gui早期機(jī)能所限,能做成這樣已經(jīng)很好了,但是進(jìn)入90年代之后,還在畫(huà)這種窗口,那就只能給人感覺(jué)原始了這是第二個(gè)階段,這個(gè)階段的過(guò)程就是swing和swt兩邊吵翻天,內(nèi)訌,最后java在gui上大敗,鎩羽而歸,因?yàn)閟wing缺省的界面丑,慢,加上java早期本身也不怎么快,所以java在gui上幾乎是沒(méi)有咬下任何市場(chǎng),早期在智能機(jī)上的j2me也被教主復(fù)出之后的iphone搞死了,swt最大的遺產(chǎn)就是eclipse了,swing最大的遺產(chǎn)就是idea還有netbeans了然后進(jìn)入第三個(gè)階段,java后來(lái)發(fā)現(xiàn),swing這個(gè)搞法不是個(gè)辦法,沒(méi)人用,sun在臨死之前,總算頭腦清醒了一回,走回swt的道路,搞出了javafx,然后sun就掛了,一開(kāi)始是找ibm收購(gòu),ibm嫌貴,不買(mǎi),然后sun才去找oracle收購(gòu),javafx也跟swt一樣,根據(jù)os會(huì)自動(dòng)選擇不同的圖形庫(kù),比如win上用的就是directx3d,mac上用的就是metal(將來(lái),參考project lanai)那這里還有一個(gè)分支,那就是教主復(fù)出之后,把iphone搞起來(lái)了,一搞起來(lái)就把可以裝在j2me的智能機(jī)給搞死了,然后有一家公司叫做Google,Google其實(shí)在sun作為java當(dāng)家的時(shí)候,Google大量參與了java標(biāo)準(zhǔn)的制定,一個(gè)是Google一個(gè)是Apache,這倆貨幾乎常年都在jcp執(zhí)行委員會(huì)里呆著,所以java早期的大量標(biāo)準(zhǔn)的制定,都跟這倆貨有很大關(guān)系。那Google看到蘋(píng)果做出了iphone之后,就有樣學(xué)樣,弄出了安卓,當(dāng)然一開(kāi)始是魯賓做的,然后Google收購(gòu)來(lái)的,但是Google在安卓上使用的是一個(gè)魔改的java,所以保留了很多java原始的特性,當(dāng)然Google拿到j(luò)ava之后,它就沒(méi)照搬swing,但是呢,它保留了很多swing的影子,然后在Google被oracle告了之后,另劈新道,搞出了dart,flutter這些東西,而Google的skia引擎目前主要還是依賴opengl渲染,將來(lái)會(huì)加入vulkan渲染,因?yàn)檫@兩是標(biāo)準(zhǔn),這就跟swing很像了你看,這個(gè)階段swt變成了javafx,swing承認(rèn)失敗,java2d組開(kāi)始更多地投入javafx,而javafx的設(shè)計(jì)沿襲了swt的設(shè)計(jì),就是對(duì)操作系統(tǒng)底層的api做一層thin wrapper,但是安卓這邊,則更多地延續(xù)了swing的設(shè)計(jì),到了flutter階段,實(shí)際上Google也還是自己做一層thick wrapper,flutter能保證不同操作系統(tǒng)上看到的界面是一樣的,如果你用的是material design的話,那在ios上也有漣漪效果,如果你用的是cuptertino的話,那你在安卓機(jī)器上也能看到金屬高光,但是這樣做成本就高,但是Google有錢(qián)也有人,而且一直有傳言說(shuō),Google招了太多人進(jìn)去,無(wú)事可做,所以安排點(diǎn)工作給他們?nèi)プ?,哪怕這些工作只是重復(fù)造輪子,但是總比讓他們閑著好,所以就讓他們?nèi)ピ旄旄玫妮喿影伞lutter的設(shè)計(jì)就有一點(diǎn)這種味道在里面,什么都自己做,而且Google還做得相當(dāng)不錯(cuò)但是java沒(méi)那么多人,所以javafx就選擇了更加雞賊一點(diǎn)的道路,做一層thin wrapper,看上去不一樣就不一樣,跨平臺(tái)能用就行,javafx的組其實(shí)沒(méi)有那么多人,常見(jiàn)就那么幾個(gè),johan,kevin,還有巴西人博格斯,其實(shí)沒(méi)幾個(gè),flutter team的規(guī)模遠(yuǎn)比javafx的開(kāi)發(fā)規(guī)模要大得多那這個(gè)階段就是我們目前正在經(jīng)歷的階段,如果你問(wèn)java gui用啥,那就是javafx,這個(gè)是java所有項(xiàng)目的共識(shí),javafx也比較容易擴(kuò)展,13之后,你都可以用native的手段來(lái)渲染,可以借助nativefx或者是driftfx項(xiàng)目,然后用上比如qt之類的控件。這里說(shuō)一下,javafx的社區(qū)可以看到很多說(shuō)德語(yǔ)的人,來(lái)自德國(guó),奧地利,瑞士等,很多相關(guān)項(xiàng)目都是德國(guó)人在做,德國(guó)人在這種工程領(lǐng)域上造詣可見(jiàn)一斑。如果你不糾結(jié)于java自身,那你也可以看看flutter這些,dart/flutter其實(shí)就是Google版的java/javafx,因?yàn)閐art以及dartvm的作者之一lars bak本身就是缺省jvm hotspot的作者,它的很多設(shè)計(jì),原理什么,都跟java社區(qū)的差不多,不能說(shuō)完全一樣,但是你都能看到很多共同點(diǎn),比如pub就是maven,skia就是prism,dart就是java,如果你會(huì)java的話,搞dart很快,分分鐘上手總結(jié)一下,第一階段awt,第二階段swing和swt,第三階段javafx和flutter如果你要學(xué),學(xué)最后兩個(gè)編輯于 2019-09-02 23:30?贊同 342??14 條評(píng)論?分享?收藏?喜歡收起?子謙幻想學(xué)者? 關(guān)注Java的GUI我倒是用過(guò)不少。Swing的話是Java最傳統(tǒng)的GUI了,初始界面不怎么樣,但是有很多LookAndFeel,如果想偷懶可以直接使用其他人封裝的LookAndFeel改變界面,效果也是不錯(cuò)的,Swing經(jīng)過(guò)了這么久的發(fā)展,已經(jīng)十分成熟,多數(shù)的坑都能夠找到解決辦法,淘汰到算不上,不過(guò)好像已經(jīng)不更新了,因?yàn)镴ava在主推另一個(gè)GUI技術(shù),JavaFX。JavaFX是Java目前官方推薦的GUI技術(shù),XML進(jìn)行布局,支持CSS,你學(xué)過(guò)HTML之類的WEB開(kāi)發(fā)的話,應(yīng)該知道CSS是個(gè)啥,他的界面極其靈活,通過(guò)FXML和CSS也能夠很快速的構(gòu)建界面,但是系統(tǒng)的資源消耗會(huì)比較大,不過(guò)這應(yīng)該不是什么問(wèn)題吧。它還直接支持音頻視頻和動(dòng)畫(huà)效果,好像還有3D功能,不過(guò)現(xiàn)在應(yīng)該還不穩(wěn)定,JavaFX應(yīng)該還是可以移植到Android的,ios不是很清楚。但是這個(gè)東西在windows之外的平臺(tái)上面會(huì)有坑點(diǎn),要特別注意。SWT、JFace,這個(gè)是Eclipse用的技術(shù),就是那個(gè)Java的開(kāi)發(fā)工具Eclipse,還可以吧,但是需要一些平臺(tái)相關(guān)的東西,用起來(lái)稍微有點(diǎn)別扭,UI里面有些細(xì)節(jié)不能自己控制,但是界面的效率會(huì)高一些,畢竟是直接的JNI,很多是直接使用系統(tǒng)本身的控件,好像是支持CSS的,反正我沒(méi)用出來(lái)過(guò)。QtJambi,Qt的Java版,Qt本身是c++的類庫(kù),這個(gè)是給java提供的語(yǔ)言綁定,不過(guò)qt的話只到了Qt4,也不知道有沒(méi)有人繼續(xù)更新維護(hù)。這個(gè)版本提供的設(shè)計(jì)器好像有點(diǎn)問(wèn)題,不過(guò)可以自己編寫(xiě)代碼進(jìn)行設(shè)計(jì),反正設(shè)計(jì)器的ui文件最終也會(huì)變成java代碼,如果你用過(guò)Qt的話可以試試。Gnome-Java,Linux系統(tǒng)可以試試,因?yàn)樗恢С謜indows,我沒(méi)有用過(guò)他,只是知道而已。哦,對(duì)了,AWT,不知道你為啥會(huì)提到這個(gè),現(xiàn)在你就當(dāng)他不存在好了,基本是不會(huì)直接使用AWT的。2020 - 8 -14 更新Java版本有了一個(gè)新的Qt封裝,基于javacpp技術(shù),這個(gè)應(yīng)該比較新,喜歡qt的應(yīng)該可以嘗試一下,名字叫做JavaCPP Presets For Qt,我們可以直接在maven搜索qt就能找到,它依賴于JavaCPP Presets For Qt Platforms,所以需要在maven中加入他。編輯于 2020-08-14 10:04?贊同 33??4 條評(píng)論?分享?收藏?喜歡
【SWT】常用代碼(二)-阿里云開(kāi)發(fā)者社區(qū)
產(chǎn)品解決方案文檔與社區(qū)權(quán)益中心定價(jià)云市場(chǎng)合作伙伴支持與服務(wù)了解阿里云售前咨詢 95187-1 在線服務(wù)售后咨詢 4008013260 在線服務(wù)其他服務(wù) 我要建議 我要投訴更多聯(lián)系方式備案控制臺(tái)開(kāi)發(fā)者社區(qū)首頁(yè)探索云世界探索云世界云上快速入門(mén),熱門(mén)云上應(yīng)用快速查找了解更多問(wèn)產(chǎn)品動(dòng)手實(shí)踐考認(rèn)證TIANCHI大賽活動(dòng)廣場(chǎng)活動(dòng)廣場(chǎng)豐富的線上&線下活動(dòng),深入探索云世界任務(wù)中心做任務(wù),得社區(qū)積分和周邊高校計(jì)劃讓每位學(xué)生受益于普惠算力訓(xùn)練營(yíng)資深技術(shù)專家手把手帶教話題暢聊無(wú)限,分享你的技術(shù)見(jiàn)解開(kāi)發(fā)者評(píng)測(cè)最真實(shí)的開(kāi)發(fā)者用云體驗(yàn)乘風(fēng)者計(jì)劃讓創(chuàng)作激發(fā)創(chuàng)新阿里云MVP遇見(jiàn)技術(shù)追夢(mèng)人直播技術(shù)交流,直擊現(xiàn)場(chǎng)下載下載海量開(kāi)發(fā)者使用工具、手冊(cè),免費(fèi)下載鏡像站極速、全面、穩(wěn)定、安全的開(kāi)源鏡像技術(shù)資料開(kāi)發(fā)手冊(cè)、白皮書(shū)、案例集等實(shí)戰(zhàn)精華插件為開(kāi)發(fā)者定制的Chrome瀏覽器插件探索云世界新手上云云上應(yīng)用構(gòu)建云上數(shù)據(jù)管理云上探索人工智能云計(jì)算彈性計(jì)算無(wú)影存儲(chǔ)網(wǎng)絡(luò)倚天云原生容器serverless中間件微服務(wù)可觀測(cè)消息隊(duì)列數(shù)據(jù)庫(kù)關(guān)系型數(shù)據(jù)庫(kù)NoSQL數(shù)據(jù)庫(kù)數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)管理工具PolarDB開(kāi)源向量數(shù)據(jù)庫(kù)熱門(mén)Modelscope模型即服務(wù)彈性計(jì)算云原生數(shù)據(jù)庫(kù)物聯(lián)網(wǎng)云效DevOps龍蜥操作系統(tǒng)平頭哥釘釘開(kāi)放平臺(tái)大數(shù)據(jù)大數(shù)據(jù)計(jì)算實(shí)時(shí)數(shù)倉(cāng)Hologres實(shí)時(shí)計(jì)算FlinkE-MapReduceDataWorksElasticsearch機(jī)器學(xué)習(xí)平臺(tái)PAI智能搜索推薦人工智能機(jī)器學(xué)習(xí)平臺(tái)PAI視覺(jué)智能開(kāi)放平臺(tái)智能語(yǔ)音交互自然語(yǔ)言處理多模態(tài)模型pythonsdk通用模型開(kāi)發(fā)與運(yùn)維云效DevOps釘釘宜搭支持服務(wù)鏡像站碼上公益
開(kāi)發(fā)者社區(qū)
開(kāi)發(fā)與運(yùn)維
文章
正文
【SWT】常用代碼(二)
2023-08-16
89
版權(quán)
版權(quán)聲明:
本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《
阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和
《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)
侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。
簡(jiǎn)介:
【SWT】常用代碼(二)
零零年夏
目錄
熱門(mén)文章
最新文章
為什么選擇阿里云什么是云計(jì)算全球基礎(chǔ)設(shè)施技術(shù)領(lǐng)先穩(wěn)定可靠安全合規(guī)分析師報(bào)告產(chǎn)品和定價(jià)全部產(chǎn)品免費(fèi)試用產(chǎn)品動(dòng)態(tài)產(chǎn)品定價(jià)價(jià)格計(jì)算器云上成本管理解決方案技術(shù)解決方案文檔與社區(qū)文檔開(kāi)發(fā)者社區(qū)天池大賽培訓(xùn)與認(rèn)證權(quán)益中心免費(fèi)試用高校計(jì)劃企業(yè)扶持計(jì)劃推薦返現(xiàn)計(jì)劃支持與服務(wù)基礎(chǔ)服務(wù)企業(yè)增值服務(wù)遷云服務(wù)官網(wǎng)公告健康看板信任中心關(guān)注阿里云關(guān)注阿里云公眾號(hào)或下載阿里云APP,關(guān)注云資訊,隨時(shí)隨地運(yùn)維管控云服務(wù)售前咨詢:95187-1售后服務(wù):400-80-13260法律聲明及隱私權(quán)政策Cookies政策廉正舉報(bào)安全舉報(bào)聯(lián)系我們加入我們阿里巴巴集團(tuán)淘寶網(wǎng)天貓全球速賣(mài)通阿里巴巴國(guó)際交易市場(chǎng)1688阿里媽媽飛豬阿里云計(jì)算AliOS萬(wàn)網(wǎng)高德UC友盟優(yōu)酷釘釘支付寶達(dá)摩院淘寶海外阿里云盤(pán)餓了么? 2009-2024 Aliyun.com 版權(quán)所有 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證: 浙B2-20080101 域名注冊(cè)服務(wù)機(jī)構(gòu)許可: 浙D3-20210002 京D3-20220015浙公網(wǎng)安備 33010602009975號(hào)浙B2-20080101-4