新聞中心
一.拋磚引玉

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),巴中網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:巴中等地區(qū)。巴中做網(wǎng)站價(jià)格咨詢:028-86922220
本文指在利用一個(gè)小程序,Swing組件大全來引導(dǎo)大家學(xué)習(xí)Java這門語言,熟悉Java Swing的各個(gè)組件。并在學(xué)習(xí)過程中參考作者設(shè)計(jì)這一程序的方法和思想,最終形成自己的思維方式和學(xué)習(xí)方式。你能舉一返三是作者最開心的事情。小程序演示了Java Swing大部分組件。最后附上了全部代碼及詳細(xì)的注釋說明。希望本文能對大家學(xué)習(xí)Java有所幫助。
學(xué)習(xí)Java的方法和路徑越來越多。而在大量的書本前,在Java龐大的類庫前大大家都有點(diǎn)迷失方向的感覺,是學(xué) J2EE,J2ME還是。。。。。。然而所有的這些都或多或少的離不開J2SE。萬丈高樓平地起。J2SE是整個(gè)Java的基礎(chǔ),學(xué)好了這個(gè)對Java的各個(gè)方向都是很有利的。而學(xué)習(xí)J2SE的最初點(diǎn)就在界面設(shè)計(jì),因?yàn)榻缑婢幊淌悄銇砀杏X最直接的手段,是提高大家編程興趣的很好開始,因?yàn)槟銓懲瓿绦蚓幾g后可馬上看到自己的成果。而不像后臺編程做完了都感受不到效果。而好的界面也是你測試你其他程序的基礎(chǔ)。
界面設(shè)計(jì)!不就是拖拉操作嗎?如果是VB,VC等可視化的編程,的確只是一些拖拉操作,由于Java語言的設(shè)計(jì)中所有的東西都是程序代碼,在Java中如果想要設(shè)計(jì)一個(gè)好的界面,可不是簡單的拖拉操作能完成的。即使使用了如JBuilder這么強(qiáng)大的可視化工具,你也得親自動手寫一些界面設(shè)計(jì)代碼才能很好的完成你的任務(wù)。如果你能在此基礎(chǔ)上理解Java界面設(shè)計(jì)的思想,對你學(xué)習(xí)這門語言將有莫大的幫助。
好了,說了這么長的廢話,讓我們來看看Java的界面設(shè)計(jì)的基礎(chǔ)。
Java界面設(shè)計(jì)主要涉及Awt,Swing兩大類庫,Swing是Awt的擴(kuò)展和功能加強(qiáng)。下面我們就以Swing為基礎(chǔ)來說說整個(gè)Java的界面設(shè)計(jì)。
二.感受效果
在開始之前,讓我們看看這篇文章要達(dá)到的效果,有了目標(biāo)和成果才有學(xué)習(xí)的興趣,起碼我是這樣認(rèn)為和學(xué)習(xí)的。如下圖所示,這就是我們設(shè)計(jì)的界面,它包括了Swing中大部分常用的組件。有些功能界面上反映不出來,大家可嘗試編譯源代碼點(diǎn)南擊各個(gè)部分,看看它們的響應(yīng)事件。
三.設(shè)計(jì)思想和方法
不知道大家(一般是初學(xué)者)在看編程書籍的時(shí)候有這種體會沒有:在看的過程中,好像大部理解了,并且效率還不錯(cuò),可是回頭來要自己寫個(gè)和書上一樣的程序出來,可能不少人只有重新拿書照打的了;有些人在照書上打過了一遍,也似乎理解了??苫仡^來真正到用的時(shí)候,好像又不記得了。作者本人在初學(xué)編程時(shí)就經(jīng)歷過很多次這種情況。
追其原因,無外乎沒有融會貫通所學(xué)的知識,編程最講求動手二字,動手的真正意義在于寫自己所想所領(lǐng)會的程序而不是copy現(xiàn)成的程序。因?yàn)橹挥薪?jīng)過自己思考,設(shè)計(jì)才能把書上的知識真正溶入自己的大腦。下面我們以Swing組件大全來說說這個(gè)方法和思想。
在看完書上介紹的Swing組件這章后,我心中對Swing大概有了個(gè)了解,只差動手了。而本人又不想照書上的例子一個(gè)個(gè)來試。于是就想到了做個(gè)程序把書上介紹的所有組件放到一個(gè)界面來,并嘗試用到書上介紹的所有方法。
砍柴不誤磨刀功!在開始這前,我手畫了一份設(shè)計(jì)圖紙,如上面界面所示(當(dāng)然沒那么漂亮了)。并用簡單的軟件工程思想對結(jié)構(gòu)進(jìn)行了大概的劃分。這里把整個(gè)界面劃分為一個(gè)主模塊和五大子模塊。所有的子模塊都是繼承至相應(yīng)的容器,主模塊SwingTest 既是管理模塊也是主界面,繼承JFrame主框架,管理本身的屬性及JFrame上的其他子模塊。MenuTest子模塊繼承至JmenuBar負(fù)責(zé)菜單的顯示和事件處理。其他子模塊繼承至JPanel,管理放置在其上的組件的布局和顯示。從子模塊的名字大家也可看到他們的位置和功能。如下圖所示:
在編寫程序前想好結(jié)構(gòu)和思路是個(gè)很好的習(xí)慣,它將會幫你大大減少工作量,提高程序的可讀性和效率。
四.容器,布局管理器,嵌板
Swing中所有的組件都是放到容器中,主要的容器包括:JFrame,JPanel,JWindow,JDialog,JPanle。JFrame是java的主框架,幾乎所有的Java應(yīng)用程序界面都是在主框架之中設(shè)計(jì)的。有些容器并非一層,而由幾層嵌板組成,本文將會用到其中在個(gè):拆分嵌板 (JSplitPane),內(nèi)容嵌板, 頁簽式嵌板(TabbedPane)
拆分嵌板:按指定的方向和方式拆分其內(nèi)的兩個(gè)子組件,記住一個(gè)拆分嵌板只能拆分兩個(gè)子組件,如果想要拆分三個(gè),大家自己先想一想辦法。本節(jié)最后給出了答案。
內(nèi)容嵌板: JFrame,Jwindow,Jdialog就是上面提到的有多層嵌板的容器,如果要在這些容器上面放置組件,必須放置在他們的內(nèi)容嵌板(pane)上。我們通過函數(shù)getContentPane()可得到當(dāng)前容器的內(nèi)容嵌板。
頁簽式嵌板:這個(gè)嵌板如同卡片,在上面提供文件夾式的頁簽,當(dāng)前只顯示一頁,如要進(jìn)入下一頁,只要點(diǎn)擊上面的頁簽。
有些如JPanel是可以直接放置組件的容器。所以不需要使用嵌板。
如果要按自己的想法排列放在容器上的組件,我們必須使用到布局管理器(Layout)來進(jìn)行管理。Java系統(tǒng)默認(rèn)的布局管理器為邊界管理器 (BorderLayout)。它把版面分為五大塊,中央?yún)^(qū)域(Center),頂端(North),底部(South),左側(cè)(West),右側(cè) (East),細(xì)心的你可能會發(fā)現(xiàn)我們的主界面就是用的這個(gè)布局架構(gòu)。其他的幾個(gè)布局管理器有:
◆流布局(FlowLayout):把其內(nèi)的組件按從左到右,從上到下的流方式排列。
◆網(wǎng)格布局(GridLayout):把組件放置到布局中的設(shè)置的每個(gè)網(wǎng)格中
◆無序網(wǎng)格布局(GridBagLayout):類似于網(wǎng)格布局,但功能更強(qiáng)大也更復(fù)雜。能處理所有的布局。
如果你仔細(xì)觀察會發(fā)現(xiàn)我們的主界面最右邊會發(fā)現(xiàn)使用了網(wǎng)格布局。
下面來看看我們的主模塊的構(gòu)造函數(shù)代碼,來感受一下上面的結(jié)構(gòu)設(shè)計(jì)。
- public SwingTest()
- {
- // 初始化所有子模塊
- MenuTest menuTest = new MenuTest();
- LeftPanel leftPanel = new LeftPanel();
- RightPanel rightPanel = new RightPanel();
- BottomPanel bottomPanel = new BottomPanel();
- CenterPanel centerPanel = new CenterPanel();
- // 設(shè)置主框架的布局
- Container c = this.getContentPane();
- // c.setLayout(new BorderLayout())
- this.setJMenuBar(menuTest);
- c.add(leftPanel,BorderLayout.WEST);
- c.add(rightPanel,BorderLayout.EAST);
- c.add(centerPanel,BorderLayout.CENTER);
- c.add(bottomPanel,BorderLayout.SOUTH);
- setSize(700,500);
- setTitle("Swing 組件大全簡體版");
- // 隱藏frame的標(biāo)題欄,此功暫時(shí)關(guān)閉,以方便使用window事件
- // setUndecorated(true);
- setLocation(200,150);
- show();
- }
五.事件模型
在Swing 中每個(gè)組件都可觸發(fā)事件,一旦觸發(fā)事件會被一個(gè)或多個(gè)Listener(監(jiān)聽器)接收。不同類型的事件分別由個(gè)別的class表示。事件發(fā)生點(diǎn)可以和處理事件的代碼分開。
要想處理事件,只要產(chǎn)生Listener對象,并調(diào)用組件的addXXXListener()方法注冊事件。我們大部分是通過繼承事件接口來處理事件的。但是繼承Java接口我們必須實(shí)現(xiàn)出接口中的所有方法。有些接口包含了大量的函數(shù),如果要一個(gè)個(gè)實(shí)現(xiàn)是件很麻煩的事件上,Java中定義了相應(yīng)接口的 Adapter接配器類來解決這種情況。接配器類已經(jīng)幫我們實(shí)現(xiàn)了接口的所有方法,而我們只要繼承接配器就可在代碼內(nèi)做我們想做的事情。也即只要實(shí)現(xiàn)或覆寫我們想要實(shí)現(xiàn)的方法。
下面我們還是以主模塊為例,來處理關(guān)閉窗口事件。
- // 利用無名內(nèi)隱類,增加窗口事件
- this.addWindowListener(new WindowAdapter()
- {
- public void WindowClosing(WindowEvent e)
- {
- // 釋放資源,退出程序
- dispose();
- System.exit(0);
- }
- }
六.總結(jié)
好了,我們來回顧一個(gè)我們的上面的內(nèi)容:設(shè)計(jì)的思路,容器,嵌板,布局管理器, Swing組件大全的事件。
大家明白了為什么做項(xiàng)目能快速提高自己水平了吧。其實(shí)上面的方法原理和做項(xiàng)目差不多,任何事只要經(jīng)過自己的大腦思考,親手操作,想忘記并不是那么容易的了。相信看了本文和代碼再輔以相關(guān)的書籍介紹,大家對Swing處理會有一定的感性理解了。
開始動手吧。發(fā)揮你的天才思維,自己設(shè)計(jì)一個(gè)更好的Swing組件大全吧。當(dāng)然你也可在本程序的基礎(chǔ)上完善其中更復(fù)雜的功能。比如:把樹形列表內(nèi)容用window文件資源器代替,把表格的處理和數(shù)據(jù)庫相連接或和相關(guān)數(shù)據(jù)連接,讓文本區(qū)可顯示圖片。。。。。哦,天啊。說不定一個(gè)好的產(chǎn)品也會因此誕生。
再次強(qiáng)調(diào)開始之前請先設(shè)計(jì)你的界面,畫出你的程序結(jié)構(gòu)圖。即使再小的程序也請你大概勾一個(gè)它的輪廓。
【編輯推薦】
- 概述Swing大多數(shù)控件
- GUI程序與Swing中的線程
- 淺析Swing.SWT和AWT的區(qū)別
- AWT和Swing的區(qū)別
- 淺談Swing中提供了JOptionPane
網(wǎng)站題目:Swing組件大全隨著Java風(fēng)潮一起來席卷國內(nèi)
當(dāng)前地址:http://fisionsoft.com.cn/article/djidcgp.html


咨詢
建站咨詢
