溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java圖形化界面設(shè)計之容器的示例分析

發(fā)布時間:2021-08-25 10:02:10 來源:億速云 閱讀:134 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Java圖形化界面設(shè)計之容器的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“Java圖形化界面設(shè)計之容器的示例分析”這篇文章吧。

Java圖形化界面設(shè)計——容器(JFrame)

程序是為了方便用戶使用的,因此實現(xiàn)圖形化界面的程序編寫是所有編程語言發(fā)展的必然趨勢,在命令提示符下運行的程序可以讓我們了解java程序的基本知識體系結(jié)構(gòu),現(xiàn)在就進入java圖形化界面編程。

一、Java基本類(JFC)

Java基本類(“JavaFoundationClasses”,JFC),由一些軟件包組成。這些軟件包主要包括下面一些應用程序接口(API):

·抽象窗口工具集(AWT)(1.1及以上版本)。

·Swing構(gòu)件。

·Java2D應用程序接口(2DAPI)。

·兼容程序接口。

上面列出的這些應用程序接口可難會出現(xiàn)在多個軟件包中。例如:2DAPI在Java.awt和Java.awt.image軟件包中都存在,雖然像Java.awt.geom等一些特殊的軟件包也支持2DAPI,但是大量的2DAPI類都存在于Java.awt軟件包中。

AWT(1.1及以上版本)是JFC的核心。AWT為JFC的構(gòu)成提供了以下基本結(jié)構(gòu):

·代理事件模型。

·輕量構(gòu)件。

·剪貼板和數(shù)據(jù)傳輸。

·打印和無鼠標操作。

1、AWTAbstractWindowToolkit(AWT)抽象窗口工具包

AWT是比較舊的雙介面函式庫,它依然高度倚賴各作業(yè)平臺自身所具備的繪圖功效機能,且用一個比包容程式(Wrapper)還小的設(shè)計還去除、吸收各作業(yè)平臺間的繪圖功能機能差異,以致Java程式在跨平臺移攜后的繪圖呈現(xiàn)不夠一致,這使得AWT遭受到眾多的批評。這意味著:AWT的Widget倚賴作業(yè)平臺自身原有的Widget功效機能,程式設(shè)計師在開發(fā)撰寫時必須去了解各作業(yè)平臺在Widget方面的差異性,如此便偏離了Java程式語言最初的宗旨:跨平臺一致性。

AWT由java.awt包提供,其提供了支持GUI設(shè)計的類和接口,而又AWT提供的組建一般稱之為重量級組件,其是由本地方法來實現(xiàn)其功能的。AWT的特點:

lAWT中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對應的關(guān)系

lAWT通過犧牲功能來實現(xiàn)其平臺無關(guān)性

lAWT不能滿足圖形化用戶界面發(fā)展的需要

2、Swing包

為了解決AWT組件的缺陷,特別是跨平臺的問題,在JDK1.2版本后提供了新的Swing包,有javax.swing提供,Swing是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面組件,所有組建均是由java書寫,具有良好的跨平臺性,由于Swing沒有使用本地方法實現(xiàn)圖形功能,因此提出把Swing組件稱之為輕量級組件。

注意:Swing組建是在AWT基礎(chǔ)上建立的,而不是替代AWT的,AWT是根基,Swing是發(fā)展。

Swing組件幾乎都是輕量組件,那些頂層容器:窗體,小應用程序、窗口和對話框除外。因為輕量組件是在其容器的窗口中繪制的,而不是在自己的窗口中繪制的,所以輕量組件最終必須包含在一個重量容器中。因此,Swing的窗體、小應用程序、窗口和對話框都必須是重量組件,以便提供一個可以在其繪制Swing輕量組件的窗口。

Swing包括250多個類,其中有些是UI組件,有些是支持類。為了把UI組件和支持類區(qū)分開,Swing組件的名字以J開頭。表1-1列出了Swing提供的J組件。用斜體字表示的組件是AWT組件的替代組件。

表1-1SwingUI組件

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  組件類         描述
  ─────────────────────────────────
  JApplet Java.applet.Applet類的擴展,它含有JRootPane的一個實例
  JButton 能顯示文本和圖形的按鈕,它是AWT按鈕組件的替代組件
  JCheckBox 能顯示文本和圖形的復選框,它是AWT選擇組件的替代組件
  JCheckBoxMenuItem 一個復選框菜單項,它是AWT的復選框菜單項組件的替代組件
  JComboBox 帶下拉列表的文本框,它是AWT選擇組件的替代組件
  JComponent 所有輕量J組件的基類
  JDesktopPane 內(nèi)部窗體的容器
  JDialog Swing對話框的基類,它擴展了AWT Dialot類
  JEditorPane 用于編輯文本的文本窗格
  JFrame 擴展java.awt.Frame的外部窗體
  JInternalFrame 在JDesktopPane中出現(xiàn)的內(nèi)部窗體
  JLabel 可顯示文本和圖標的標簽,它是AWT標簽組件的替代組件
  JLayeredPane 能夠在不同層上顯示組件的容器
  JList 顯示選項列表的組件,它是AWT列表組件的替代組件
  JMenu 菜單條中顯示的一個菜單,它是AWT菜單組件的替代組件
  JMenuBar 用于顯示菜單的菜單條,它是AWT菜單條組件的替代組件
  JMenuItem 菜單項,它是AWT菜單項組件的替代組件
  JOptionPane 顯示標準的對話框,如:消息和問題對話框
  JPanel 通用容器,它是AWT面板和畫布組件的替代組件
  JPasswordfield JTextField的擴展,使輸入的字符不可見
  JPopupMenu 彈出式菜單,它是AWT彈出式菜單組件的替代組件
  JProgressBar 進度指示器
  JRadioButton 單選按鈕,它是AWT復選框組件的替代組件
  JRootPane 頂層容器,它包含一個玻璃窗格,一個層窗格,一個內(nèi)容窗格和一個可選的菜單條
  JScrollBar 滾動條,它是AWT滾動條組件的替代組件
  JScrollPane 滾動窗格,它是AWT滾動窗格組件的替代組件
  JSeparator 水平或垂直分隔條
  JSlider 滑桿
  JSplitPane 有兩個分隔區(qū)的容器,這兩個分隔區(qū)可以水平排列或者垂直排列且分隔區(qū)的大小能自動調(diào)整
  JTabbedPane 帶選項卡的窗格
  JTable 表格
  JTableHeader 表格頭
  JTextArea 用于輸入多行文本的文本域,它是AWT文本域組件的替代組件
  JTestComponent 文本組件的基類,它替代AWT的TextComponent類
  JTextField 單行文本域,它替代AWT的單行文本域組件
  JTextPane 簡單的文本編輯器
  JToggleButton 兩種狀態(tài)的按鈕,它是JCheckBox和JRadioButton組件的基類
  JToolBar 工具條
  JToolTip 當光標停留在一個組件上時,該組件上顯示的一行文字
  JTree 用于按鈕層次組織數(shù)據(jù)的結(jié)構(gòu)控件
  JViesport 用于瀏覽可滾動組件的視口
  JWindow 外部窗口,它是java.awt.Window的擴展
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  注:斜體字表示的是AWT的替代組件

二、AWT和Swing的區(qū)別

AWT是AbstractWindowToolKit(抽象窗口工具包)的縮寫,這個工具包提供了一套與本地圖形界面進行交互的接口。AWT中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對應的關(guān)系,我們把它稱為peers。也就是說,當我們利用AWT來構(gòu)件圖形用戶界面的時候,我們實際上是在利用操作系統(tǒng)所提供的圖形庫。由于不同操作系統(tǒng)的圖形庫所提供的功能是不一樣的,在一個平臺上存在的功能在另外一個平臺上則可能不存在。為了實現(xiàn)Java語言所宣稱的"一次編譯,到處運行"的概念,AWT不得不通過犧牲功能來實現(xiàn)其平臺無關(guān)性,也就是說,AWT所提供的圖形功能是各種通用型操作系統(tǒng)所提供的圖形功能的交集。由于AWT是依靠本地方法來實現(xiàn)其功能的,我們通常把AWT控件稱為重量級控件。

Swing是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面系統(tǒng),它提供了AWT所能夠提供的所有功能,并且用純粹的Java代碼對AWT的功能進行了大幅度的擴充。例如說并不是所有的操作系統(tǒng)都提供了對樹形控件的支持,Swing利用了AWT中所提供的基本作圖方法對樹形控件進行模擬。由于Swing控件是用100%的Java代碼來實現(xiàn)的,因此在一個平臺上設(shè)計的樹形控件可以在其他平臺上使用。由于在Swing中沒有使用本地方法來實現(xiàn)圖形功能,我們通常把Swing控件稱為輕量級控件。

AWT和Swing之間的基本區(qū)別:AWT是基于本地方法的C/C++程序,其運行速度比較快;Swing是基于AWT的Java程序,其運行速度比較慢。對于一個嵌入式應用來說,目標平臺的硬件資源往往非常有限,而應用程序的運行速度又是項目中至關(guān)重要的因素。在這種矛盾的情況下,簡單而高效的AWT當然成了嵌入式Java的第一選擇。而在普通的基于PC或者是工作站的標準Java應用中,硬件資源對應用程序所造成的限制往往不是項目中的關(guān)鍵因素,所以在標準版的Java中則提倡使用Swing,也就是通過犧牲速度來實現(xiàn)應用程序的功能。

簡要的講:

AWT是抽象窗口組件工具包,是java最早的用于編寫圖形節(jié)目應用程序的開發(fā)包。

Swing是為了解決AWT存在的問題而新開發(fā)的包,它以AWT為基礎(chǔ)的。

三、Swing基本框架

Java圖形化界面設(shè)計之容器的示例分析

上圖列舉了AWT和Swing的關(guān)系,也可以看出Swing是繼承自AWT的。本文主要利用Swing來設(shè)計圖形化界面程序。

四、圖形化設(shè)計步驟

圖形化界面程序大家都使用過,一般使用一個程序過程是:打開一個程序出現(xiàn)一個窗口或?qū)υ捒?,其中一般有菜單、工具欄、文本框、按鈕、單選框、復選框等控件(組件也就是控件),用戶錄入相關(guān)數(shù)據(jù),點按相關(guān)菜單、按鈕,程序?qū)?shù)據(jù)進行相關(guān)處理,并將處理后的數(shù)據(jù)顯示或者保存起來,最后關(guān)閉程序。

用java編程的相關(guān)設(shè)計步驟來分解上面的的程序運行過程如下圖所示:

Java圖形化界面設(shè)計之容器的示例分析

1、創(chuàng)建頂層容器

對應于程序的初始顯現(xiàn)窗口,窗口中放入其它菜單、工具欄、文本框、按鈕等組件

頂層容器圖形化界面顯示的基礎(chǔ),其它所有的組件(控件)都是直接或間接顯示在頂層容器中的。在java中頂層容器有三種,分別是JFrame(框架窗口,即通常的窗口)、JDialog(對話框)、JApplet(用于設(shè)計嵌入在網(wǎng)頁中的java小程序)。

2、創(chuàng)建中間容器、組件

對應于程序中出現(xiàn)的菜單、工具欄(中間容器)、文本框、按鈕、單選框、復選框等控件。

有很多Swing組件可以使用,見前面的SwingUI組件表。

3、將組件加入容器

在java中創(chuàng)建組件后,還需要將組件放入相應的容器,才能在頂層容器,如窗口中顯示出組件。

4、設(shè)置容器內(nèi)組件的位置

組件添加到容器中,還必須設(shè)置好組件的顯示位置,一般有兩種方法來設(shè)置組建的顯示位置,一是按照與容器的相對距離(以像素為單位),精確固定控件的位置;二是用布局管理器來管理組件在容器內(nèi)的位置。

5、處理組件所產(chǎn)生的事件

即用戶執(zhí)行選擇菜單、單擊按鈕等操作時,就要執(zhí)行相應的命令,進行相關(guān)的程序處理,這就需要設(shè)置組件的事件。

五、組件容器的使用

Java中組件容器包含頂層容器和中間容器。

在java中頂層容器有三種,分別是JFrame(框架窗口,即通常的窗口)、JDialog(對話框)、JApplet(用于設(shè)計嵌入在網(wǎng)頁中的java小程序),頂層容器是容納其它組件的基礎(chǔ),即設(shè)計圖形化程序必須要有頂層容器。

Java中間容器是可以包含其它相應組件的容器,但是中間容器和組件一樣,不能單獨存在,必須依附于頂層容器。

常見的中間容器有:

?JPanel:最靈活、最常用的中間容器。

?JScrollPane:與JPanel類似,但還可在大的組件或可擴展組件周圍提供滾動條。

?JTabbedPane:包含多個組件,但一次只顯示一個組件。用戶可在組件之間方便地切換。

?JToolBar:按行或列排列一組組件(通常是按鈕)。

1、JFrame框架窗口的使用

Java圖形化界面設(shè)計之容器的示例分析

以上是JFrame的常用方法即說明,下面舉例說明。

實例1:直接定義Jframe類的對象創(chuàng)建一個窗口

// JFrameDemo1.java
import javax.swing.*;
//使用Swing類,必須引入Swing包
public class JFrameDemo1{
	public staticvoid main( String args[]) {
		//定義一個窗體對象f,窗體名稱為"一個簡單窗口"    
		Jframe f = new JFrame("一個簡單窗口");
		/*設(shè)置窗體左上角與顯示屏左上角的坐標,
離顯示屏上邊緣300像素,離顯示屏左邊緣300像素   */
		f.setLocation(300, 300);
		//f.setLocationRelativeTo(null);本語句實現(xiàn)窗口居屏幕中央
		f.setSize(300,200);
		//設(shè)置窗體的大小為300*200像素大小
		f.setResizable(false);
		//設(shè)置窗體是否可以調(diào)整大小,參數(shù)為布爾值
		//設(shè)置窗體可見,沒有該語句,窗體將不可見,此語句必須有,否則沒有界面就沒有如何意義了
		f.setVisible( true);
		//用戶單擊窗口的關(guān)閉按鈕時程序執(zhí)行的操作
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
	}
}

程序運行結(jié)果如下圖所示:

Java圖形化界面設(shè)計之容器的示例分析

可以根據(jù)程序代碼的注釋,依次修改相應的方法參數(shù)查看效果。

setDefaultCloseOperation(intoperation):設(shè)置用戶在此窗體上發(fā)起"close"時默認執(zhí)行的操作。方法中的參數(shù)解釋如下:

l為“0”或DO_NOTHING_ON_CLOSE:

(在WindowConstants中定義):不執(zhí)行任何操作;要求程序在已注冊的WindowListener對象的windowClosing方法中處理該操作。

比如實例程序代碼中更改為f.setDefaultCloseOperation(f.DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),然后查看效果,可以發(fā)現(xiàn)窗口無法關(guān)閉,下面是相同用法,不再解釋了。

l為“1”或HIDE_ON_CLOSE

調(diào)用任意已注冊的WindowListener對象后自動隱藏該窗體。此時沒有關(guān)閉程序,只是將程序界面隱藏了。

可以打開任務管理器,可以看到一個叫“java.exe”的進程(如果調(diào)試運行了多個java程序,則會看到多個“java.exe”的進程),如果此時用EditPlus測試程序,會發(fā)現(xiàn)當單擊窗口的關(guān)閉按鈕關(guān)閉窗口后,卻無法再次對程序進行調(diào)試,因為程序線程沒有關(guān)閉,在任務管理器中關(guān)閉java.exe(如果有多個“java.exe”的進程,則先都關(guān)閉掉,再來測試該問題)基礎(chǔ)后,EditPlus才可以重新編譯改程序。

l為“2”或DISPOSE_ON_CLOSE

調(diào)用任意已注冊WindowListener的對象后自動隱藏并釋放該窗體。但繼續(xù)運行應用程序,釋放了窗體中占用的資源。

l為“3”EXIT_ON_CLOSE(在JFrame中定義):使用Systemexit方法退出應用程序。僅在應用程序中使用。結(jié)束了應用程序。

默認情況下,該值被設(shè)置為HIDE_ON_CLOSE。

當注釋掉實例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);語句時,起到的效果和f.setDefaultCloseOperation(f.HIDE_ON_CLOSE);或者f.setDefaultCloseOperation(1);一樣。

實例2:創(chuàng)建類繼承JFrame類創(chuàng)建一個窗口

// JFrameDemo2.java
importjavax.swing.*;
//創(chuàng)建子類MyFrame繼承父類JFrame
class MyFrameextends JFrame{
	//定義構(gòu)造函數(shù),帶有四個參數(shù),用于設(shè)置窗口位置和大小
	MyFrame(int x,int y,int h,int w){
		super("一個簡單窗口");
		//重寫父類方法,為窗口定義標題
		/*以下的方法調(diào)用前面沒有添加對象名,也不可能添加,要創(chuàng)建的對象名稱是什么都不知道,也就不可能添加。但是創(chuàng)建對象后,對象自動獲取這些初始值。*/
		setLocation(x,y);
		setSize(h,w);
		setResizable(false);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}
publicclass JFrameDemo2{
	public static void main( String args[]) {
		//實例化類對象,提示設(shè)置參數(shù)
		MyFrame f = new MyFrame(300,300,300,200);
	}
}

上面的例子也可以不使用構(gòu)造函數(shù),可以和實例一方式一樣,代碼可以改為如下模式。

實例3:一個簡單窗口

// JframeDemo3.java
importjavax.swing.*;
class MyFrameextends JFrame{
	MyFrame(){
	}
}
publicclass JframeDemo3{
	public static void main( String args[]) {
		MyFrame f = new MyFrame();
		f.setTitle("一個簡單窗口");
		f.setLocationRelativeTo(null);
		f.setSize(300,200);
		f.setResizable(false);
		f.setVisible( true);
		f.setDefaultCloseOperation(3);
	}
}

以上是“Java圖形化界面設(shè)計之容器的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI