大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java gui編程入門

Java gui編程入門

更新時間:2022-06-14 10:46:36 來源:動力節(jié)點 瀏覽1630次

Java 在 1995 年推出時取得的一大進步是包含了標準化的“圖形用戶界面”(“GUI”)庫。這是一個巨大的飛躍,超越了令人眼花繚亂的不兼容第三方庫,這些第三方庫是以前對 GUI 開發(fā)人員開放的唯一途徑。Java GUI 庫也是最早使用當時全新的設(shè)??計模式語言明確描述其架構(gòu)的主要軟件包之一。

主要包

然而,Java GUI 系統(tǒng)的一個令人困惑的方面是一個遺留問題,該系統(tǒng)在 1997 年進行了大規(guī)模升級,因此涉及的一些類分布在(相對)較舊的 java.awt包和較新的javax.swing 包中. 一般來說,如果類名以“ J ”開頭,那么它在 Swing 包中。由于某些功能在 Swing 包中似乎是重復的,例如框架和按鈕, 因此當有選擇時,請始終使用 Swing 組件而不是較舊的 AWT 組件。

java.awt - 包含 GUI 組件的主要超類以及一些實用程序類型類,例如 Color和Point。

java.awt.event -- 包含用于管理來自 GUI 組件的事件的類和接口,例如按鈕單擊和鼠標移動。

javax.swing -- 包含大部分可見的 GUI 組件,例如按鈕、文本字段、框架和面板。

類層次結(jié)構(gòu)

Java 使用 復合設(shè)計模式來創(chuàng)建 GUI 組件,這些組件也可以用作容納更多 GUI 組件的容器。這是一個 UML 圖,顯示了一些更常用的 GUI 組件之間的類關(guān)系:

上圖中,常用的容器組件為橙色,非容器組件為藍色。請注意,從技術(shù)上講,所有javax.swing組件都能夠容納其他Components,但實際上,只有JFrame、 JApplet和JPanel以及上面未顯示的一些(JSplitPane、JTabbedPane 和JScrollPane)通常用于此目的。

Java GUI 子系統(tǒng)

Java GUI 子系統(tǒng)由一個獨立的、自動的任務(wù)執(zhí)行線程組成,稱為“事件循環(huán)”。每個影響 GUI 的動作,例如調(diào)用重新繪制屏幕或操作 GUI 組件的屬性,或者是 GUI 發(fā)生某些事情的結(jié)果,例如用戶單擊鼠標或按下鍵,都封裝在表單中放入隊列中以供事件循環(huán)處理的“事件”。處理事件的結(jié)果可能是對屏幕上顏色位的操作,也可能導致調(diào)用開發(fā)人員代碼中的方法。

如果我們查看處理按鈕單擊的過程,我們會看到用戶的鼠標單擊觸發(fā)了一系列事件。按鈕對象通過創(chuàng)建放置到事件隊列中的按鈕單擊事件來響應(yīng)鼠標單擊。事件循環(huán)在空閑時會選擇該事件并對其進行處理。按鈕單擊事件的處理涉及調(diào)用在專門注冊的對象上的方法,這些對象稱為“偵聽器”,這些對象正在“偵聽”單擊事件。按鈕單擊的偵聽器是實現(xiàn) java.awt.ActionListener接口的對象,并且按鈕單擊事件處理涉及調(diào)用偵聽器的actionPerformed 方法,開發(fā)人員已實現(xiàn)該方法以在單擊該特定按鈕時執(zhí)行所需的任何操作。請注意,可以將多個偵聽器“添加”到任何給定按鈕,并且按鈕單擊處理將依次調(diào)用每個 ActionListener的 actionPerformed方法。

另一方面,如果我們查看繪制過程,假設(shè)開發(fā)人員的代碼希望調(diào)用重新繪制屏幕上的框架組件。開發(fā)人員的代碼將調(diào)用幀的 repaint()方法,但所做的只是生成一個 repaint 事件,該事件與所有其他事件一起放入事件隊列中。當事件循環(huán)能夠執(zhí)行時,它會處理重繪事件,在此過程中,GUI 子系統(tǒng)將生成一個特殊的 java.awt.Graphics實例,用于表示計算機的物理屏幕。此Graphics對象作為輸入?yún)?shù)傳遞給對框架的 paintComponent方法的調(diào)用。(技術(shù)上,系統(tǒng)調(diào)用框架的paint()方法依次調(diào)用 paintComponent(),但我們不需要擔心。)由于框架是一個容器,它就像任何好的復合設(shè)計模式實現(xiàn)一樣,依次調(diào)用 它所有子的paintComponent方法-成分。如果其中一個組件本身就是一個容器,那么繪制過程會沿著復合樹向下級聯(lián),直到每個組件都有機會在屏幕上繪制自己(Graphics 對象)。開發(fā)人員可以通過簡單地覆蓋所需組件的paintComponent方法來插入自定義繪制操作。

常用類

簡單組件

javax.swing.JLabel -- 屏幕上一段不可編輯的文本。

javax.swing.JButton -- 可以單擊的按鈕。單擊該按鈕將觸發(fā)其actionPerformed 事件,該事件將調(diào)用所有已安裝 ActionListener的actionPerformed 方法。

javax.swing.JTextField -- 一行用戶可編輯的文本。

javax.swing.JTextArea -- 顯示多行文本的框。可以設(shè)置為可編輯或不可編輯。

javax.swing.JRadioButton , javax.swing.JCheckBox -- 可以單擊的小圓形或方形框以指示選擇某些內(nèi)容,例如某種選項。單擊單選按鈕或復選框?qū)⒂|發(fā)特定類型的事件。 可以使用名為javax.swing.ButtonGroup的不可見(對用戶)類將單選按鈕組合在一起,以創(chuàng)建一個集合,其中一次只能設(shè)置一個按鈕。

javax.swing.JComboBox -- 項目的下拉列表。JComboBox 包含一組Objects而不僅僅是Strings。顯示的文本是項目的toString() 方法的返回值。因此,JComboBox可用于保存任意實體,而 GUI 不知道這些實體是什么。僅當所選項目更改時才會觸發(fā)事件,但始終可以檢索當前所選項目及其索引。

容器組件

javax.swing.JFrame - 一個獨立的“窗口”或“框架”,帶有標題和通常的移動、調(diào)整大小、最小化、最大化和關(guān)閉功能。對于大多數(shù)人來說,這是他們系統(tǒng)中的頂級容器。因此,一個JFrame不能容納另一個JFrame。雖然 JFrame可以包含任何類型的組件,但通常,JFrame包含 JPanels,它們被安排為將窗口(框架)中使用的組件集組合在一起。JFrame的默認布局管理器是 BorderLayout。JFrame有 幾個獨特而重要的方法值得指出:

void getContentPane().add(Component c) -- 向框架添加一個組件。請注意, 這里JFrame的行為與JPanel略有不同 ,因為 JFrame有一個很少使用的功能,即多層(窗格)組件可以快速切換到可見性和不可見性。 從java.awt.Container繼承的此方法有一些重寫形式,允許傳遞布局管理器的參數(shù),例如指定組件在 BorderLayout中的位置。

void setDefaultCloseOperation(int option) -- 設(shè)置框架關(guān)閉時的行為。請參閱有關(guān)關(guān)閉 JFrame 時設(shè)置行為的網(wǎng)頁。

javax.swing.JApplet -- 允許 Java 程序作為網(wǎng)頁中的組件運行。請注意,applet 和框架不是同一事物并且不可互換,盡管有一些解決方法允許相同的代碼作為獨立應(yīng)用程序或網(wǎng)頁中的 applet 運行。

javax.swing.JPanel -- 用于在框架中或其他面板內(nèi)部布置組件的基本構(gòu)建塊。一個 JAva GUI 由一個框架和一個面板組成,面板包含面板,等等。請注意,這里的“面板”也可以是滾動窗格、拆分窗格和/或選項卡式窗格(見下文)。JPanel的默認布局管理器 是FlowLayout。

javax.swing.JScrollPane -- 允許您顯示單個面板,其側(cè)面帶有滾動條,允許顯示比屏幕上容納的更多或更大的組件。

javax.swing.JSplitPane -- 允許顯示兩個面板,使用垂直或水平的用戶可移動條將它們分開。

javax.swing.JTabbedPane -- 允許以“選項卡式”格式顯示多個面板。

GUI 容器中常用的方法

void add(Component c) -- 將另一個組件添加到容器中,以根據(jù)當前安裝的布局管理器進行布局。 從java.awt.Container繼承的此方法有一些重寫形式,允許傳遞布局管理器的參數(shù),例如指定組件在 BorderLayout中的位置。

void setLayout(LayoutManager lm) -- 將新的布局管理器安裝到容器中。

所有 GUI 組件中的常用方法

void setPreferredSize(int width, int height) -- 設(shè)置當布局管理器能夠使用該尺寸時使用的組件的尺寸,例如有足夠的空間。一些布局管理器總是忽略組件的大小設(shè)置,因為大小受其他約束。

String getText() , void setText(String s) -- 標簽、按鈕、文本字段和文本區(qū)域的文本訪問器方法。

void setBackground(Color c) -- 設(shè)置組件的背景顏色。

實用程序類

java.awt.Graphics——這個抽象類很少被開發(fā)者的代碼實例化。 在屏幕繪制過程中,此類的與機器相關(guān)的實例被傳遞給可見 GUI 組件的paintComponent它不是由開發(fā)人員的代碼實例化,而是由 Java GUI 子系統(tǒng)實例化。開發(fā)人員可以編寫代碼,使用提供的Graphics對象實例在屏幕上繪制線條、形狀和圖像。對于高級圖形工作,應(yīng)注意提供的Graphics 對象始終可以安全地向下轉(zhuǎn)換為功能更強大的 java.awt.Graphcs2D類。

永遠不要直接從您自己的代碼中調(diào)用paintComponent 。同樣,永遠不要實例 化圖形對象——Java GUI 系統(tǒng)會自動將您的代碼交給它需要的圖形對象。

java.awt.Color -- 表示顏色。具有預定義為常見顏色的靜態(tài)字段,并且可以以多種不同格式表示,例如 3 位 RGB 值。

java.awt.Point -- 表示二維平面上的一個點,由整數(shù)值笛卡爾坐標指定。具有檢索x 和y坐標的字段以及用于計算兩點之間距離等操作的方法。對于 浮點值笛卡爾坐標,請使用 java.awt.geom.Point2D類。

布局管理器

Java 容器使用 策略設(shè)計模式來實現(xiàn) GUI 組件在屏幕上的自動布局管理。包含組件的大小和位置的管理委托給“布局管理器”,可以在設(shè)計時設(shè)置或動態(tài)更改。以下是一些常見的布局:

java.awt.BorderLayout -- 將組件分成 5 個不同的區(qū)域,邊緣的 4 個不可調(diào)整大小的區(qū)域(“North”、“East”、“South”和“West”)和中心的 1 個可調(diào)整大小的區(qū)域(“中心”)。 每個區(qū)域只能包含 1 個組件,因此通常在每個區(qū)域中使用面板來容納多個組件。

將組件添加到已知已 安裝BorderLayout的容器的典型語句是

myContainer.add(myComponent, BorderLayout.NORTH);

java.awt.FlowLayout -- 將多個組件保持在水平排列的行中,如果容器的寬度太小,則會環(huán)繞。將 FlowLayout不需要任何其他參數(shù)——組件將按照添加順序從左到右顯示。

javax.swing.BoxLayout -- 以垂直或水平排列的方式固定組件,與容器的大小無關(guān)。包含的組件的寬度和高度都是相同的,并且會自動設(shè)置為完全填充容器。

Java GUI 中的事件處理

Java 使用 Observer-Observable 設(shè)計模式 來處理來自 GUI 組件的事件,例如按鈕單擊和鼠標移動。組件提供了添加各種類型監(jiān)聽器的方法,例如“ void addActionListener(ActionListener al)”和“ void addMouseMotionListener(MouseMotionListener mml) ”。可以添加多個偵聽器,并在相關(guān)事件發(fā)生時調(diào)用所有偵聽器,但不能保證已安裝偵聽器的調(diào)用順序。

java.awt.event.ActionListener -- 用于檢測組件上的簡單操作的接口,例如單擊按鈕或 在文本字段上Enter

java.awt.event.MouseListener -- 用于監(jiān)聽鼠標點擊事件的事件監(jiān)聽器的接口。此事件允許比 ActionListener事件更詳細地捕獲鼠標單擊,例如,區(qū)分按下鼠標按鈕與. 鼠標按鈕釋放事件。還提供了一個方便類 MouseAdapter,它不對所有方法進行操作,從而使開發(fā)人員可以只編寫覆蓋所需方法的代碼。

java.awt.event.MouseMotionListener -- 用于事件偵聽器的接口,用于監(jiān)視鼠標運動事件,例如拖動。還提供了一個方便類 MouseMotionAdapter,它不對所有方法進行操作,從而使開發(fā)人員可以只編寫覆蓋所需方法的代碼。

如何啟動基于 GUI 的程序

通常,只要顯示第一個 GUI 組件(可見性設(shè)置為 true),就會啟動基于 GUI 的程序。通常這將是系統(tǒng)中的一個框架,因此會有如下一行代碼:

myFrame.setVisible(true);

這是一個 GUI 程序的快速入門, 主要方法如下:

公共靜態(tài)無效主要(字符串[]參數(shù)){
	java.awt.EventQueue.invokeLater(new Runnable() {
		公共無效運行(){
			嘗試 {
				(new MyFrameClass("標題")).setVisible(true);
                	} 捕捉(異常 e){
				e.printStackTrace();
			}
		}
	});
}

(注意:上面的代碼正確地實例化了官方 Java 要求中指定的 GUI 線程上的框架。代碼可以通過使用 lambda 函數(shù)而不是匿名內(nèi)部類實現(xiàn)來簡化一點Runnable。)

然而,在 模型-視圖-控制器架構(gòu)中,不建議通過簡單地將其可見性設(shè)置為true來啟動視圖,即主框架。最好在框架或主視圖類上定義一個“ start() ”方法,其中執(zhí)行所有最終初始化和檢查,其 最后一行代碼是setVisible(true) 語句。

MVC 中的典型控制器將實例化模型和視圖,并將它們與各自的適配器連接在一起。完成所有這些之后,控制器的最后一步將是調(diào)用視圖的start方法。如果大家想了解更多相關(guān)知識,可以關(guān)注一下動力節(jié)點的Java在線學習,里面的課程內(nèi)容細致全面,很適合零基礎(chǔ)的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产精品www视频免费看 | 神马在线影视我不卡 | 人人做天天爱夜夜爽中字 | 亚洲成 人a影院青久在线观看 | 久久成人国产精品 | 成人免费www在线高清观看 | 我爱52av好色 | 久久一本| 亚洲香蕉在线观看 | 狠色狠狠色狠狠狠色综合久久 | 五月婷婷激情在线 | 99热久久精品免费精品 | 成人午夜精品网站在线观看 | 99精品欧美一区二区三区美图 | 国产免费播放一区二区 | 高清在线精品一区二区 | 国产一二视频 | 成人精品国产亚洲欧洲 | 在线成人天天鲁夜啪视频 | 国内视频自拍在线视频 | 俄罗斯老妇性欧美毛茸茸孕交 | 中文字幕或区 | 欧美日韩国产综合一区二区三区 | 久热这里只有精品在线 | 久久精品国产亚洲aa | 国产一级特黄aaa大片 | 四虎国产精品永久地址48 | 欧美在线免费视频 | 天天干夜夜曰 | 国产福利一区二区三区在线视频 | 国产成人精视频在线观看免费 | 91手机在线 | 一道精品视频一区二区三区图片 | 亚洲精品国产福利在线观看 | 毛茸茸成熟女性老太的女bbww | 看一级毛片一区二区三区免费 | 久久久全国免费视频 | 波多野野结衣1区二区 | 国产欧美一区二区 | 奇米影视奇米色 | 91精品国产麻豆国产自产在线 |