freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于java的圖形用戶界面及其應(yīng)用-文庫吧

2024-10-23 15:30 本頁面


【正文】 所謂的輕量組件是不擁有本地機(jī)器對(duì)等體的組件,且是完全透明的 。 與重量組件相比 , 輕量組件沒有本地代碼,不依賴操作系統(tǒng)的支持,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制 三 圖形用戶界面 (一) AWT 抽象窗口工具包 AWT 是 JAVA 可視化編程的基礎(chǔ),任何具有繪制圖形的應(yīng)用程序,至少有一個(gè)頂級(jí)窗口,其內(nèi)不再包含其他的窗口(通常稱為幀)。在 JAVA 中用 FRAME 類來描述它。 應(yīng)用程序的主窗口是其類 的一個(gè)對(duì)象,該對(duì)象是一個(gè)容器,其內(nèi)可以包容其他用戶界面組件 如 JAVA 中的 Button 類, Label 類, TextField 類。其在 JAVA 中的繼承關(guān)系如圖 31: 本地窗口系 統(tǒng)的對(duì)等體 ( peer) JAVA AWT 抽象組件 本地主機(jī) 顯示 JAV程序 訪問組件的語句 4 圖 31 AWT 的層次關(guān)系 AWT 內(nèi)主要包含的各種組件類,多數(shù)由 Component(組件)類擴(kuò)展而來。除了象按鈕( Button)類,標(biāo)簽 (Label)類,文本域 (TextField)類等底層組件外,還包含能安放并且管理他們的容器組件。如窗口( Windows),框架 (Frame),面板 (Panel),畫布 (Canvas),對(duì)話框 (dialog)的容器類 .它們的一個(gè)具體實(shí)例就是一個(gè)可以安放各種組件的容器。 AWT 先從 Component(組件)抽象類擴(kuò)展出一個(gè) Container(容器)類,各種容器組件既是從它繼承而來 (二) Swing 在 JAVA 早期,幾乎都是采用 AWT 工具包中的組件來構(gòu)建用戶界面,但后來為了圖象用戶界面 GUI 的方便移植,實(shí)現(xiàn)其“一次編程,到處運(yùn)行”的承諾, SUN 公司開發(fā)出JFC 系統(tǒng),其核心部分是 SWING GUI 工具包,它以 AWT 工具包作為基礎(chǔ)加以擴(kuò)展,添加了新的組件集合和支持類的集合,特別采用了先進(jìn)的“模型,視圖,控制器設(shè)計(jì)范式”( MVC: ModelViewController)。 模型:負(fù)責(zé)獲取和管理組件狀態(tài)。 視圖:專門負(fù)責(zé) 組件的繪制工作,主要涉及 paint()方法。且一個(gè)模型可以對(duì)應(yīng)多個(gè)視圖。 控制器:專門負(fù)責(zé)管理和處理組件所接受的事件,這些事件可來自用戶的操作,如鍵盤輸入,鼠標(biāo)點(diǎn)擊等。也可來自系統(tǒng),如系統(tǒng)計(jì)時(shí)器發(fā)出的事件。視圖和控制器之間的通信是頻繁而復(fù)雜的,所以 JFC 系統(tǒng)把二者封裝成一個(gè)整體。其相互關(guān)系如圖 32: 圖 32 模型,視圖,控制器設(shè)計(jì)范式 在 Swing 包中包含 250 多個(gè)類,其中一部分 是用于用戶界面的組件,它們多數(shù)封裝在 程序包中( Swing 組件),而另一部分是支持類。 Swing 組件是建立在 AWT 基礎(chǔ)上的,利用了 AWT 中包含繪制用戶界面所要使用的顏色,字體和布局管理器的標(biāo)準(zhǔn)類,并提供一些輕量組件代替 AWT 中對(duì)應(yīng)的重量組件。這些 Swing 輕量組件最大限度的實(shí)現(xiàn)了所有平臺(tái)上的“外觀和感覺”都是一樣的。它們都是在 AWT 組件名前面加一個(gè)英文字母 J( J組件)。其繼承關(guān)系如圖 33: MODEL模型 VIEW 視圖 CONTROLLER 控制器 若需內(nèi)容改變則更新 接受用戶或系統(tǒng)發(fā)來的事件 只對(duì)視圖進(jìn)行更新 但內(nèi)容改變是通報(bào) 5 ……… ………… 圖 33 Swing 的層次關(guān)系 從上可知, JComponent 是 類的直接子類,且是一個(gè)抽象類。而 有擴(kuò)展了 AWT 中的抽象類 ,是 Component 的替代組件類。所以, JComponent 類繼承了 Component 和 Container 兩大類的大量功能。這些從JComponent 抽象類繼承的組件類是一個(gè)實(shí)例,必須放置在象 JFrame, 等類的頂級(jí)容器中成為它們的子組件,而頂級(jí)容器 又是父容器。父容器不僅負(fù)責(zé)自身的繪制,還統(tǒng)一負(fù)責(zé)對(duì)這些子組件的布局和繪制。 (三) 布局管理器 實(shí)際編程中,每設(shè)計(jì)一個(gè)窗體,都要往其中添加若干組件。為了管理好這些組件的布局,我們就需要使用布局管理器。比如說,設(shè)計(jì)一個(gè)簡單的計(jì)算器,或一個(gè)文本編輯器等等。這些組件是讓 JVM 自己任意安排呢?還是按照一定的位置關(guān)系進(jìn)行規(guī)范的安排呢?當(dāng)然應(yīng)該選擇后者。將加入到容器的組件按照一定的順序和規(guī)則放置,使之看起來更美觀,這就是布局。在 Java 中,布局由布局管理器 (LayoutManager) 來管理。那么,在什么 時(shí)候應(yīng)該使用布局管理器?應(yīng)選擇哪種布局管理器?又該怎樣使用布局管理器呢? 如果寫的是 GUI 程序,在使用 AWT/Swing 組件時(shí)就不應(yīng)硬性設(shè)置組件的大小和位置,而應(yīng)該使用 Java 的布局管理器( LayoutManager)來設(shè)置和管理可視組件的大小和位置,否則就有可能造成布局混亂。即當(dāng)窗體(或容器)縮放時(shí),組件位置也隨之合理調(diào)整, 這 就需要使用布局管理器。 我們都知道, Java 的 GUI 界面定義是由 AWT 程序 包和 Swing 程序 包來完成的。它在布局管理上采用了容器和布局管理分離的方案。也就是說,容器只管將其他組 件放入其中,而不管這些組件是如何放置的。對(duì)于布局的管理交給專門的布局管理器類( LayoutManager)來完成。 6 Java 中的容器類( Container),它們只管加入組件( Component),也就是說,它只使用自己的 add()方法向自己內(nèi)部加入組件。同時(shí)他記錄這些加入其內(nèi)部的組件的個(gè)數(shù),可以通過 ()方法類獲得組件的數(shù)目,通過 (i)來獲得相應(yīng)組件的句柄。然后 LayoutManager 類就可以通過這些信 息來實(shí)際布局其中的組件了。 Java 已經(jīng)為我們提供了幾個(gè)常用的布局管理器類,例如: FlowLayout、 BorderLayout、GridLayout、 GridBagLayout 等。下面說明它們的布局特點(diǎn): ? CardLayout 將組件象卡片一樣放置在容器中,在某一時(shí)刻只有一個(gè)組件可見 ? FlowLayout 將組件按從左到右而后從上到下的順序依次排列,一行不能放完則折到下一行繼續(xù)放置 ? GridLayout 形似一個(gè)無框線的表格,每個(gè)單元格中 放一個(gè)組件 BorderLayout 將組件按東、南、西、北、中五個(gè)區(qū)域放置,每個(gè)方向最多只能放置一個(gè)組件 ? GridBagLayout 非常靈活,可指定組件放置的具體位置及占用單元格數(shù)目 ? BoxLayout 就像整齊放置的一行或者一列盒子,每個(gè)盒子中一個(gè)組件 ? SpringLayout 根據(jù)一組約束條件放置子組件 ? ScrollPaneLayout 專用于 JScrollPane,含一個(gè) Viewport,一個(gè)行頭、一個(gè)列頭、兩個(gè)滾動(dòng)條和四個(gè)角組件 ? OverlayLayout 以彼此覆蓋的形式疊置組件 ? ViewportLayout JViewport 的默認(rèn)布局管理器 對(duì)于布局管理器,我們僅以邊界布局器 BorderLayout 為例來說明它的應(yīng)用。邊界布局器讓你選擇每個(gè)組件的擺放位置,你可以選擇把組件放在內(nèi)容窗格的中部,北部,南部,東部或者西部。如圖 34 所示: North West Center East South 圖 34 邊界布局 例如: class MyPanel extends Jpanel {setLayout(new BorderLayout())。 … add(yellowButton,)。 } 先放置邊緣組件,然后剩余的可用空間由中間組件來占用。當(dāng)容器縮放時(shí),邊緣組件的厚度不會(huì)改變,但是中間組件需要改變自己的大小。可以通過指定 BorderLayout 類中的 CENTER, NORTH, SOUTH, EAST, WEST 常量來添 加組件。并非需要占用所有的位置,如果不提供任何值,那么系統(tǒng)就默認(rèn)為 CENTER。 (四)事件處理 從概念上講,事件是一種在 源對(duì)象 和 監(jiān)聽者對(duì)象 之間,某種狀態(tài)發(fā)生變化的傳遞機(jī)制。事件有許多不同的用途,例如在 Windows系統(tǒng)中常要處理的鼠標(biāo)事件、窗口邊界改變事 7 件、鍵盤事件等。在 Java中則是定義了一個(gè)普通的、可擴(kuò)充的事件機(jī)制,這種機(jī)制能夠: (1)對(duì)事件類型和傳遞的模型的定義和擴(kuò)充提供一個(gè)公共框架,并適合于廣泛的應(yīng)用。 (2)與 Java語言和環(huán)境有較高的集成度。 (3)事件能被描述環(huán)境捕獲和觸發(fā)。 (4)能使其它構(gòu)造工具采取某種技術(shù)在設(shè)計(jì)時(shí)直接控制事件,以及事件源和事件監(jiān)聽者之 間的聯(lián)系。 (5)事件機(jī)制本身不依賴于復(fù)雜的開發(fā)工具。 事件從事件源到監(jiān)聽者的傳遞是通過對(duì)目標(biāo)監(jiān)聽者對(duì)象的 Java方法調(diào)用進(jìn)行的。 對(duì)每個(gè)明確的事件的發(fā)生,都相應(yīng)地定義一個(gè)明確的 Java方法。這些方法都集中定義在事件監(jiān)聽者( EventListener)接口中,這個(gè)接口要繼承 。實(shí)現(xiàn)了事件監(jiān)聽者接口中一些或全部方法的類就是事件監(jiān)聽者。 伴隨著事件的發(fā)生,相應(yīng)的狀態(tài)通常都 封裝在事件狀態(tài)對(duì)象中,該對(duì)象必須繼承自 。事件狀態(tài)對(duì)象作為單參傳遞給應(yīng)響應(yīng)該事件的監(jiān)聽者方法中。發(fā)出某種特定事件的事件源的標(biāo)識(shí)是:遵從規(guī)定的設(shè)計(jì)格式為事件監(jiān)聽者定義注冊(cè)方法,并接受對(duì)指定事件監(jiān)聽者接口實(shí)例的引用。有時(shí),事件監(jiān)聽者不能直接實(shí)現(xiàn)事件監(jiān)聽者接口,或者還有其它的額外動(dòng)作時(shí),就要在一個(gè)源與其它一個(gè)或多個(gè)監(jiān)聽者之間插入一個(gè)事件適配器類的實(shí)例,來建立它們之間的聯(lián)系。 在 JAVA 中,采用的是授權(quán)型事件處理機(jī)制,它是實(shí)現(xiàn)接收,控制和處理由事件源所發(fā)出的一種新型機(jī) 制。要實(shí)現(xiàn)這種機(jī)制要如下編程: (1)指定一個(gè)事件監(jiān)聽器,如框架,面板等組件所屬類以及它們的子類,且它們還必須是 ActionListener(動(dòng)作監(jiān)聽器 )接口的實(shí)現(xiàn)類, (2)調(diào)用作為某種事件源,例如“動(dòng)作( Action)”事件源的組件,像按鈕,文本域和組合框的所屬類提供的 addActionListener()方法,把作為“動(dòng)作”事件監(jiān)聽器的一個(gè)對(duì)象添加給該事件源 一個(gè)事件源對(duì)象可以注冊(cè)多個(gè)事件監(jiān)聽器,因此該事件源對(duì)象所引發(fā)的事
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1