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圖形界面開發(fā):SWT全接觸-CSDN博客
【轉帖】Java圖形界面開發(fā):SWT全接觸
最新推薦文章于?2024-01-26 13:17:00?發(fā)布
msdnchina
最新推薦文章于?2024-01-26 13:17:00?發(fā)布
閱讀量1.6w
收藏
20
點贊數(shù)
2
分類專欄:
JAVA
文章標簽:
java
swt
JAVA
專欄收錄該內容
8 篇文章
0 訂閱
訂閱專欄
本文轉自:https://www.xuebuyuan.com/1457795.html
從Java誕生至今,已經在太多的領域取得成功,然而它卻很少在圖形界面程序上嶄露頭角。究其原因,Java語言缺省的圖形界面開發(fā)包AWT和SWING實在是難脫其究,無論速度和外觀,它們都難以讓人接受。如今,Eclipse組織編寫的SWT開發(fā)包,為Java程序員提供了AWT和SWING之外的一個更佳的選擇。在本文中,對SWT做了簡單但盡可能全面的介紹。
?
????????Java語言的聲望和它在桌面應用程序(GUI程序)所取得的成就顯然極不相符,至今仍然很少能看到非常成功Java桌面程序。雖然有JBuilder,Netbean,JProbe等大型軟件作為代表,但這仍不能證明Java的GUI程序是成功的:它們的外觀總是和同一操作系統(tǒng)平臺下的其它軟件顯得格格不入。對機器配置的需求也似乎永無止境,這使得它們只能被一些總是擁有當前最高性能PC的程序員們所容忍,或是那些不在乎金錢和時間的專業(yè)用戶所接受。對絕大多數(shù)計算機使用者來說,AWT或SWING代表著怪異的界面和無法接受的速度。Standard Widget Toolkit(SWT)或許是Java這一噩夢的終結者,廣大Java程序員終于可以開發(fā)出高效率的GUI程序,它們擁有標準的外觀,幾乎沒有人能看出你的程序是用Java寫出來的,更為重要的是,這些程序是跨平臺的。
????????SWT本身僅僅是Eclipse組織為了開發(fā)Eclipse IDE環(huán)境所編寫的一組底層圖形界面API?;蛟S是無心插柳,或是有意為之,至今為止,SWT無論是在性能和外觀上,都超越了SUN公司提供的AWT和SWING。目前Eclipse IDE已經開發(fā)到了2.1版本,SWT已經十分穩(wěn)定。這里指的穩(wěn)定應該包含兩層意思:
????????一是指性能上的穩(wěn)定,其中的關鍵是源于SWT的設計理念。SWT最大化了操作系統(tǒng)的圖形構件API,就是說只要操作系統(tǒng)提供了相應圖形的構件,那么SWT只是簡單應用JNI技術調用它們,只有那些操作系統(tǒng)中不提供的構件,SWT才自己去做一個模擬的實現(xiàn)??梢钥闯鯯WT性能上的穩(wěn)定大多時候取決于相應操作系統(tǒng)圖形構件的穩(wěn)定性。
????????另一個穩(wěn)定是指SWT API包中的類、方法的名稱和結構已經少有改變,程序員不用擔心由于Eclipse組織開發(fā)進度很快(Eclipse IDE每天都會有一個Nightly版本的發(fā)布),而導致自己的程序代碼變化過大。從一個版本的SWT更新至另一版本,通常只需要簡單將SWT包換掉就可以了。
?
第一個SWT程序
?
????????下面讓我們開始一個SWT程序。(注意:以下的例子和說明主要針對Windows平臺,其它的操作系統(tǒng)應該大同小異)。首先要在Eclipse安裝文件中找到SWT包,Eclipse組織并不提供單獨的SWT包下載,必須下載完整的Eclipse開發(fā)環(huán)境才能得到SWT包。SWT是作為Eclipse開發(fā)環(huán)境的一個插件形式存在,可以在${你的eclipse安裝路徑}/plugins路徑下的眾多子目錄下去搜索SWT.JAR文件,在找到的JAR文件中包含了SWT全部的Java類文件。因為SWT應用了JNI技術,因此同時也要找到相對應的JNI本地化庫文件,由于版本和操作平臺的不同,本地化庫文件的名稱會有些差別,比如SWT-WIN32-2116.DLL是Window平臺下Eclipse Build 2116的動態(tài)庫,而在Unix平臺相應版本的庫文件的擴展名應該是.so,等等。注意的是,Eclipse是一個開放源代碼的項目,因此你也可以在這些目錄中找到SWT的源代碼,相信這會對開發(fā)很有幫助。?
下面是一段打開空窗口的代碼(只有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();
// 開始事件處理循環(huán),直到用戶關閉窗口
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。成功運行后,系統(tǒng)會打開了一個空的窗口。
?
剖析SWT API
?
????????下面再讓我們進一步分析SWT API的組成。所有的SWT類都用org.eclipse.swt做為包的前綴,下面為了簡化說明,我們用*號代表前綴org.eclipse.swt,比如*.widgets包,代表的是org.eclipse.swt.widgets包。
????????我們最常用的圖形構件基本都被包括在*.widgets包中,比如Button,Combo,Text,Label,Sash,Table等等。其中兩個最重要的構件當數(shù)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包中可以找到事件監(jiān)聽的Listener接口和相應的事件對象,例如常用的鼠標事件監(jiān)聽接口MouseListener,MouseMoveListener和MouseTrackListener,及對應的事件對象MouseEvent。
????????*.graphics包中可以找到針對圖片、光標、字體或繪圖的API。比如可通過Image類調用系統(tǒng)中不同類型的圖片文件。通過GC類實現(xiàn)對圖片、構件或顯示器的繪圖功能。
????????對不同平臺,Eclipse還開發(fā)了一些富有針對性的API。例如,在Windows平臺,可以通過*.ole.win32包很容易的調用ole控件,這使Java程序內嵌IE瀏覽器或Word、Excel等程序成為可能!
????????要進一步了解SWT的情況,可以在Eclipse IDE的幫助文檔中找到SWT的JavaDoc說明。當然最深入的了解莫過于去讀SWT的源代碼,這也正是開放源代碼項目對程序員的魅力所在!?
??????????????????????????????????????????????????????????????????????????????更復雜的程序
????????下面讓我們展示一個比上面例子更加復雜一些的程序。這個程序擁有一個文本框和一個按鍵,當用戶點擊按鍵的時候,文本框顯示一句歡迎信息。
????????為了文本框和按鍵有比較合理的大小和布局,這里采用了GradLayout布局方式。這種布局是SWT中最常用也是最強大的布局方式,幾乎所有的格式都可能通過GradLayout去達到。下面的程序也涉及到了如何應用系統(tǒng)資源(Color),以及如何釋放系統(tǒng)資源。
?
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");
}
});
//當主窗口關閉時,會觸發(fā)DisposeListener。這里用來釋放Panel的背景色。
shell.addDisposeListener(new DisposeListener(){
public void widgetDisposed(DisposeEvent e) {
bkColor.dispose();
}
});
}
把這段代碼中的方法initShell()加入到第一個打開空窗口的例子中,得到的是一段能成功運行的完整GUI應用程序。運行方法可參考第一個例子。
?
系統(tǒng)資源的管理
?
????????在一個圖形化的操作系統(tǒng)中開發(fā)程序,都要調用系統(tǒng)中的資源,如圖片、字體、顏色等。通常這些資源都是有限的,程序員務必非常小心的使用這些資源:當不再使用它們時,就請盡快釋放,不然操作系統(tǒng)遲早會油盡燈枯,不得不重新啟動,更嚴重的會導致系統(tǒng)崩潰。
????????SWT是用Java開發(fā)的,Java語言本身的一大優(yōu)勢就是JVM的“垃圾回收機制”,程序員通常不用理會變量的釋放,內存的回收等問題。那么對SWT而言,系統(tǒng)資源的操作是不是也是如此?答案是一個壞消息,一個好消息。
????????壞消息是SWT并沒采用JVM的垃圾回收機制去處理操作系統(tǒng)的資源回收問題,一個關鍵的因素是因為JVM的垃圾回收機制是不可控的,也就是說程序員不能知道,也不可能做到在某一時刻讓JVM回收資源!這對系統(tǒng)資源的處理是致命的,試想你的程序希望在一個循環(huán)語句中去查看數(shù)萬張圖片,常規(guī)的處理方式是每次調入一張,查看,然后就立即釋放該圖片資源,而后在循環(huán)調入下一張圖片,這對操作系統(tǒng)而言,任何時刻程序占用的僅僅是一張圖片的資源。但如果這個過程完全交給JVM去處理,也許會是在循環(huán)語句結束后,JVM才會去釋放圖片資源,其結果可能是你的程序還沒有運行結束,操作系統(tǒng)已經宕掉。
????????但下面的好消息也許會讓這個壞消息變得無關緊要。對于SWT,只需了解兩條簡單的“黃金”法則就可以放心的使用系統(tǒng)資源!之所以稱為黃金法則,一是因為少,只有兩條,二是因為它們出奇的簡單。第一條是“誰占用,誰釋放”,第二條是“父構件被銷毀,子構件也同時被銷毀”。第一條原則是一個無任何例外的原則,只要程序調用了系統(tǒng)資源類的構造函數(shù),程序就應該關心在某一時刻要釋放這個系統(tǒng)資源。比如調用了
?
Font font = new Font (display, "Courier", 10, SWT.NORMAL);
那么就應該在不在需要這個Font的時候調用
?
font.dispose();
對于第二個原則,是指如果程序調用某一構件的dispose()方法,那么所有這個構件的子構件也會被自動調用dispose()方法而銷毀。通常這里指的子構件與父構件的關系是在調用構件的構造函數(shù)時形成的。比如,
?
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系統(tǒng)中,對構件或一些圖形API的訪問操作都要被嚴格同步并串行化。例如,在一個圖形界面中的按鍵構件可被設成可用狀態(tài)(enable)或禁用狀態(tài)(disable),正常的處理方式是,用戶對按鍵狀態(tài)設置操作都要被放入到GUI系統(tǒng)的事件處理隊列中(這意味著訪問操作被串行化),然后依次處理(這意味著訪問操作被同步)。想象當按鍵可用狀態(tài)的設置函數(shù)還沒有執(zhí)行結束的時候,程序就希望再設置該按鍵為禁用狀態(tài),勢必會引起沖突。實際上,這種操作在任何GUI系統(tǒng)都會觸發(fā)異常。
????????Java語言本身就提供了多線程機制,這種機制對GUI編程來說是不利的,它不能保證圖形構件操作的同步與串行化。SWT采用了一種簡單而直接的方式去適應本地GUI系統(tǒng)對線程的要求:在SWT中,通常存在一個被稱為"用戶線程"的唯一線程,只有在這個線程中才能調用對構件或某些圖形API的訪問操作。如果在非用戶線程中程序直接調用這些訪問操作,那么SWTExcepiton異常會被拋出。但是SWT也在*.widget.Display類中提供了兩個方法可以間接的在非用戶線程的進行圖形構件的訪問操作,這是通過的syncExec(Runnable)和asyncExec(Runnable)這兩個方法去實現(xiàn)的。例如:
?
//此時程序運行在一個非用戶線程中,并且希望在構件panel上加入一個按鍵。
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
Button butt = new Button(panel,SWT.PUSH);
butt.setText("Push");
}
});
方法syncExec()和asyncExec()的區(qū)別在于前者要在指定的線程執(zhí)行結束后才返回,而后者則無論指定的線程是否執(zhí)行都會立即返回到當前線程。
?
SWT的擴展:JFace
?
????????JFace與SWT的關系好比Microsoft的MFC與SDK的關系,JFace是基于SWT開發(fā),其API比SWT更加易于使用,但功能卻沒SWT來的直接。比如下面的代碼應用JFace中的MessageDialog打開一個警告對話框:
?
MessageDialog.openWarning(parent,"Warning","Warning message");
如果只用SWT完成以上功能,語句不會少于30行!
????????JFace原本是為更加方便的使用SWT而編寫的一組API,其主要目的是為了開發(fā)Eclipse IDE環(huán)境,而不是為了應用到其它的獨立應用程序。因此在Eclipse 2.1版本之前,很難將JFace API完整的從Eclipse的內核API中剝離出來,總是要多多少少導入一些非JFace以外的Eclipse核心代碼類或接口才能得到一個沒有任何編譯錯誤的JFace開發(fā)包。但目前Eclipse組織似乎已經逐漸意識到了JFace在開發(fā)獨立應用程序起到的重要作用,在正在開發(fā)的2.1版本中,JFace也開始變成了和SWT一樣的完整獨立的開發(fā)包,只是這個開發(fā)包還在變動中(筆者寫本文時,應用的Eclipse2.1M3版本)。JFace開發(fā)包的包前綴是以org.eclipse.jface開頭。JAR包和源代碼也和SWT一樣,也在${你的eclipse安裝路徑}/plugins路徑下去找。
????????對開發(fā)人員來說,在開發(fā)一個圖形構件的時候,比較好的方式是先到JFace包去找一找,看是不是有更簡潔的實現(xiàn)方法,如果沒有再用SWT包去自己實現(xiàn)。比如JFace為對話框提供了很好的支持,除了各種類型的對話框(比如上面用的MessageDialog,或是帶有Title欄的對話框),如要實現(xiàn)一個自定義的對話框也最好從JFace中的Dialog類繼承,而不是從SWT中的*.widget.Dialog繼承。
????????應用JFace中的Preference包中的類很容易為自己的軟件做出一個很專業(yè)的配置對話框。對于Tree、Table等圖形構件,它們在顯示的同時也要和數(shù)據(jù)關聯(lián),例如Table中顯示的數(shù)據(jù),在JFace中的View包中為此類構件提供了Model-View方式的編程方法,這種方法使顯示與數(shù)據(jù)分開,更加利于開發(fā)與維護。JFace中提供最多的功能就是對文本內容的處理。可以在org.eclipse.jface.text.*包中找到數(shù)十個與文本處理相關類。
?
與應用程序更近一步
?
????????Java程序通常是以class文件的方式發(fā)布的,運行class需要JRE或JDK的支持。這又是Java GUI程序的另一個致命的弱點,想象對一個面向廣大用戶的應用程序來說,無論你的程序功能有多簡單,或是你的代碼十分的精簡,你都不得不讓用戶去下載一個7、8M的JRE,那是多么令人沮喪的一件事。而且對程序員來說,Class通常意味著源代碼的暴露,反編譯的工具讓那些居心叵測的人輕易得到你的源代碼。雖然有很多對Class的加密方法,但那總是以犧牲性能為代價的。好在我們還有其它的方式可用:把Class編譯成exe文件!
????????參考資料3提供了應用GCJ將SWT編譯成exe文件的詳細方法。作為對那篇文章的補充,就是目前也可以通過下載Cygwin得到Windows下的GCJ。 Excelsior也是筆者曾經用過的一款很好的編譯器,唯一的遺憾就是它的價格!
????????通過SWT開發(fā)包,簡單、跨平臺、可靠等這些Java語言本身所具有的優(yōu)點正漸漸融合到圖形界面的應用程序開發(fā)中去。因此,我相信Java語言的另一扇成功之門正在逐漸打開。
參考資料:
http://www.e2one.com 極一軟件工作室應用SWT&JFace API開發(fā)出的企業(yè)實時通訊IM軟件,是SWT&JFace開發(fā)Standalone程序的范例。
http://www.eclipse.org/articles/swt-design-2/swt-design-2.html 這篇文章中詳細論述了SWT開發(fā)者應該如何管理系統(tǒng)資源。
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的使用及簡單的插件開發(fā)過程。
www.eclipse.org 所有的關于Eclipse, SWT, JFace的問題都可以在這里找到答案。也是下載Eclipse開發(fā)環(huán)境的網站。
http://www.cygwin.com/ 可以得得到Windows版本的GCJ。
關于作者
倪大鵬,有多年的軟件開發(fā)經驗,其中近四年的時間集中在Java相關技術的研究。可以通過e-mail: ndp@e2one.com與他聯(lián)系。
『引自?IBM DW中國』?
優(yōu)惠劵
msdnchina
關注
關注
2
點贊
踩
20
收藏
覺得還不錯?
一鍵收藏
知道了
0
評論
【轉帖】Java圖形界面開發(fā):SWT全接觸
本文轉自:https://www.xuebuyuan.com/1457795.html從Java誕生至今,已經在太多的領域取得成功,然而它卻很少在圖形界面程序上嶄露頭角。究其原因,Java語言缺省的圖形界面開發(fā)包AWT和SWING實在是難脫其究,無論速度和外觀,它們都難以讓人接受。如今,Eclipse組織編寫的SWT開發(fā)包,為Java程序員提供了AWT和SWING之外的一個更佳的選擇。在本文中...
復制鏈接
掃一掃
專欄目錄
Java SWT 圖形用戶界面教程 PDF
07-22
Java SWT 圖形用戶界面教程 PDF
Java SWT 圖形用戶界面教程 PDF
Java圖形化界面編程超詳細知識點(5)——Swing編程
m0_66908465的博客
04-05
9071
本篇文章主要介紹Java圖形化界面編程中Swing類庫的詳細知識點總結,方便大家在圖形化界面編程時快速找到自己所需要的方法,希望對大家完成課設有所幫助。
參與評論
您還未登錄,請先
登錄
后發(fā)表或查看評論
JAVA SWT table界面+數(shù)據(jù)(多圖)
華容道的博客
03-01
1萬+
界面
1.布局
選用兩個composite,
設置shell的Layout為FillLayout;
設置Layout-Type(布局類型)為垂直分布;
設置右滑塊,下滑塊;
2.添加table組件
上面的composite添加的是CheckboxTableViewer,下面的是普通的Table;
同樣需要設置兩個composite的Layout屬性為Fill...
JavaGUI開發(fā)之SWT框架【Shell】
最新發(fā)布
qq_62835094的博客
01-26
969
在SWT框架中,shell組件可以理解為窗口shell的創(chuàng)建需要指定Display()組件,因此shell的創(chuàng)建一般使用的都是如下代碼Display組件,負責連接OS操作系統(tǒng),同時負責管理GUI 組件。Display在SWT框架中有著舉足輕重的作用,但一般開發(fā)過程中,沒怎么調用過display的api,因此本文不會詳細介紹Display,感興趣的讀者可以自行查看文檔。Shell組件的處境也和Display差不多。本文主要介紹Shell的創(chuàng)建方式,以及不同的創(chuàng)建方式得到的不同樣式。
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的區(qū)別”網址匯總
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,打包發(fā)布SWT程序,轉EXE一條龍過程記錄)?一、SWT的介紹?(使用SWT在各個操作系統(tǒng)上的效果)?SWT(Standard Widget Toolkit) Standard Widget Toolkit是一個開源的GUI編程框架,與AWT/Swing有相似的用處,著名的開源IDE-eclipse就是用SW
Eclipse下搭建SWT與Swing圖形界面開發(fā)環(huán)境
深之JohnChen的專欄
07-29
1萬+
Eclipse SWT Swing 圖形界面開發(fā)
Java中AWT、Swing與SWT三大GUI技術的原理與效率差異
遠方
09-27
2815
MineHe原創(chuàng)看了一下對Java GUI討論的帖子,所以寫了一篇文章來闡述一下各種GUI技術的優(yōu)劣。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等各種布局管理器,
這樣可以組合使用達到較為復雜的布局效果。
面板組件可以設置布局模式,實現(xiàn)多模式布局,但默認為流式布局。
面板組件里可以添加其他組件
代碼如下(
SWT/JFace(一)——概述
cole丶的博客
03-12
1711
一、SWT
1. 概述
SWT(Standard Widget Toolkit,標準圖形工具箱)是一種用java開發(fā)的GUI程序的技術。與出自Sun的AWT (Abstract Widget Toolkit,抽象圖形工具箱)和Swing不同,SWT是Eclipse的開發(fā)人員自行建造的。它無論在界面美觀度上還是在性能上都遠遠超越了AWT和Swing,即使和操作系統(tǒng)上的本地圖形界面程序相比也毫不遜色,...
【SWT】創(chuàng)建自己的SWT組件
小子寶丁的博客
08-08
1239
本文為部分譯文,交代了兩種方法創(chuàng)建SWT小組件
SWT 全接觸
hangke的專欄
10-25
1008
?Java 世界的人似乎一直都對 Java 的桌面應用程序十分不滿,從 AWT 到 SWING,從默認的 Theme到第三方的產品,不是太難看(AWT)就是在某些平臺有 BUG(SWING,Quaqua--一個Windows平臺下的仿Mac的主題包),再不就是對中文支持不好(某些第三方 LookAndFeel)。于是,如果想要獲得和本機平臺一致的用戶界面和比較穩(wěn)定的性能,SWT就成
SWT介紹 -jobslong
weixin_30902675的博客
04-05
70
---恢復內容開始---
SWT介紹
說明:為了達到更好的閱讀效果,請點擊以下鏈接,我們的dropbox里面下載pdf或者word文件,我們?yōu)槊恳粋€blog都生成了相關的文件,如果你需要相關的軟件也可以在評論留言,我可以上傳供大家下載;
https://www.dropbox.com/home用戶名:jobslongblogs@gmail.com 密碼:com.gmail@jobs...
swing,swt之爭(jvm和JNI相對于本地方法和遠程方法)
sole_ghost的專欄
04-14
2241
1.正方 SWT優(yōu)于Swing Java語言的聲望和它在桌面應用程序(GUI程序)所取得的成就顯然極不相符,至今仍然很少能看到非常成功Java桌面程序。雖然有JBuilder,Netbean,JProbe等大型軟件作為代表,但這仍不能證明Java的GUI程序是成功的:它們的外觀總是和同一操作系統(tǒng)平臺下的其它軟件顯得格格不入。對機器配置的需求也似乎永無止境,這使得它們只能被一些總是擁有當前最高性能
SWT概述二
longcxm1的博客
01-31
398
SWT技術是第一套基于java的第三方的圖形工具庫。它的設計思想是提供一套通用的API,使得開發(fā)出的圖形程序不僅可以不加修改地在平臺間移植,而且在外觀上和速度上能與使用C/C++等語言在操縱系統(tǒng)平臺上開發(fā)出來的本地圖形程序毫無差別。
當一個布局管理器被安裝到窗口上時,它就負責安排窗口中各個控件的位置和尺寸。當窗口尺寸發(fā)生變化時,布局管理器會根據(jù)一定的策略重新計算這些數(shù)據(jù),并將控件...
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
運放參數(shù)的詳細解釋和分析-轉帖TI工作人員的資料(doc版)
07-27
在TI論壇看到的帖子,感覺挺好,就整理成word文檔了,內容主要是運放datasheet常見參數(shù)的解釋和分析。TI原帖地址“http://www.deyisupport.com/question_answer/analog/amplifiers/f/52/t/20214.aspx”...感謝原作者。
“相關推薦”對你有幫助么?
非常沒幫助
沒幫助
一般
有幫助
非常有幫助
提交
msdnchina
CSDN認證博客專家
CSDN認證企業(yè)博客
碼齡21年
暫無認證
758
原創(chuàng)
1萬+
周排名
46萬+
總排名
462萬+
訪問
等級
5萬+
積分
384
粉絲
254
獲贊
165
評論
880
收藏
私信
關注
熱門文章
linux下查看網卡信息的命令
108757
windows下 sqlplus / as sysdba 報ora-12560的終極解決方法
63333
使用netstat查看tcp連接、udp連接
41337
red hat官方的rhel操作系統(tǒng)版本號與內核版本號的對應關系
38746
檢查docker版本的兩個命令
38145
分類專欄
DPU
1篇
OceanBase
1篇
PostgreSQL數(shù)據(jù)庫
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ù)復制軟件
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 /@數(shù)據(jù)庫的SID as sysdba 這樣可以了
獲得Windows主機的主機序列號
laidone:
SerialNumber
Default string??
DIX技術和T10 PI技術
weixin_42995907:
T10 PI格式化可以用哪些軟件
一個有用的技術網站
靜&慢&遠:
進不去了
您愿意向朋友推薦“博客詳情頁”嗎?
強烈不推薦
不推薦
一般般
推薦
強烈推薦
提交
最新文章
PostgreSQL中的大寫列名
2021中國DPU行業(yè)發(fā)展白皮書
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ù)庫
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ù)復制軟件
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篇
目錄
評論
被折疊的??條評論
為什么被折疊?
到【灌水樂園】發(fā)言
查看更多評論
添加紅包
祝福語
請?zhí)顚懠t包祝福語或標題
紅包數(shù)量
個
紅包個數(shù)最小為10個
紅包總金額
元
紅包金額最低5元
余額支付
當前余額3.43元
前往充值 >
需支付:10.00元
取消
確定
下一步
知道了
成就一億技術人!
領取后你會自動成為博主和紅包主的粉絲
規(guī)則
hope_wisdom 發(fā)出的紅包
實付元
使用余額支付
點擊重新獲取
掃碼支付
錢包余額
0
抵扣說明:
1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。 2.余額無法直接購買下載,可以購買VIP、付費專欄及課程。
余額充值
JVM桌面框架的狀態(tài):SWT - 知乎切換模式寫文章登錄/注冊JVM桌面框架的狀態(tài):SWT君慕賢什么是SWT?SWT源自Eclipse項目,最初是IDE。開發(fā)人員為Eclipse建立了一個專用框架,用于在其中構建其圖形組件。Swing和SWT的設計差異很大。Swing從頭開始用Java實現(xiàn)小部件的繪制。SWT是依賴本地圖形對象的精簡包裝API。這有兩個主要好處:窗口小部件看起來是平臺固有的。渲染速度更快。SWT APISWT背后有一個指導原則:因為它依賴于本機圖形對象,所以每個組件都需要一個“父”對象作為其第一個參數(shù)。父對象是繪制子對象的對象。每個SWT組件的構造函數(shù)都將父級作為其第一個參數(shù)。SWT的樂趣SWT具有一些特性,其中大多數(shù)與基于系統(tǒng)庫的設計有關。原生依賴性SWT為每個主流操作系統(tǒng)(例如Windows,Mac OSX等)提供JAR。例如,這是筆記本電腦的Maven依賴項:
JAR坐標取決于平臺。它們包含JNI綁定形式的必需本機庫。僅在運行時需要JAR。SWT事件控制回路Swing提供了一個開箱即用的事件控制循環(huán)。SWT并非如此。我們需要將以下代碼復制粘貼到我們的每個應用程序中:SWT與操作系統(tǒng)之間的橋梁。創(chuàng)建頂層窗口。顯示它。盡管該系統(tǒng)的窗口本機資源尚未釋放。處理排隊的事件。如果什么也不需要做…什么都不做。釋放所有系統(tǒng)本機資源。無參構造函數(shù)窗口和對話框Shell在SWT中均表示為實例。頂級窗口不需要父級,因此Shell提供了一個無參數(shù)的構造函數(shù)。但是由于Shell是圖形控件,因此其所有父類也都提供了這樣的構造函數(shù)。這些構造函數(shù)的主體為空,調用它們不會執(zhí)行任何操作。組件創(chuàng)建順序在父對象上實例化組件的順序就是將它們添加到該父對象的布局中的順序。如果需要將它們分離,則需要發(fā)揮創(chuàng)造力, 例如。將對構造函數(shù)的調用包裝在lambda中。這是一個SWT示例,按此順序顯示標簽,文本字段和按鈕:造型如上一片段所示,小部件的樣式在其實例化期間發(fā)生。這些樣式SWT以樣式位的形式編碼在類中:LEAD = 1 << 14LEFT = LEADSINGLE = 1 << 2BORDER = 1 << 11PUSH = 1 << 3等等循環(huán)依賴請注意,的構造函數(shù)Control采用一個Composite實例,該實例本身是的子類Control。這種循環(huán)依賴關系綁定到同一包中。顯示表格數(shù)據(jù)SWT僅關注小部件及其渲染。與Swing和JavaFX相對,它沒有數(shù)據(jù)模型的概念:您需要自己管理數(shù)據(jù)。對于0-D數(shù)據(jù)(例如文本字段),甚至對于1D數(shù)據(jù)(例如列表框),它都可以管理。對于二維數(shù)據(jù)(即表),這很麻煩。因此,大多數(shù)圖形框架在組件與其管理的數(shù)據(jù)之間引入了模型抽象。例如,Swing具有JTable和TableModel。Eclipse提供了JFace庫,該庫通過SWT API等提供了數(shù)據(jù)模型抽象。例如,對于表,JFace具有TableViewer類。每個JFace查看器類的核心都包含一個SWT控件。包裝在很深的層次上適用:SWTTableColumn被JFace的包裝TableColumnViewer。本Viewer類具有豐富的類型層次來處理不同尺寸的數(shù)據(jù)。IStructuredContentProvider提供多行數(shù)據(jù),例如表中的數(shù)據(jù)。由于API是在泛型之前設計的,因此需要在StructuredViewer級別上進行運行時檢查以驗證set的類型IContentProvider。此外,StructuredViewer還提供了排序,過濾和“裝飾”功能。注意,有一個庫可以管理模型和控件之間的雙向數(shù)據(jù)綁定:JFace Data Binding。我找不到兼容的版本。結論不可否認SWT的成功。從使用它開發(fā)的軟件項目數(shù)量中可以看出這一點。SWT提供了完全本地的外觀GUI。從好的方面來說,這意味著應用程序具有本機行為。另一方面,與此功能相關的成本:對平臺庫的依賴,這違反了“一次編譯,隨處運行”的承諾。由于缺少泛型,因此運行時檢查而不是編譯時檢查。由于上述兩個原因,API有時會顯得笨拙。原文作者:didiao java原文鏈接:https://blog.csdn.net/weixin_46699878/article/details/113420613文章來源:CSDN侵刪發(fā)布于 2021-01-30 14:08JavaswtJava 程序員?贊同 1??添加評論?分享?喜歡?收藏?申請
Java中AWT、Swing與SWT三大GUI技術的原理與效率差異_swt和awt-CSDN博客
Java中AWT、Swing與SWT三大GUI技術的原理與效率差異
最新推薦文章于?2024-01-26 12:41:56?發(fā)布
光_影
最新推薦文章于?2024-01-26 12:41:56?發(fā)布
閱讀量2.1w
收藏
26
點贊數(shù)
5
看了一下對Java GUI討論的帖子,所以寫了一篇文章來闡述一下各種GUI技術的優(yōu)劣。 Java世界中,目前最知名的三大GUI庫分別是: 1、AWT(Abstract Window Toolkit)抽象窗口工具包庫,包含于所有的Java SDK中 2、Swing高級圖形庫,包含于Java2 SDK中 3、來自IBM Eclipse開源項目的SWT(Standard Widget Toolkit)標準窗口部件庫,不包含于JDK中,需要從Eclipse單獨下載一、AWT的原理:小巧卻簡陋的GUI系統(tǒng) AWT出現(xiàn)于Java 1.x中,是Java初期所內置的一種面向窗口應用的庫。AWT使用的技術是對等設計模式(即Peer),其結構關系參見下圖。 從這幅類關系圖很容易看出AWT的技術實現(xiàn)和Peer設計模式。圖中,黃色的類是java.awt包中的類,淺灰色部分是Java虛擬機部分,而深灰色則是Windows平臺。 awt的重點是對等Peer設計模式。所謂Peer對等設計模式就是將awt控件直接對應到運行平臺上的一個類似或者等同控件上。比如圖中的Button類就是對應了深灰色的Windows的標準Button功能。 對等模式用于在兩個控件間之間建立一個相互作用的聯(lián)系,而充當紐帶的則是Java虛擬機和虛擬機-GDI的接口(以Windows為例子)。所以,我們可以看出,awt首先需要經過通用的Java技術來控制圖形、事件等,然后Java虛擬機再將請求傳送到具體的平臺圖形和控件接口去交互。 對等模式的效率并不很高,因為AWT通過了虛擬機和虛擬機-GDI這兩個層次來完成一個操作,經過的層次系統(tǒng)越多,速度和效率就越慢。而且Peer對等模式有一個致命的弱點:移植性非常差! 這就是Sun為什么要用Swing來誘惑我們離開AWT的主要原因。因為既然是對等模式,那么AWT就必須使用所有圖形操作系統(tǒng)的圖形接口功能的交集,因為 AWT的接口只有一套,所以,為了保證移植性,就只能使用所有系統(tǒng)都能夠支持的最少特性。因而我們經常可以聽見有人抱怨AWT的功能太少,圖形太難看等等,這是為了保證移植性而作出的犧牲。二、猛犸巨獸的誕生-Swing 從Java2 即Java 1.2版本開始,Sun開始在JDK中提供一套新的圖形界面接口系統(tǒng)-Swing。所有Java愛好者都投入了對Swing的研究和迷戀。隨著一大批使用Swing作為界面技術的IDE和程序出現(xiàn),很快大家都意識到Swing的問題所在。 一些人認為Swing是輕量級的GUI系統(tǒng),無論官方如何說,沒有一個Java程序員會認為Swing是輕量級的,相反,Swing是一個非常巨大的GUI庫,這一點已經是Java界的共識。 Swing的一些底層類是借用了AWT的Component、Container、Window等少數(shù)幾個基礎類。估計的原因是為了保持與AWT的兼容,方便大家將代碼移植到Swing上。 下面是Swing的類關系圖: 菊黃色類為Swing包的類。對比一下Swing的圖與AWT的圖,我們可以發(fā)現(xiàn),Swing圖中,awt體系中的深灰色Windows控件類已經被去掉了。因為Swing不再沿用Peer對等模式來實現(xiàn)GUI界面。 這是Swing的核心思想之一,Swing是完全基于Java自繪制圖形而實現(xiàn)的,因而Swing的界面看起來與Windows不再有任何類似,尤其是窗口控件的樣式(雖然我們也可以通過換膚來達到模擬Windows界面的效果)。所以上圖清楚的表明了Swing是一個高層的GUI系統(tǒng),而不像AWT那樣與運行平臺技術更加靠近的系統(tǒng)。我們仍然用Button與Panel來做了一個例子,圖中關系看出,Swing的類繼承關系比AWT要復雜的多,而且Swing類大多都經過了中間的轉接類-JComponent。而我們常用的JFrame則另辟蹊徑,從awt的window繼承了下來。 這種結構關系決定了Swing的龐大與復雜性。很多初學者都難以理解Swing的模式和結構。 Swing 中的控件都是利用Java圖形功能繪制出來的,而不是對應到平臺的一個具體控件實現(xiàn)。我們所用的所有Swing控件都是直接或者間接用Graphics繪制出來的,這種實現(xiàn)方式最大的好處是很靈活,我們想要什么樣的控件,就直接用Graphics繪制出來就是了。 Sun之所以用這種方式來實現(xiàn),是為了在不犧牲移植性的基礎上加入豐富的界面交互功能。但是缺點也很明顯:Swing的速度和效率是所有GUI系統(tǒng)中最慢的。 JBuilder和NetBeans的IDE都是純正的Swing界面,啟動一下,然后操作一下,比如拖動窗口之類的試試,你就會明白我在說什么。 之所以導致這個結果,其原因是: 1、Swing的類層次太深,一個JFrame經過了4層的類繼承關系,如果再加上虛擬機的圖形功能內部實現(xiàn),就有6層的轉接關系,每一次的繼承和轉接都會消耗系統(tǒng)資源和速度損失。(過多的繼承會降低系統(tǒng)的速度,因為操作子類往往是使用基類指向來完成通用操作的) 2、Swing是基于自繪制圖形技術的,而Java為了保持可移植性,所以無法使用硬件加速和平臺特性來加快圖形操作的速度。因而Java的圖形技術都是“高層”的圖形技術,就好像我們用Windows GDI去做動畫一樣,當然速度會很慢。三、新的曙光-SWT 應該說,稍有閱歷的Java的程序員都知道很多人對Swing效率低下的抱怨。IBM贊助的Eclipse開放源碼項目,搞了一個另類的GUI系統(tǒng)-SWT。 SWT是一個非常獨特的技術,其核心思想和Windows上的DirectX如出一轍,也許SWT的程序員真的是借鑒了DirectX成功的秘訣。 下面是SWT技術原理的類關系圖:
?
我們會看見,SWT的類關系非常直接而且易懂,有點像Delphi的API接口思想(此是我隨便亂彈,與Delphi沒有什么關系)。最重要的一點就是SWT的核心思想:SWT的功能實現(xiàn)是完全構筑在以JNI為基礎的,對運行平臺的直接調用封裝上的。 我們可以從圖中看見,SWT的功能沒有通過任何Java虛擬機來操作,而是直接調用Windows GDI和Shell功能,這一點是通過JNI方法調用完成。 一定會有人說SWT破壞了java的移植思想,不過Eclipse的大范圍流行,正好證明了SWT非但沒有阻礙移植性,反而提高了各種操作系統(tǒng)對于Java GUI的利用和期待。這不能不說Eclipse項目組是充滿智慧的。 在Eclipse下,plugin目錄的swt目錄下,你可以發(fā)現(xiàn)一個dll動態(tài)庫文件,這個dll就是JNI方法調用庫。 基于SWT技術實現(xiàn)的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里發(fā)現(xiàn)了一個叫Tray的類,猜猜看它是干什么的?Tray可以讓你在java程序中顯示一個任務欄圖標,極度暈眩! 我想,不用再繼續(xù)介紹SWT了,你一定也很興奮,從SWT開始,JavaGUI并不一定意味著緩慢、低效率、弱小的功能,Windows程序的眩目與速度,Java程序也可以擁有,這就是SWT的價值。 更加重要的是,SWT打破了長久以來人們對于移植性的誤區(qū),似乎移植性就只能使用少到可憐的功能,我們也可以用JNI來擁抱Java的世界,我想,將來不僅僅是界面會借助JNI的方式,也許我們的很多Java思想都會悄悄的發(fā)生改變,也許有一天我們的Java代碼可以運行的像VB一樣快,這種思想意識的變革就是SWT的價值。
至于Swing的結局,我不知道,但是我知道我更加喜歡輕量級的而且快速的SWT,給你的程序多一個選擇吧。
優(yōu)惠劵
光_影
關注
關注
5
點贊
踩
26
收藏
覺得還不錯?
一鍵收藏
知道了
4
評論
Java中AWT、Swing與SWT三大GUI技術的原理與效率差異
看了一下對Java GUI討論的帖子,所以寫了一篇文章來闡述一下各種GUI技術的優(yōu)劣。Java世界中,目前最知名的三大GUI庫分別是:1、AWT(Abstract Window Toolkit)抽象窗口工具包庫,包含于所有的Java SDK中2、Swing高級圖形庫,包含于Java2 SDK中3、來自IBM Eclipse開源項目的SWT(Standard Widget Toolkit)標...
復制鏈接
掃一掃
SWT Swing與AWT區(qū)別
02-13
本文對 Eclipse 的 Standard Windows Toolkit with JFace、Java 的 Swing 和 Abstract Windows Toolkit GUI 工具包進行了比較。通過此處提供的比較,您可以確定在自己的新應用程序中應該使用哪個 GUI 工具包。
在大部分情況中,決定都是在 Swing 與結合了 JFace 的 SWT 之間進行的。通常來說,每個工具包都非常完整且功能強大,足以構建功能完善的 GUI,但是 Swing 通常要比單獨使用 SWT(不使用 JFace 時)更好。Swing 具有內嵌于 Java 技術的優(yōu)點,是完全可移植的,無可爭議地是一種更好的架構。Swing 也具有高級圖形應用程序所需要的優(yōu)點。SWT 具有可以作為本地應用程序實現(xiàn)的優(yōu)點,這可以提高性能,并利用基于 SWT 的 GUI 來實現(xiàn)本地兼容性。
如果您只為一種平臺來開發(fā)系統(tǒng),那么 SWT 就具有主機兼容性方面的優(yōu)點,包括與主機特性的集成,例如在 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?條評論
您還未登錄,請先
登錄
后發(fā)表或查看評論
前端同時傳遞文件數(shù)據(jù)+非文件數(shù)據(jù),前后端解決方案
最新發(fā)布
qq_62835094的博客
01-26
397
之前錄制視頻《文件上傳組件》的時候有位觀眾提了個問題,如果我沒有理解錯的話,應該就是前后同時傳遞文件數(shù)據(jù)非文件數(shù)據(jù),前后端數(shù)據(jù)該如何接收,這里我給出我自己的解決方案tip:下文在編寫前端代碼的時候,用到了這篇文章寫的組件。
Java GUI SWT/Swing/AWT的介紹及比較
11-07
本文通過對 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包進行比較,可以幫助新應用程序的開發(fā)人員從中選擇適當?shù)墓ぞ摺?
您可以通過本文了解對每個工具包的基本特性的介紹,以及使用每個工具包的優(yōu)缺點。
AWT 、Swing、SWT的區(qū)別與比較(網摘)
zhangmingji的專欄
10-22
405
??????AWT
????? AWT 是Abstract Window ToolKit (抽象窗口工具包)的縮寫,這個工具包提供了一套與本地圖形界面進行交互的接口。AWT 中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對應的關系,我們把它稱為peers。 也就是說,當我們利用 AWT 來構件圖形用戶界面的時候,我們實際上是在利用操作系統(tǒng)所提供的圖形庫。由于不同操作系統(tǒng)的圖形庫所提供的功能是...
【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提供的一套用于創(chuàng)建GUI界面的類庫,它為Java應用程序提供了基本的圖像組件
優(yōu)點:使用AWT創(chuàng)建的圖像界面應用和所在的運行平臺有相同的界面風格(跨平臺)
缺點: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 工具包一直是一個倍受爭議的話題。同樣的爭論也發(fā)生在其他編程語言如Smalltalk。實際上每個平臺無關的語言都存在著這樣的爭論。Java作為當前最受廣泛使用的編程語言而尤為突出。
...
java awt原理_Java中AWT、Swing與SWT三大GUI技術的原理與效率差別
weixin_39648824的博客
02-28
488
看了一下對Java GUI討論的帖子,因此寫了一篇文章來闡述一下各類GUI技術的優(yōu)劣。Java世界中,目前最知名的三大GUI庫分別是:一、AWT(Abstract Window Toolkit)抽象窗口工具包庫,包含于全部的Java SDK中二、Swing高級圖形庫,包含于Java2 SDK中三、來自IBM Eclipse開源項目的SWT(Standard Widget Toolkit)標準窗口部...
淺析Java中Swing與SWT和AWT的區(qū)別及實現(xiàn)_王亞南
03-11
Swing 和 SWT,AWT 技術都是在 Java 圖形化界面設計中常用的開發(fā)包,在進行 Java GUI 編程時,大家或許經 常徘徊在 SWT,Swing,AWT 之間選擇,哪一個更合適自己? 本文簡單介紹了三者中各自的功能特點,以及之間的區(qū)別...
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 工具包進行比較,可以幫助新應用程序的開發(fā)人員從中選擇適當?shù)墓ぞ?。您可以通過本文了解對每個工具包的基本特性的介紹,以及使用每個工具包的優(yōu)缺點。簡介developerWorks 上另外一些作者已經展示了如何在 Swing 和 SW
Java GUI編程中AWT/swing/SWT的優(yōu)缺點
SayGoodbyeToYou的專欄
03-24
4303
http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html
AWT
AWT是Abstract Window Toolkit(抽象窗口工具包)的縮寫,是SUN專門針對Java GUI編程提供的最早的也是最初的開發(fā)工具包,用來建立和設置Java圖形用戶界面,這個工具包提供了一套與本地圖形界面交互的接口。AWT 中的圖形函數(shù)與操
java swt awt_AWT/SWT/Swing大比較之一:模型設計與實現(xiàn)
weixin_39650784的博客
03-06
121
前幾天由于網絡問題,訪問不了新浪網,現(xiàn)在準備重新開始博客寫作。最近打算寫的內容主要包括Java性能、Swing和SWT的比較、Swing方面的一些技術。=====================================================總的來說Swing/AWT和SWT在事件處理機制上是類似的,窗口組件的樹狀結構也是類似的。圖形用戶界面系統(tǒng)在事件處理設計上有兩大類,一類是單線...
swt 與 awt/swing 的區(qū)別與綜合比較
web前后端開發(fā)
06-25
468
本文通過對 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)GUI 工具包進行比較,可以幫助新應用程序的開發(fā)人員從中選擇適當?shù)墓ぞ摺?
[color=red][size=xx-large]綜合網上各家所述 集結此文:[/size][/color]
是Swing是純Java實現(xiàn),而SWT和AWT是Java和JNI的混合...
java圖像用戶界面swing、awt、swt
henry的博客
10-06
1884
1、演進
(1)Sun已經提供了一個跨平臺GUI開發(fā)工具包AWT抽象窗口工具箱(Abstract Window Toolkit)
(2)Sun又創(chuàng)建了一個新的gui框架swing,解決了awt存在的Icd(本地化)問題(swing是awt的繼承發(fā)展,但Swing不是AWT的子類)
(3)IBM認為swing比較消耗內存,創(chuàng)建了一個新的GUI庫,這就是SWT
(4)IBM為了方便
Eclipse下搭建SWT與Swing圖形界面開發(fā)環(huán)境
熱門推薦
深之JohnChen的專欄
07-29
1萬+
Eclipse SWT Swing 圖形界面開發(fā)
java GUI框架
08-12
Java提供了幾種常用的GUI(圖形用戶界面)框架,包括:
1. Swing:Swing是Java的標準GUI庫,提供了豐富的組件(如按鈕、文本框、標簽等)和布局管理器(如FlowLayout、BorderLayout等),用于構建桌面應用程序的用戶界面。Swing是基于AWT(Abstract Window Toolkit)開發(fā)的,并提供了更好的外觀和跨平臺性能。
2. JavaFX:JavaFX是一個現(xiàn)代化的GUI框架,提供了豐富的UI控件、布局容器、多媒體支持和動畫效果等功能。它使用FXML(一種基于XML的語言)來定義界面,也可以通過Java代碼來創(chuàng)建和操作界面。JavaFX在Java 8之后成為Java的一部分,取代了Swing成為推薦的GUI開發(fā)框架。
3. SWT(Standard Widget Toolkit):SWT是Eclipse基金會開發(fā)的GUI庫,它與操作系統(tǒng)本地窗口系統(tǒng)集成更緊密,提供更原生的外觀和性能。SWT使用Java代碼編寫,但底層調用了操作系統(tǒng)的本地API。
這些GUI框架都有各自的特點和適用場景。Swing適用于構建跨平臺的桌面應用程序,JavaFX提供了更現(xiàn)代化的界面和豐富的功能,而SWT則更注重與底層操作系統(tǒng)的集成。選擇合適的GUI框架取決于你的需求和偏好。同時,一些第三方庫和框架也可以用于Java GUI開發(fā),如Java AWT、Apache Pivot等。
“相關推薦”對你有幫助么?
非常沒幫助
沒幫助
一般
有幫助
非常有幫助
提交
光_影
CSDN認證博客專家
CSDN認證企業(yè)博客
碼齡7年
暫無認證
0
原創(chuàng)
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現(xiàn)在也挺尷尬的其實,jfx的運行時包還得另外下,oracle是準備放棄Java gui這一塊了,讓Java專注于服務端
【SpringBoot】核心依賴和自動配置
·Toto_:
請問引入部分的代碼要在哪里寫???怎么引入
您愿意向朋友推薦“博客詳情頁”嗎?
強烈不推薦
不推薦
一般般
推薦
強烈推薦
提交
最新文章
JAVA序列號的serialVersionUID
JS對象—對象總結(創(chuàng)建、屬性、方法)
js數(shù)組方法大全
2020年11篇
2019年30篇
2018年37篇
目錄
目錄
最新文章
JAVA序列號的serialVersionUID
JS對象—對象總結(創(chuàng)建、屬性、方法)
js數(shù)組方法大全
2020年11篇
2019年30篇
2018年37篇
目錄
評論?4
被折疊的??條評論
為什么被折疊?
到【灌水樂園】發(fā)言
查看更多評論
添加紅包
祝福語
請?zhí)顚懠t包祝福語或標題
紅包數(shù)量
個
紅包個數(shù)最小為10個
紅包總金額
元
紅包金額最低5元
余額支付
當前余額3.43元
前往充值 >
需支付:10.00元
取消
確定
下一步
知道了
成就一億技術人!
領取后你會自動成為博主和紅包主的粉絲
規(guī)則
hope_wisdom 發(fā)出的紅包
實付元
使用余額支付
點擊重新獲取
掃碼支付
錢包余額
0
抵扣說明:
1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。 2.余額無法直接購買下載,可以購買VIP、付費專欄及課程。
余額充值
Java SWT 教程 · ZetCode 中文系列教程 · 看云
1分鐘部署網站AI智能客服,大模型訓練自有數(shù)據(jù),簡單好用,有效降低客服成本
廣告
# 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 開發(fā),現(xiàn)已成為 Eclipse Foundation 的一部分。 它是 Swing 和 JavaFX 的替代方法。 SWT 使用 Windows API 或 GTK+ 之類的本地 GUI API 通過 Java 本機接口(JNI)創(chuàng)建其小部件。
[Tweet](https://twitter.com/share)
## 相關教程和電子書
有[高級 Java Swing 電子書](/ebooks/advancedjavaswing/), [Java Swing 教程](/tutorials/javaswingtutorial/), [JavaFX 教程](/gui/javafx/)和 [Java 教程](/lang/java/)。
ZetCode 數(shù)據(jù)庫教程
MySQL 教程
MySQL 簡介
MySQL 安裝
MySQL 的第一步
MySQL 快速教程
MySQL 存儲引擎
MySQL 數(shù)據(jù)類型
在 MySQL 中創(chuàng)建,更改和刪除表
MySQL 表達式
在 MySQL 中插入,更新和刪除數(shù)據(jù)
MySQL 中的SELECT語句
MySQL 子查詢
MySQL 約束
在 MySQL 中導出和導入數(shù)據(jù)
在 MySQL 中連接表
MySQL 函數(shù)
MySQL 中的視圖
MySQL 中的事務
MySQL 存儲過程
MySQL Python 教程
MySQL Perl 教程
MySQL & Perl DBI
使用 Perl 連接到 MySQL 數(shù)據(jù)庫
MySQL 中的 Perl 錯誤處理
使用 Perl 進行 MySQL 查詢
在 MySQL 中使用 Perl 綁定參數(shù)&列
在 MySQL 中使用 Perl 處理圖像
使用 Perl 獲取 MySQL 元數(shù)據(jù)
Perl 的 MySQL 事務
MySQL C API 編程教程
MySQL Visual Basic 教程
MySQL PHP 教程
MySQL Java 教程
MySQL Ruby 教程
MySQL C# 教程
SQLite 教程
SQLite 簡介
sqlite3 命令行工具
在 SQLite 中創(chuàng)建,刪除和更改表
SQLite 表達式
SQLite 插入,更新,刪除數(shù)據(jù)
SQLite SELECT語句
SQLite 約束
SQLite 連接表
SQLite 函數(shù)
SQLite 視圖,觸發(fā)器,事務
SQLite C 教程
SQLite Python 教程
SQLite Perl 教程
Perl DBI
使用 Perl 連接到 SQLite 數(shù)據(jù)庫
SQLite Perl 錯誤處理
使用 Perl 的 SQLite 查詢
使用 Perl 綁定 SQLite 參數(shù)&列
使用 Perl 在 SQLite 中處理圖像
使用 Perl 獲取 SQLite 元數(shù)據(jù)
使用 Perl 進行 SQLite 事務
SQLite Ruby 教程
連接到 SQLite 數(shù)據(jù)庫
在 SQLite 中使用 Ruby 進行 SQL 查詢
綁定參數(shù)
處理圖像
使用 Ruby 獲取 SQLite 元數(shù)據(jù)
Ruby 的 SQLite 事務
SQLite C# 教程
SQLite C# 簡介
使用SqliteDataReader檢索數(shù)據(jù)
ADO.NET 數(shù)據(jù)集
使用 C# 在 SQLite 中處理圖像
使用 C# 獲取 SQLite 元數(shù)據(jù)
使用 C# 的 SQLite 事務
SQLite Visual Basic 教程
SQLite Visual Basic 簡介
使用SqliteDataReader檢索數(shù)據(jù)
ADO.NET 的數(shù)據(jù)集
使用 Visual Basic 在 SQLite 中處理圖像
使用 Visual Basic 獲取 SQLite 元數(shù)據(jù)
使用 Visual Basic 的 SQLite 事務
PostgreSQL C 教程
PostgreSQL Ruby 教程
PostgreSQL PHP 教程
PostgreSQL PHP 編程簡介
在 PostgreSQL 中使用 PHP 檢索數(shù)據(jù)
在 PostgreSQL 中使用 PHP 處理圖像
用 PHP 獲取 PostgreSQL 元數(shù)據(jù)
在 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 數(shù)據(jù)類型
Visual Basic 中的字符串
運算符
控制流
Visual Basic 數(shù)組
Visual Basic 中的過程&函數(shù)
在 Visual Basic 中組織代碼
面向對象編程
Visual Basic 中的面向對象編程 II
Visual Basic 中的集合
輸入和輸出
C# 教程
C# 語言
C# 語法結構
C# 基礎
C# 數(shù)據(jù)類型
C# 中的字符串
C# 運算符
C# 中的流控制
C# 數(shù)組
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函數(shù)
Windows API 中的系統(tǒng)函數(shù)
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 圖形
創(chuàng)建自定義小部件
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 中的半字節(jié)
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 數(shù)據(jù)類型
Java 數(shù)據(jù)類型 II
Java 字符串
Java 數(shù)組
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 創(chuàng)建目錄
用 Java 創(chuàng)建文件
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 中的數(shù)據(jù)源
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 創(chuàng)建對象
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 數(shù)組
XMLHttpRequest教程
從 JavaScript 中的 URL 讀取 JSON
在 JavaScript 中循環(huán)遍歷 JSON 數(shù)組
jQuery 教程
Google 圖表教程
ZetCode Kotlin 教程
Kotlin Hello World 教程
Kotlin 變量
Kotlin 的運算符
Kotlin when表達式
Kotlin 數(shù)組
Kotlin 范圍
Kotlin Snake
Kotlin Swing 教程
Kotlin 字符串
Kotlin 列表
Kotlin 映射
Kotlin 集合
Kotlin 控制流程
Kotlin 寫入文件
Kotlin 讀取文件教程
Kotlin 正則表達式
ZetCode 其它教程
TCL 教程
Tcl
Tcl 語法結構
Tcl 中的基本命令
Tcl 中的表達式
Tcl 中的控制流
Tcl 中的字符串
Tcl 列表
Tcl 中的數(shù)組
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 數(shù)據(jù)類型
PHP 字符串
PHP 運算符
PHP 中的控制流
PHP 數(shù)組
PHP 數(shù)組函數(shù)
PHP 中的函數(shù)
PHP 正則表達式
PHP 中的面向對象編程
PHP 中的面向對象編程 II
PHP Carbon 教程
PHP Monolog 教程
PHP 配置教程
PHP Faker 教程
Twig 教程
Valitron 教程
Doctrine DBAL QueryBuilder 教程
PHP Respect 驗證教程
PHP Rakit 驗證教程
PHP PDO 教程
CakePHP 數(shù)據(jù)庫教程
PHP SQLite3 教程
PHP 文件系統(tǒng)函數(shù)
ZetCode Python 教程
Python 教程
Python 語言
交互式 Python
Python 語法結構
Python 數(shù)據(jù)類型
Python 字符串
Python 列表
Python 字典
Python 運算符
Python 關鍵字
Python 函數(shù)
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循環(huán)
Python 反轉
Python Lambda 函數(shù)
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 數(shù)據(jù)類型
Ruby 字符串
Ruby 表達式
Ruby 控制流
Ruby 數(shù)組
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 發(fā)送圖像教程
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 轉發(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
獨立的 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 發(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 自動控制器
Spring Boot FreeMarker 教程
Spring Boot Environment
Spring Boot Swing 集成教程
在 Spring Boot 中提供圖像文件
在 Spring Boot 中創(chuàng)建 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 中提供靜態(tài)內容
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 中發(fā)送郵件
Symfony 保留表單值
Symfony @Route注解教程
Symfony 創(chuàng)建路由
Symfony 控制臺命令教程
Symfony 上傳文件
Symfony 服務教程
Symfony 驗證教程
Symfony 翻譯教程
【插件開發(fā)】—— 7 SWT布局詳解,不能再詳細了! - xingoo - 博客園
會員
周邊
新聞
博問
AI培訓
云市場
所有博客
當前博客
我的博客
我的園子
賬號設置
簡潔模式 ...
退出登錄
注冊
登錄
xingoo
博客園
首頁
管理
【插件開發(fā)】—— 7 SWT布局詳解,不能再詳細了!
前文回顧:
1?插件學習篇
2?簡單的建立插件工程以及模型文件分析
3?利用擴展點,開發(fā)透視圖
4?SWT編程須知
5?SWT簡單控件的使用與布局搭配
6 SWT復雜空間與布局搭配
前面幾篇都提到了SWT的布局,布局系統(tǒng)也為規(guī)整的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
也叫做網格布局,它以規(guī)定網格的形式,指定每一行有多少列,元素會以每列幾個的方式進行排列,超出的部分擠到下一行。
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個子控件時,無論怎么改變窗口的大小,都不會改變排列的方式
當改變窗口大小時,不會發(fā)生變化
?
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); //第一個數(shù)字式百分比,也就是說 【寬度-5】
formData1.bottom = new FormAttachment(100,-5); //第一個數(shù)字式百分比,也就是說 【高度-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實現(xiàn),這個類需要兩個參數(shù),第一個是寬度(left或者right)或者高度(top或者bottom)的百分比,第二個參數(shù)是它相對加上的值。如果是負數(shù),就是減去的像素值。而且提供Control類型的參數(shù),也就是控件類型的參數(shù)。如果第一個參數(shù)指定一個控件,比如上面指定的那個bottom,那么他會自動獲取這個控件對應的高度,在進行加減。
這樣就保證了,某些控件的相對位置保持不變。
下面看一下效果:
拉伸后編程
?
什么是GridData呢?又該如何使用呢?
下面介紹一下GridData,這個也是一個重量級的參數(shù):
這個參數(shù)用于指定目標如何擺放,它描述了以表格為單位的布局。
它描述了空間本身的一個布局擺放的方式:
并且搭配之前的GridLayout布局,通過每行有幾列的方式,控制布局。先看一下都有什么參數(shù),以及參數(shù)描述的意義:
GridData griddata = new GridData(SWT.FILL,SWT.FILL,false,false,1,1);
一般都是上面這樣的參數(shù)格式:
第一個參數(shù):水平方向如何對齊
第二個參數(shù):豎直方向如何對齊
第三個參數(shù):是否占用水平的剩余空間
第四個參數(shù):是否占用豎直的剩余空間
第五個參數(shù):水平的列數(shù)
第六個參數(shù):豎直的行數(shù)
這樣一來,舉個例子就簡單了。
比如我們指定了一個表格是三行三列的,那么通過設定
第一個控件參數(shù)是(SWT.FILL,SWT.FILL,false,false,1,1);
第二個參數(shù)是(SWT,SWT,false,false,1,2);
第三個參數(shù)是(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);
顏色的第一參數(shù)是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); //第一個數(shù)字式百分比,也就是說 【寬度-5】
// formData1.bottom = new FormAttachment(100,-5); //第一個數(shù)字式百分比,也就是說 【高度-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
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被淘汰了。請教現(xiàn)在主流的JAVA gui開發(fā)學啥? - 知乎首頁知乎知學堂發(fā)現(xiàn)等你來答?切換模式登錄/注冊圖形用戶界面用戶界面設計Swing(Java)學過JAVA ,想學GUI。網友說swing awt被淘汰了。請教現(xiàn)在主流的JAVA gui開發(fā)學啥?關注者82被瀏覽286,476關注問題?寫回答?邀請回答?好問題 4?2 條評論?分享?19 個回答默認排序圓胖腫Java mayb late bt never absent? 關注稍微講一下java gui的歷史吧,java的gui的延伸其實還包括了安卓以及谷歌做的那些努力java最早的圖形控件就是awt,這個沒問題,但是awt做的事很少,基本上只是做一點簡單的包裝,所以如果你用的是awt的話,你可能會有比較多的工作要做,比如你想做動畫,用awt就會遇到屏幕閃爍的問題,所以你要去弄離屏表面,然后渲染完之后再flip過去,這個屬于極為低端的技術,awt這種低層次的封裝你就必需要用這種手段,開發(fā)很慢,其實你用c之類的,估計還能遇到這種問題這是第一個階段那后來就出現(xiàn)了一個發(fā)展,sun當時發(fā)展出了swing,但是這時候爆發(fā)了一個巨大的導致分裂的沖突,那就是ibm當時提出了使用swt,而sun提出了swing,swt代表著native widget的分支和走向,而swing則代表了emulate widget的分支和走向這兩者的區(qū)別呢,我這里簡單說一下,native widget的做法主張,更多地復用操作系統(tǒng)本身的控件和樣式,舉個例子,比如windows提供了圖形庫directx3d,macosx提供了圖形庫是metal,標準則是opengl和vulkan,那么swt一派就認為,我們應該提供一個統(tǒng)一的api,然后這個api在實現(xiàn)的時候,根據(jù)操作系統(tǒng)的差異,自動選擇不同的圖形庫予以使用,這樣這個api就是一層thin wrapper,這樣做的好處就是,你可以很快滴利用上操作系統(tǒng)提供的各種圖形庫,比如win上就用directx,mac上就用metal,etc.還有窗口的樣式等,但是壞處就是,你在不同的操作系統(tǒng)上,看到的樣式什么的,會有差異,比如swt在它網站上給出的幾個例子就很好滴說明這一點,不同操作系統(tǒng)上的展示有明顯的不同,如下圖:同樣的窗口在不同操作系統(tǒng)上的展示,很明顯可以看出很多差異來那swing則表示,這個太不跨平臺了,java應該編譯一次,然后到處運行,而且到處運行時候看起來應該是一樣的,徹底屏蔽操作系統(tǒng)帶來的差異,應該做一層thick wrapper,厚包裝,那這樣做的壞處有幾個,第一個就是不同操作系統(tǒng)的圖形庫不一樣,那強行一致的結果就是,只能用最弱雞的那個去搞了,當時標準是opengl,那就是opengl了,在win上也用不了directx,而且不是所有的操作系統(tǒng)都有這么高級的渲染工具的,所以swing還缺省提供了一個沒有硬件加速,純軟件渲染的界面,而且更要命的是,缺省是不開硬件加速的,所以這就導致swing做出來的時候,慢,因為沒開硬件加速,哪怕你的顯卡支持你能用硬件加速渲染,它還是缺省會用純軟件渲染,然后你要懂怎么開硬件加速才能實現(xiàn)你想要的效果,就像很多人可能至今都不知道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原始的形態(tài),看看就能感覺出來跟swing那個是不是很像了,看拖動條的紫色,幾乎一摸一樣unix gui早期機能所限,能做成這樣已經很好了,但是進入90年代之后,還在畫這種窗口,那就只能給人感覺原始了這是第二個階段,這個階段的過程就是swing和swt兩邊吵翻天,內訌,最后java在gui上大敗,鎩羽而歸,因為swing缺省的界面丑,慢,加上java早期本身也不怎么快,所以java在gui上幾乎是沒有咬下任何市場,早期在智能機上的j2me也被教主復出之后的iphone搞死了,swt最大的遺產就是eclipse了,swing最大的遺產就是idea還有netbeans了然后進入第三個階段,java后來發(fā)現(xiàn),swing這個搞法不是個辦法,沒人用,sun在臨死之前,總算頭腦清醒了一回,走回swt的道路,搞出了javafx,然后sun就掛了,一開始是找ibm收購,ibm嫌貴,不買,然后sun才去找oracle收購,javafx也跟swt一樣,根據(jù)os會自動選擇不同的圖形庫,比如win上用的就是directx3d,mac上用的就是metal(將來,參考project lanai)那這里還有一個分支,那就是教主復出之后,把iphone搞起來了,一搞起來就把可以裝在j2me的智能機給搞死了,然后有一家公司叫做Google,Google其實在sun作為java當家的時候,Google大量參與了java標準的制定,一個是Google一個是Apache,這倆貨幾乎常年都在jcp執(zhí)行委員會里呆著,所以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的設計,就是對操作系統(tǒng)底層的api做一層thin wrapper,但是安卓這邊,則更多地延續(xù)了swing的設計,到了flutter階段,實際上Google也還是自己做一層thick wrapper,flutter能保證不同操作系統(tǒng)上看到的界面是一樣的,如果你用的是material design的話,那在ios上也有漣漪效果,如果你用的是cuptertino的話,那你在安卓機器上也能看到金屬高光,但是這樣做成本就高,但是Google有錢也有人,而且一直有傳言說,Google招了太多人進去,無事可做,所以安排點工作給他們去做,哪怕這些工作只是重復造輪子,但是總比讓他們閑著好,所以就讓他們去造更快更好的輪子吧。flutter的設計就有一點這種味道在里面,什么都自己做,而且Google還做得相當不錯但是java沒那么多人,所以javafx就選擇了更加雞賊一點的道路,做一層thin wrapper,看上去不一樣就不一樣,跨平臺能用就行,javafx的組其實沒有那么多人,常見就那么幾個,johan,kevin,還有巴西人博格斯,其實沒幾個,flutter team的規(guī)模遠比javafx的開發(fā)規(guī)模要大得多那這個階段就是我們目前正在經歷的階段,如果你問java gui用啥,那就是javafx,這個是java所有項目的共識,javafx也比較容易擴展,13之后,你都可以用native的手段來渲染,可以借助nativefx或者是driftfx項目,然后用上比如qt之類的控件。這里說一下,javafx的社區(qū)可以看到很多說德語的人,來自德國,奧地利,瑞士等,很多相關項目都是德國人在做,德國人在這種工程領域上造詣可見一斑。如果你不糾結于java自身,那你也可以看看flutter這些,dart/flutter其實就是Google版的java/javafx,因為dart以及dartvm的作者之一lars bak本身就是缺省jvm hotspot的作者,它的很多設計,原理什么,都跟java社區(qū)的差不多,不能說完全一樣,但是你都能看到很多共同點,比如pub就是maven,skia就是prism,dart就是java,如果你會java的話,搞dart很快,分分鐘上手總結一下,第一階段awt,第二階段swing和swt,第三階段javafx和flutter如果你要學,學最后兩個編輯于 2019-09-02 23:30?贊同 342??14 條評論?分享?收藏?喜歡收起?子謙幻想學者? 關注Java的GUI我倒是用過不少。Swing的話是Java最傳統(tǒng)的GUI了,初始界面不怎么樣,但是有很多LookAndFeel,如果想偷懶可以直接使用其他人封裝的LookAndFeel改變界面,效果也是不錯的,Swing經過了這么久的發(fā)展,已經十分成熟,多數(shù)的坑都能夠找到解決辦法,淘汰到算不上,不過好像已經不更新了,因為Java在主推另一個GUI技術,JavaFX。JavaFX是Java目前官方推薦的GUI技術,XML進行布局,支持CSS,你學過HTML之類的WEB開發(fā)的話,應該知道CSS是個啥,他的界面極其靈活,通過FXML和CSS也能夠很快速的構建界面,但是系統(tǒng)的資源消耗會比較大,不過這應該不是什么問題吧。它還直接支持音頻視頻和動畫效果,好像還有3D功能,不過現(xiàn)在應該還不穩(wěn)定,JavaFX應該還是可以移植到Android的,ios不是很清楚。但是這個東西在windows之外的平臺上面會有坑點,要特別注意。SWT、JFace,這個是Eclipse用的技術,就是那個Java的開發(fā)工具Eclipse,還可以吧,但是需要一些平臺相關的東西,用起來稍微有點別扭,UI里面有些細節(jié)不能自己控制,但是界面的效率會高一些,畢竟是直接的JNI,很多是直接使用系統(tǒng)本身的控件,好像是支持CSS的,反正我沒用出來過。QtJambi,Qt的Java版,Qt本身是c++的類庫,這個是給java提供的語言綁定,不過qt的話只到了Qt4,也不知道有沒有人繼續(xù)更新維護。這個版本提供的設計器好像有點問題,不過可以自己編寫代碼進行設計,反正設計器的ui文件最終也會變成java代碼,如果你用過Qt的話可以試試。Gnome-Java,Linux系統(tǒng)可以試試,因為他不支持windows,我沒有用過他,只是知道而已。哦,對了,AWT,不知道你為啥會提到這個,現(xiàn)在你就當他不存在好了,基本是不會直接使用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?贊同 33??4 條評論?分享?收藏?喜歡
【SWT】常用代碼(二)-阿里云開發(fā)者社區(qū)
產品解決方案文檔與社區(qū)權益中心定價云市場合作伙伴支持與服務了解阿里云售前咨詢 95187-1 在線服務售后咨詢 4008013260 在線服務其他服務 我要建議 我要投訴更多聯(lián)系方式備案控制臺開發(fā)者社區(qū)首頁探索云世界探索云世界云上快速入門,熱門云上應用快速查找了解更多問產品動手實踐考認證TIANCHI大賽活動廣場活動廣場豐富的線上&線下活動,深入探索云世界任務中心做任務,得社區(qū)積分和周邊高校計劃讓每位學生受益于普惠算力訓練營資深技術專家手把手帶教話題暢聊無限,分享你的技術見解開發(fā)者評測最真實的開發(fā)者用云體驗乘風者計劃讓創(chuàng)作激發(fā)創(chuàng)新阿里云MVP遇見技術追夢人直播技術交流,直擊現(xiàn)場下載下載海量開發(fā)者使用工具、手冊,免費下載鏡像站極速、全面、穩(wěn)定、安全的開源鏡像技術資料開發(fā)手冊、白皮書、案例集等實戰(zhàn)精華插件為開發(fā)者定制的Chrome瀏覽器插件探索云世界新手上云云上應用構建云上數(shù)據(jù)管理云上探索人工智能云計算彈性計算無影存儲網絡倚天云原生容器serverless中間件微服務可觀測消息隊列數(shù)據(jù)庫關系型數(shù)據(jù)庫NoSQL數(shù)據(jù)庫數(shù)據(jù)倉庫數(shù)據(jù)管理工具PolarDB開源向量數(shù)據(jù)庫熱門Modelscope模型即服務彈性計算云原生數(shù)據(jù)庫物聯(lián)網云效DevOps龍蜥操作系統(tǒng)平頭哥釘釘開放平臺大數(shù)據(jù)大數(shù)據(jù)計算實時數(shù)倉Hologres實時計算FlinkE-MapReduceDataWorksElasticsearch機器學習平臺PAI智能搜索推薦人工智能機器學習平臺PAI視覺智能開放平臺智能語音交互自然語言處理多模態(tài)模型pythonsdk通用模型開發(fā)與運維云效DevOps釘釘宜搭支持服務鏡像站碼上公益
開發(fā)者社區(qū)
開發(fā)與運維
文章
正文
【SWT】常用代碼(二)
2023-08-16
89
版權
版權聲明:
本文內容由阿里云實名注冊用戶自發(fā)貢獻,版權歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權,亦不承擔相應法律責任。具體規(guī)則請查看《
阿里云開發(fā)者社區(qū)用戶服務協(xié)議》和
《阿里云開發(fā)者社區(qū)知識產權保護指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內容,填寫
侵權投訴表單進行舉報,一經查實,本社區(qū)將立刻刪除涉嫌侵權內容。
簡介:
【SWT】常用代碼(二)
零零年夏
目錄
熱門文章
最新文章
為什么選擇阿里云什么是云計算全球基礎設施技術領先穩(wěn)定可靠安全合規(guī)分析師報告產品和定價全部產品免費試用產品動態(tài)產品定價價格計算器云上成本管理解決方案技術解決方案文檔與社區(qū)文檔開發(fā)者社區(qū)天池大賽培訓與認證權益中心免費試用高校計劃企業(yè)扶持計劃推薦返現(xiàn)計劃支持與服務基礎服務企業(yè)增值服務遷云服務官網公告健康看板信任中心關注阿里云關注阿里云公眾號或下載阿里云APP,關注云資訊,隨時隨地運維管控云服務售前咨詢:95187-1售后服務:400-80-13260法律聲明及隱私權政策Cookies政策廉正舉報安全舉報聯(lián)系我們加入我們阿里巴巴集團淘寶網天貓全球速賣通阿里巴巴國際交易市場1688阿里媽媽飛豬阿里云計算AliOS萬網高德UC友盟優(yōu)酷釘釘支付寶達摩院淘寶海外阿里云盤餓了么? 2009-2024 Aliyun.com 版權所有 增值電信業(yè)務經營許可證: 浙B2-20080101 域名注冊服務機構許可: 浙D3-20210002 京D3-20220015浙公網安備 33010602009975號浙B2-20080101-4