版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第8章GUI編程初步學(xué)習(xí)導(dǎo)言開發(fā)具有良好的GUI(GraphicsUserInterface:圖形用戶界面)的軟件無疑是程序員的追求目標(biāo)。在Java語言中提供了大量的類來實(shí)現(xiàn)界面設(shè)計(jì)。可以實(shí)現(xiàn)圖形界面主要有AWT工具集和Swing工具集。本章將詳細(xì)介紹Swing工具集常用的GUI組件、設(shè)置觀感效果、以及AWT的布局管理等內(nèi)容。課程結(jié)構(gòu)8.1GUI編程概述8.2Swing的常用組件8.3布局管理器8.4觀感效果8.1GUI編程概述1.Java的基礎(chǔ)類Java基礎(chǔ)類(JavaFoundationClasses)是構(gòu)建圖形用戶界面的圖形框架。Java基礎(chǔ)類是由如下的類庫構(gòu)成:(1)抽象窗口工具集:AWT;(2)Swing組件;(3)支持剪貼板的數(shù)據(jù)傳送;(4)Java2D,高級圖形圖象處理;(5)服務(wù)殘疾人的輔助應(yīng)用接口。8.1GUI編程概述2.AWT概述AWT是AbstractWindowToolkit的縮寫,稱為抽象窗口工具集,是Java基礎(chǔ)類中一份子。AWT提供了構(gòu)建用戶界面組件,例如菜單、按鈕、文本框、對話框、復(fù)選框等,可以根據(jù)圖形界面組件的輸入實(shí)現(xiàn)事件處理。AWT允許繪制圖形、處理圖像、控制用戶界面的布局、字體顯示以及提供利用本地剪貼板實(shí)現(xiàn)數(shù)據(jù)傳送類等輔助性質(zhì)的類。8.1GUI編程概述3.Swing概述Swing是Java基礎(chǔ)類中的一部分,定義了具有可插入觀感(Look-and-Feel)的組件。Swing是純Java語言實(shí)現(xiàn)的,基于JDK1.1“輕重量”用戶界面框架,并不依賴本地的工作平臺。Swing具有和AWT同性質(zhì)的組件,如按鈕等。從命名的角度看,Swing組件都第一個字母標(biāo)有一個”J”,比如AWT按鈕組件命名為Button,而Swing的按鈕組件命名為JButton.Swing還定義了其他具體應(yīng)用的組件,如樹組件、表組件、拾取列表組件等.8.1GUI編程概述Swing組件采用了一種MVC的設(shè)計(jì)范式,即“模型-視圖-控制”(Model-View-Controller),其中模型用來保存內(nèi)容,視圖用來顯示內(nèi)容,控制器用來控制用戶輸入。8.1GUI編程概述4.Swing組件和AWT組件的比較與AWT組件比較,最大區(qū)別在于Swing組件是由純Java代碼構(gòu)成,沒有任何本地代碼。由于這一特性,使得Swing組件具有比AWT更多的優(yōu)勢,具體體現(xiàn)在以下幾個方面:Swing的標(biāo)簽和按鈕組件可以顯示文本和圖片,而不是象AWT的同性質(zhì)組件一樣只可以顯示文本;Swing可以實(shí)現(xiàn)用戶定義組件的外觀,而AWT組件的外觀取決于本地的操作系統(tǒng);Swing具有良好的擴(kuò)展性,用戶可以擴(kuò)展已有組件,定義新組件,AWT的擴(kuò)展性差。8.1GUI編程概述1.JFrame組件JFrame組件定義的是框架窗口。框架窗口是一種頂層窗口,不能包含在其他窗口的窗口。這種窗口與用JWindow組件定義的窗口有明顯不同,框架窗口是指具有標(biāo)題欄、邊界的窗口,而用JWindow組件創(chuàng)建的窗口是無標(biāo)題和邊界的窗口。在JFrame組件的窗口的標(biāo)題欄上,具有可以控制標(biāo)題窗口大小的圖標(biāo)。通常用JFrame創(chuàng)建的框架窗口容納其他組件,如按鈕、標(biāo)簽、文本框等。8.2Swing的常用組件(1)JFrame的創(chuàng)建JFrame():創(chuàng)建一個空的框架窗口。JFrame(Stringtitle):創(chuàng)建一個標(biāo)題為title的窗口。(2)JFrame的常用方法JFrame的常用方法見表8-2。例8.1JFrame的示例。程序清單見JFrameExample.java,運(yùn)行結(jié)果見圖8-2.圖8-28.2Swing的常用組件2.標(biāo)簽(JLabel)標(biāo)簽組件是用于顯示文本信息、或圖標(biāo)、或二者兼而有之。JLabel組件不會對用戶的輸入發(fā)生反應(yīng),即,對JLabel組件不能編輯。標(biāo)簽組件可以將顯示內(nèi)容垂直或水平顯示,通常默認(rèn)文本信息的顯示狀態(tài)為水平。而圖標(biāo)的顯示狀態(tài)為垂直。標(biāo)簽組件一般起到提示作用。8.2Swing的常用組件(1)JLabel組件的創(chuàng)建JLabel():創(chuàng)建空標(biāo)簽,無文本無圖標(biāo)。JLabel(Iconimage):創(chuàng)建一個具有圖標(biāo)image的標(biāo)簽實(shí)例。JLabel(Stringtext):創(chuàng)建一個具有文本信息text的標(biāo)簽實(shí)例。JLabel(Stringtext,inthorizontalAlignment):創(chuàng)建一個具有特定字符信息text和對齊方式horizontalAlignment的標(biāo)簽實(shí)例。其中,對齊方式是在SwingContants.LEFT(左對齊)、SwingContants.CENTER(居中對齊)、SwingContants.RIGHT(右對齊)、SwingConstants.LEADING(向上對齊)和SwingConstants.TRAILING(向下對齊)。JLabel(Stringtext,Iconimage,inthorizontalAlignment):創(chuàng)建具有文本text和圖標(biāo)image信息的標(biāo)簽實(shí)例,并且具有特定的對齊方式horizontalAlignment。8.2Swing的常用組件(2)JLabel的常用方法JLabel的常用方法見表8-3。表8-3JLabel的主要方法方法功能voidsetText(String)設(shè)置顯示內(nèi)容StringgetText()獲取顯示內(nèi)容voidsetIcon(Iconicon)設(shè)置顯示的圖標(biāo)IcongetIcon()獲取顯示的圖標(biāo)voidsetHorizontalAlignment(int)設(shè)置沿x軸方向的對齊方式intgetHorizontalAlignment()獲取沿x軸方向的對齊方式
8.2Swing的常用組件例8.2JLabel創(chuàng)建的示例。程序清單見程序JLabelExample.java,運(yùn)行結(jié)果見圖8-3.圖8-38.2Swing的常用組件3.文本框(JTextField和JPasswordField)JTextField組件用于創(chuàng)建文本框。文本框是用來接受用的單行文本信息輸入的區(qū)域。通常文本框用于接受用戶信息或其他文本信息的輸入。當(dāng)用戶輸入文本信息后,如果為JTextField對象添加事件處理,按回車鍵會激發(fā)一定的動作。(1)JTextField的創(chuàng)建JTextField的構(gòu)造方法常見有如下幾種:JTextField():創(chuàng)建一個空文本框。JTextField(Stringtext):創(chuàng)建一個具有初始文本信息text的文本框。JTextField(Stringtext,intcolumns):創(chuàng)建一個具有初始文本信息text以及指定列數(shù)的文本框。(2)JTextField的常用方法JTextField的常用方法見表8-4。8.2Swing的常用組件表8-4JTextField的主要方法方法功能voidsetText(String)設(shè)置顯示內(nèi)容StringgetText()獲取顯示內(nèi)容voidsetFont(Font)設(shè)置顯示文本的字體voidsetHorizontalAlignment(int)設(shè)置沿x軸方向的對齊方式intgetHorizontalAlignment()獲取沿x軸方向的對齊方式voidsetColumns(int)
設(shè)置列數(shù)intgetColumns()
獲取列數(shù)DimensiongetPreferredSize()獲取此文本框所需的首選大小尺寸8.2Swing的常用組件JPasswordField是JTextField的子類,是一種特殊的文本框,也是用來接受單行文本信息的輸入的區(qū)域,但會用回顯字符串代替輸入的文本信息。因此,JPasswordField組件也稱為密碼文本框。JPasswordField的默認(rèn)的回顯字符是“*”,用戶可以自行設(shè)置回顯字符。(3)JPasswordField的創(chuàng)建JPasswordField的構(gòu)造方法有如下幾種:JPasswordField():創(chuàng)建一個空的密碼文本框。JPasswordField(Stringtext):創(chuàng)建一個指定初始文本信息的密碼文本框。JPasswordField(Stringtext,intcolumns):創(chuàng)建一個指定文本和列數(shù)的密碼文本框。JPasswordField(intcolumns):創(chuàng)建一個指定列數(shù)的密碼文本框。8.2Swing的常用組件(4)JPasswordField的常用方法JPasswordField是JTextField的子類,所以JPasswordField也具有和JTextField類似名稱和功能的方法,因此,該組件也具有表8-4的方法。此外,它還具有自己的獨(dú)特方法,具體見表8-5。表8-5JPasswordField的主要方法方法功能booleanechoCharIsSet()獲取設(shè)置回顯字符的狀態(tài)voidsetEchoChar(char)設(shè)置回顯字符chargetEchoChar()獲取回顯字符char[]getPassword()獲取組件的文本例8.3JTextField和JPasswordField的示例。程序清單見程序JTextFieldExample.java,運(yùn)行結(jié)果見圖8-4.圖8-48.2Swing的常用組件5.文本區(qū)(JTextArea)JTextArea組件是文本區(qū)組件。它與JTextField一樣能接受文本信息的輸入和顯示。但是與JTextField組件不同的是,JTextArea對象可以多行輸入與顯示,突破了JTextField的單行的限制。但是,如果文本信息的行數(shù)超過文本區(qū)限定的行數(shù),超出的文本信息不能顯示。為了解決這個問題,可以借助JScrollPane滾動窗格組件。將文本區(qū)放置到滾動窗格中,就可以實(shí)現(xiàn)超出文本信息的滾動輸出。
8.2Swing的常用組件(1)JTextArea的創(chuàng)建JTextArea的構(gòu)造方法有如下幾種:JTextArea():創(chuàng)建一個空文本區(qū)。JTextArea(introws,intcolumns):創(chuàng)建一個指定行數(shù)和列數(shù)的文本區(qū)。JTextArea(Stringtext):創(chuàng)建一個具有初始顯示內(nèi)容的文本區(qū)。JTextArea(Stringtext,introws,intcolumns):創(chuàng)建一個指定行數(shù)和列數(shù)具有初始文本信息的文本區(qū)。(2)JTextArea的常用方法JTextArea的常用方法見表8-6。
8.2Swing的常用組件表8-6JTextArea的主要方法方法功能voidsetColumns(int)設(shè)置列數(shù)intgetColumns()獲取列數(shù)voidsetRows(int)設(shè)置行數(shù)intgetRows()獲取行數(shù)voidsetFont(Font)設(shè)置字體voidinsert(String,int)將指定文本插入到指定位置voidappend(String)尾部添加文本信息intgetLineCount()獲取文本區(qū)包含的行數(shù)voidsetEditable(boolean)設(shè)置可寫狀態(tài)booleanisEditable()獲取可寫狀態(tài)8.2Swing的常用組件例8.4JTextArea的示例。程序清單見程序JTextAreaExample.java,運(yùn)行結(jié)果見圖8-5.圖8-58.2Swing的常用組件6.按鈕(JButton)JButton是用來創(chuàng)建命令按鈕。JButton對象具有這樣的功能:當(dāng)用戶按下命令按鈕,會激發(fā)一定的動作。JButton創(chuàng)建的按鈕可以具有圖標(biāo)和文本信息的內(nèi)容,通過它們可以有效地提示及幫助用戶操作。(1)JButton的創(chuàng)建JButton常用的構(gòu)造方法有如下幾種:JButton():創(chuàng)建一個空按鈕。JButton(Stringtext):創(chuàng)建一個具有文本提示的按鈕。JButton(Iconicon):創(chuàng)建一個具有圖標(biāo)提示的按鈕。JButton(Stringtext,Iconicon):創(chuàng)建一個具有文本和圖標(biāo)的按鈕。(2)JButton的常用方法JButton的常用方法見表8-7。
8.2Swing的常用組件例8.5JButton的示例。程序清單見程序JButtonExample.java,運(yùn)行結(jié)果見圖8-6,8-7,8-8.圖8-6圖8-7圖8-8表8-7JButton的主要方法方法功能voidsetText(String)設(shè)置文本StringgetText()獲取文本voidsetPressedIcon(Icon)設(shè)置按下的圖標(biāo)IcongetPressedIcon()獲取按下的圖標(biāo)voidsetRolloverIcon(Icon)設(shè)置翻滾圖標(biāo)IcongetRolloverIcon()獲取翻滾圖標(biāo)voidsetMnemonic(int)設(shè)置快捷鍵intgetMnemonic()獲取快捷鍵voidsetHorizontalAlignment(int)設(shè)置沿x軸方向的對齊方式intgetHorizontalAlignment()獲取沿x軸方向的對齊方式8.2Swing的常用組件7.復(fù)選框和單選框(JCheckBox和JRadioButton)JCheckBox組件可以用來創(chuàng)建具有文本和圖標(biāo)的復(fù)選框。這種復(fù)選框具有來“選中”或“取消選中”狀態(tài),可以通過用戶的選擇來實(shí)現(xiàn)。通常,用多個復(fù)選框作為一組來表示多種組合條件,用戶可以同時選擇多個復(fù)選框。
JRadioButton組件可以用來創(chuàng)建具有文本和圖標(biāo)的單選按鈕,和JCheckBox組件一樣,可以表示“選中”或“取消選中”狀態(tài)??梢远x一個或多個單選按鈕添加到一個ButtonGroup按鈕組作為整體處理,只不過在任何情況下,只有一個單選按鈕能處于“選中”狀態(tài),其他單選按鈕處于“非選中”狀態(tài)中。一般,定義多個單選按鈕來表示多個條件選擇一種的情況。8.2Swing的常用組件(1)JCheckBox的創(chuàng)建JCheckBox的構(gòu)造方法有如下幾種:JCheckBox():創(chuàng)建一個無文本圖標(biāo)的未選的復(fù)選框。JCheckBox(Iconicon):創(chuàng)建一個指定圖標(biāo)未選的復(fù)選框。JCheckBox(Iconicon,booleanselected):創(chuàng)建一個指定圖標(biāo)指定狀態(tài)的復(fù)選框。JCheckBox(Stringtext):創(chuàng)建一個指定文本信息的復(fù)選框。JCheckBox(Stringtext,booleanselected):創(chuàng)建一個指定文本信息指定狀態(tài)的復(fù)選框。JCheckBox(Stringtext,Iconicon):創(chuàng)建一個指定文本指定圖標(biāo)的復(fù)選框。JCheckBox(Stringtext,Iconicon,booleanselected):創(chuàng)建一個指定文本圖標(biāo)以及指定狀態(tài)的復(fù)選框。8.2Swing的常用組件(2)JCheckBox的常用方法JCheckBox的常用方法見表8-8。表8-8JCheckBox的主要方法方法功能voidsetText(String)設(shè)置文本StringgetText()獲取文本voidsetIcon(Icon)設(shè)置圖標(biāo)IcongetIcon()獲取圖標(biāo)voidsetSelected(boolean)設(shè)置選擇狀態(tài)booleangetSelected()獲取選擇狀態(tài)voidsetSelectedIcon(Icon)設(shè)置選中的圖標(biāo)IcongetSelectedIcon()獲取選中的圖標(biāo)8.2Swing的常用組件(3)JRadioButton的創(chuàng)建JRadioButton的構(gòu)造方法有如下幾種:JRadioButton():創(chuàng)建一個初始未選擇無文本無圖標(biāo)的單選按鈕。JRadioButton(Iconicon):創(chuàng)建一個指定圖標(biāo)的單選按鈕。JRadioButton(Iconicon,booleanselected):創(chuàng)建一個指定圖標(biāo)指定選擇狀態(tài)的單選按鈕。JRadioButton(Stringtext):創(chuàng)建一個指定文本未選的單選按鈕。JRadioButton(Stringtext,booleanselected):創(chuàng)建一個指定文本指定選擇狀態(tài)的單選按鈕。JRadioButton(Stringtext,Iconicon):創(chuàng)建一個指定文本指定圖標(biāo)的單選按鈕。JRadioButton(Stringtext,Iconicon,booleanselected):創(chuàng)建一個指定文本指定圖標(biāo)和選擇狀態(tài)的單選按鈕8.2Swing的常用組件(4)JRadioButton的常用方法JRadioButton的常用方法見表8-9。表8-9JRadioButton的主要方法方法功能voidsetText(String)設(shè)置文本StringgetText()獲取文本voidsetIcon(Icon)設(shè)置圖標(biāo)IcongetIcon()獲取圖標(biāo)voidsetSelected(boolean)設(shè)置選擇狀態(tài)booleangetSelected()獲取選擇狀態(tài)voidsetSelectedIcon(Icon)設(shè)置選中的圖標(biāo)IcongetSelectedIcon()獲取選中的圖標(biāo)8.2Swing的常用組件例8.6JCheckBox和JRadioButton的示例。程序清單見程序JCheckBoxJRadioButtonExample.java,運(yùn)行結(jié)果見圖8-9.圖8-98.2Swing的常用組件8.組合框(JComboBox)JComboBox組件用來創(chuàng)建組合框?qū)ο蟆R话?,根?jù)組合框是否可編輯的狀態(tài),可以將組合框分成兩種常見的外觀??删庉嫚顟B(tài)外觀是視為文本框和下拉列表的組合,不可編輯狀態(tài)的外觀可視為按鈕和下拉列表的組合。在按鈕或文本框的右邊有一個帶有三角符號的下拉按鈕。用戶可以點(diǎn)擊該下拉按鈕,可以出現(xiàn)一個內(nèi)容列表。這也是組合框的得名。組合框通常用于從列表的“多個項(xiàng)目中選擇一個”的操作。8.2Swing的常用組件(1)JComboBox的創(chuàng)建JComboBox的構(gòu)造方法有如下幾種:JComboBox():創(chuàng)建一個默認(rèn)模型的組合框。JComboBox(ComboBoxModelaModel):創(chuàng)建一個指定模型的組合框。JComboBox(Object[]items):創(chuàng)建一個具有數(shù)組定義列表內(nèi)容的組合框。(2)JComboBox的常用方法JComboBox的常用方法見表8-10。8.2Swing的常用組件表8-10JComboBox的主要方法方法功能voidaddItemt(Object[])添加項(xiàng)目voidremoveItem(Object)移除項(xiàng)目ObjectgetItemAt(int)獲取指定索引的項(xiàng)目voidsetMaximumRowCount()設(shè)置最大的顯示行數(shù)intgetMaximumRowCount()獲取最大的顯示行數(shù)voidsetSelectedItem(Object)設(shè)置選中的項(xiàng)目voidsetSelectedIndex(int)設(shè)置選中索引號的項(xiàng)目booleanisEditable()獲取編輯狀態(tài)voidsetEditable(boolean)設(shè)置編輯狀態(tài)voidshowPopup()顯示彈出的窗口8.2Swing的常用組件例8.7JComboBox的示例。程序清單見程序JComboBoxExample.java,運(yùn)行結(jié)果見圖8-10.圖8-108.2Swing的常用組件8.列表(JList)JList組件用于定義列表,允許用戶選擇一個或多個項(xiàng)目。與JTextArea類似,JList本身不支持滾動功能,如果要顯示超出顯示范圍的項(xiàng)目,可以將JList對象放置到滾動窗格JScrollPane對象中,便可以為列表對象實(shí)現(xiàn)滾動操作。8.2Swing的常用組件(1)JList的創(chuàng)建JList的構(gòu)造方法如下:JList():創(chuàng)建一個空模型的列表JList(ListModeldataModel):創(chuàng)建一個指定模型的列表。JList(Object[]listdatas):創(chuàng)建一個具有數(shù)組指定項(xiàng)目內(nèi)容的列表。(2)JList的常用方法JList的常用方法見表8-11。8.2Swing的常用組件表8-11JList的主要方法方法功能intgetFirstVisibleIndex()獲取第一個可見單元的索引voidsetFirstVisibleIndex(int)設(shè)置第一個可見單元的索引intgetLastVisibleIndex()獲取最后一個可見單元的索引voidsetLastVisibleIndex(int)設(shè)置最后一個可見單元的索引intgetSelectedIndex()獲取第一個已選的索引voidsetSelectedIndex(int)設(shè)置第一個已選的索引ObjectgetSelectedValue()獲取第一個已選的對象voidsetSelectedValue(Object)設(shè)置第一個已選的對象Object[]getSelectedValues()獲取已選的所有對象ColorgetSelectionBackground()獲取選中項(xiàng)目的背景色voidsetSelectionBackground()設(shè)置選中項(xiàng)目的背景色ColorgetSelectionForeground()獲取選中項(xiàng)目的前景色voidsetSelectionForeground()設(shè)置選中項(xiàng)目的前景色intgetVisibleRowCount()獲取首選可見行數(shù)voidsetVisibleRowCount()設(shè)置首選可見行數(shù)voidsetListData(Object[])設(shè)置列表項(xiàng)目voidsetListData(Vector<?>)設(shè)置列表項(xiàng)目8.2Swing的常用組件例8.8JList的示例。程序清單見程序JListExample.java,運(yùn)行結(jié)果見圖8-11.圖8-118.2Swing的常用組件9.面板(JPanel)JPanel組件定義的面板實(shí)際上是一種容器組件,用來容納各種其他輕量級的組件。此外,用戶還可以用這種面板容器繪制圖形。(1)JPanel的構(gòu)造方法如下所示:JPanel():創(chuàng)建具有雙緩沖和流布局(FlowLayout)的面板。JPanel(LayoutManagerlayout):創(chuàng)建具有指定布局管理器的面板。8.2Swing的常用組件(2)JPanel的常用方法JPanel的常用方法見表8-12。表8-12JPanel的主要方法方法功能voidadd(Component)添加組件voidadd(Component,int)添加組件至索引指定位置voidadd(Component,Object)按照指定布局限制添加組件voidadd(Component,Object,int)按照指定布局管理限制添加組件至指定位置voidremove(Component)
移除組件voidremove(int)
移除指定位置的組件voidremoveAll()
移除所有組件voidpaintComponent(Graphics)繪制組件voidrepaint()重新繪制voidsetPreferredSize(Dimension)設(shè)置最佳尺寸DimensiongetPreferredSize()獲取最佳尺寸8.2Swing的常用組件例8.9JPanel的示例。程序清單見程序JPanelExample.java,運(yùn)行結(jié)果見圖8-12.圖8-128.2Swing的常用組件10.菜單制作許多軟件都提供菜單方便用戶操作。Java語言也提供了對菜單的支持。在Java語言中,菜單組件是特殊的組件群,菜單并不依托其他容器組件存在,菜單依賴于菜單條而存在。但是,菜單條必須放置到容器組件中才能顯示。通常容器組件具有方法setJMenuBar()來實(shí)現(xiàn)這一功能。菜單條(JMenuBar)中包含若干菜單、而菜單(JMenu)中又容納了各種菜單項(xiàng)。其中,菜單項(xiàng)包括三種形式:普通菜單項(xiàng)(JMenuItem)、復(fù)選框菜單項(xiàng)(JCheckBoxMenuItem)和單選按鈕菜單項(xiàng)(JRadioButtonMenuItem)。對于類JCheckBoxMenuItem和類JRadioButtonMenuItem是JMenuItem的子類,表示了特殊形式的菜單項(xiàng)。8.2Swing的常用組件此外,還有一種特殊形式的菜單,就是彈出菜單(JPopupMenu),也稱為快捷菜單。在使用某些軟件時,往往單擊鼠標(biāo)右鍵,會出現(xiàn)一個彈出菜單,彈出菜單中包含各種菜單項(xiàng)。不過,彈出菜單并不依托菜單條,它依賴于其他容器組件而存在。8.2Swing的常用組件(1)JMenuBarJMenuBar用來實(shí)現(xiàn)菜單條,它的構(gòu)造方法如下:
JMenuBar():創(chuàng)建空的菜單條。JMenuBar的常用方法見表8-13。表8-13JMenuBar的主要方法方法功能JMenuadd(JMenu)添加菜單至菜單條JMenugetMenu(int)獲取指定位置的菜單intgetMenuCount()獲取菜單的個數(shù)8.2Swing的常用組件(2)JMenu和JPopupMenuJMenu是用來創(chuàng)建菜單對象,它的構(gòu)造方法有:JMenu():創(chuàng)建空的菜單。JMenu(Stringstring):創(chuàng)建指定文本的菜單。JMenu(Strings,booleanb):創(chuàng)建指定文本的菜單,并指定菜單的顯示方式是否是分離式的。JMenu的常用方法見表8-14。8.2Swing的常用組件表8-14JMenu的主要方法方法功能JMenuItemadd(Action)添加帶有特定動作的菜單項(xiàng)Componentadd(Component)添加組件至菜單Componentadd(Component,int)在指定位置添加組件JMenuItemadd(JMenuItem)添加菜單項(xiàng)JMenuItemadd(String)
添加帶有文本信息的菜單項(xiàng)voidaddSeparator()添加分離線JPopupMenugetPopupMenu()獲取與菜單相關(guān)聯(lián)的彈出菜單JMenuIteminsert(JMenuItem,int)將菜單項(xiàng)插入到指定位置booleanisPopupMenuVisible()獲取與菜單相關(guān)聯(lián)的彈出菜單可見booleanisSelected()獲取菜單選擇狀態(tài)voidremoveAll()移除所有的菜單項(xiàng)voidaddAccelerator(KeyStroke)增加快捷鍵voidsetDelay(int)設(shè)置彈出菜單出現(xiàn)的延遲時間8.2Swing的常用組件JPopupMenuJPopupMenu的構(gòu)造方法如下所示:JPopupMenu():創(chuàng)建無激發(fā)的彈出菜單。JPopupMenu(String):創(chuàng)建具有特定標(biāo)題的彈出菜單。JPopupMenu的常用方法見表8-15。表8-15JPopupMenu的主要方法方法功能JMenuItemadd(Action)添加帶有特定動作的菜單項(xiàng)JMenuItemadd(JMenuItem)添加菜單項(xiàng)JMenuItemadd(String)
添加帶有文本信息的菜單項(xiàng)voidaddSeparator()添加分離線voidshow(Component,int,int)在指定組件中的指定位置顯示彈出菜單booleanisVisible()獲取彈出菜單可見性voidpack()按顯示所有組件的最小尺寸排列voidremove(int)移除指定位置的菜單項(xiàng)8.2Swing的常用組件(3)JMenuItem、JCheckBoxMenuItem和JRadioButtonMenuItemJMenuItemJMenuItem的構(gòu)造方法有如下幾種:JMenuItem():創(chuàng)建一個空菜單項(xiàng)。JMenuItem(Stringtext):創(chuàng)建一個具有特定文本信息的菜單項(xiàng)。JMenuItem(Iconicon):創(chuàng)建一個具有特定圖標(biāo)的菜單項(xiàng)。JMenuItem(Stringtext,Iconicon):創(chuàng)建一個具有指定文本和特定圖標(biāo)的菜單項(xiàng)。JMenuItem(Stringtext,intmnemonic):創(chuàng)建一個具有特定文本和鍵盤助憶符的菜單項(xiàng)。
JMenuItem的常用方法見表8-16。8.2Swing的常用組件表8-16JMenuItem的主要方法方法功能KeyStrokegetAccelerator()獲取快捷鍵voidsetAccelerator(KeyStroke)設(shè)置快捷鍵voidinit(String,icon)
用指定文本和圖標(biāo)初始化菜單項(xiàng)voidsetEnabled(boolean)設(shè)置菜單的啟動或禁止?fàn)顟B(tài)MenuElement[]getSubElements()獲取菜單的子菜單項(xiàng)8.2Swing的常用組件JCheckBoxMenuItemJCheckBoxMenuItem的構(gòu)造方法有如下幾種:JCheckBoxMenuItem():創(chuàng)建空復(fù)選框菜單項(xiàng)。JCheckBoxMenuItem(Iconicon):創(chuàng)建具有特定圖標(biāo)的未選定復(fù)選框菜單項(xiàng)。JCheckBoxMenuItem(Stringtext):創(chuàng)建具有特定文本信息的未選定的復(fù)選框菜單項(xiàng)。JCheckBoxMenuItem(Stringtext,booleanb):創(chuàng)建具有特定文本信息和指定選擇狀態(tài)的復(fù)選框菜單項(xiàng)。JCheckBoxMenuItem(Stringtext,Iconicon):創(chuàng)建具有特定文本和圖標(biāo)的復(fù)選框菜單項(xiàng),并且該菜單項(xiàng)為未選狀態(tài)。JCheckBoxMenuItem(Stringtext,Iconicon,booleanb):創(chuàng)建具有特定文本和指定選擇狀態(tài)的復(fù)選框。8.2Swing的常用組件JRadioButtonMenuItemJRadioButtonMenuItem的構(gòu)造方法有如下幾種:JRadioButtonMenuItem():創(chuàng)建一個空按鈕菜單項(xiàng)。JRadioButtonMenuItem(Iconicon):創(chuàng)建一個特定圖標(biāo)的單選按鈕菜單項(xiàng)。JRadioButtonMenuItem(Stringtext):創(chuàng)建具有特定文本的單選按鈕菜單項(xiàng)。JRadioButtonMenuItem(Stringtext,Iconicon):創(chuàng)建具有特定文本和圖標(biāo)的單選菜單項(xiàng)。JRadioButtonMenuItem(Stringtext,booleanb):創(chuàng)建具有特定文本以及選定狀態(tài)的單選菜單項(xiàng)。JRadioButtonMenuItem(Stringtext,Icon,booleanb):創(chuàng)建具有特定文本、圖標(biāo)以及選定狀態(tài)的單選菜單項(xiàng)。8.2Swing的常用組件例8.10菜單制作的示例。程序清單見程序MenuProducerExample.java,運(yùn)行結(jié)果見圖8-13,8-14.
8-13運(yùn)行菜單8-14運(yùn)行彈出菜單8.2Swing的常用組件11.JTree樹形層次結(jié)構(gòu)是一種常用的圖形界面形式。通常在文件目錄、書目索引、商品目錄等應(yīng)用中都會使用樹形層次結(jié)構(gòu)。Java語言中的Swing包提供一種高級組件JTree。通過它可以直接實(shí)現(xiàn)樹形層次結(jié)構(gòu)。Java中樹形層次結(jié)構(gòu)存在特殊性:有且只有一個節(jié)點(diǎn)是根節(jié)點(diǎn)(沒有父節(jié)點(diǎn)),每一個節(jié)點(diǎn)只有一個父節(jié)點(diǎn)。8.2Swing的常用組件JTree組件與其他的Swing組件一樣,采用MVC模型。為了實(shí)現(xiàn)一種樹形結(jié)構(gòu),首先是用TreeNode接口定義樹的節(jié)點(diǎn)。然后,將利用已有的樹節(jié)點(diǎn)創(chuàng)建樹的模型。Swing工具集中提供了一個默認(rèn)的樹模型DefaultTreeModel,根據(jù)樹的模型創(chuàng)建出樹形結(jié)構(gòu)。
(1)JTree的創(chuàng)建JTree的對象可以通過下列的常用的構(gòu)造方法來實(shí)現(xiàn):JTree():返回帶有示例模型的JTree。JTree(TreeModelnewModel):返回JTree的一個實(shí)例,它顯示根節(jié)點(diǎn)-使用指定的數(shù)據(jù)模型創(chuàng)建樹。JTree(TreeNoderoot):返回一個JTree,指定的TreeNode作為其根,它顯示根節(jié)點(diǎn)。JTree(TreeNoderoot,booleanasksAllowsChildren):返回一個JTree,指定的TreeNode作為其根,它用指定的方式顯示根節(jié)點(diǎn),并確定節(jié)點(diǎn)是否為葉節(jié)點(diǎn)。8.2Swing的常用組件例8.11創(chuàng)建簡單樹形結(jié)構(gòu)的示例。程序清單見程序JTreeExample.java,運(yùn)行結(jié)果見圖8-15.8-158.2Swing的常用組件JTableSwing工具集的JTable組件可以實(shí)現(xiàn)二維表格。該組件是一種遵循MVC模型的高級組件,它利用接口TableModel定義表格模型,實(shí)現(xiàn)獲取表格數(shù)據(jù)代理。JTable確定表格模型TableModel的視圖。一般,建立簡單的二維表格可以通過實(shí)現(xiàn)TableModel接口的DefaultTableModel類來定義表格模型。然后根據(jù)表格模型創(chuàng)建表格。8.2Swing的常用組件JTable對象的創(chuàng)建創(chuàng)建JTable對象可以通過下列的構(gòu)造方法實(shí)現(xiàn):(1)JTable():構(gòu)造默認(rèn)的JTable,使用默認(rèn)的數(shù)據(jù)模型、默認(rèn)的列模型和默認(rèn)的選擇模型對其進(jìn)行初始化。(2)JTable(intnumRows,intnumColumns):使用DefaultTableModel創(chuàng)建具有空單元格的numRows行和numColumns列的JTable對象。(3)JTable(Object[][]rowData,Object[]columnNames):創(chuàng)建JTable對象,用來顯示二維數(shù)組rowData中的值,其列名稱為columnNames。(4)JTable(TableModelmodel):創(chuàng)建JTable對象,使用model作為數(shù)據(jù)模型、默認(rèn)的列模型和默認(rèn)的選擇模型對其進(jìn)行初始化。(5)JTable(TableModelmodel,TableColumnModelcm):創(chuàng)建JTable對象,使用model作為數(shù)據(jù)模型、cm作為列模型和默認(rèn)的選擇模型對其進(jìn)行初始化。8.2Swing的常用組件例8.12創(chuàng)建簡單表格的示例。程序清單見程序JTableExample.java,運(yùn)行結(jié)果見圖8-16.8-168.3布局管理器Java語言將GUI組件放置在容器內(nèi)和布局管理分成功能獨(dú)立的兩部分。容器中可以放置GUI組件,但是容器本身并不管理已容納GUI組件的布局。而利用布局管理器來管理GUI組件在容器中的布局。實(shí)際上,Java語言的java.awt包中定義了一個布局管理器接口LayoutManager,通過實(shí)現(xiàn)該接口可以實(shí)現(xiàn)組件的布局。常用實(shí)現(xiàn)LayoutManager布局管理器接口的常用類有FlowLayout、BorderLayout、CardLayout、GridLayout、GridBagLayout。以及利用null布局管理方式實(shí)現(xiàn)手工布局。8.3布局管理器1.流布局管理器類FlowLayout是流布局管理器。這種管理器的特點(diǎn)是,組件在容器內(nèi)依照指定方向按照組件添加的順序依次加入到容器中。這個指定方向取決于FlowLayout管理器的組件方向?qū)傩浴T搶傩杂袃煞N可能:從左到右方向和從右向左方向。在默認(rèn)情況下,這個指定方向是從左到右的。許多的容器采用流布局管理器作為默認(rèn)布局管理方式,如JPanel。8.3布局管理器例8.13FlowLayout的示例。程序清單見程序FlowLayoutExample.java,運(yùn)行結(jié)果見圖8-17.圖8-178.3布局管理器2.邊界布局管理器AWT包的類BorderLayout可以創(chuàng)建邊界布局管理器。邊界布局管理器可以將容器分成東(BorderLayout.EAST)、西(BorderLayout.WEST)、南(BorderLayout.SOUTH)、北(BorderLayout.NORTH)、中(BorderLayout.CENTER )五個區(qū)域,這五個區(qū)域中最多可以放置一個GUI組件。GUI組件可以按照指定的位置在這五個區(qū)域中選擇其一布局,如果沒有指定位置放置GUI組件,邊界布局管理器會將該組件放置到容器的中央位置(BorderLayout.CENTER)。邊界布局管理器也是JFrame與JApplet的默認(rèn)布局方式。8.3布局管理器8.14BorderLayout的示例。程序清單見程序BorderLayoutExample.java,運(yùn)行結(jié)果見圖8-18.圖8-188.3布局管理器3.卡片布局管理器卡片布局管理器能將容器中的組件看成不同的卡片層疊排列,每次只能顯示一張卡片。每張卡片只能容納一個組件。初次顯示時,顯示的是第一張卡片??ㄆ季止芾砥魇峭ㄟ^AWT包的類CardLayout來創(chuàng)建的。例8.15CardLayout的示例。程序清單見程序CardLayoutExample.java,運(yùn)行結(jié)果見圖8-19.圖8-198.3布局管理器4.網(wǎng)格布局管理器網(wǎng)格布局是一種常用的布局方式,將容器的區(qū)域被劃分成矩形網(wǎng)格,每個矩形大小規(guī)格一致,組件可以放置在其中的一個矩形中。Java語言中通過java.awt.GridLayout類創(chuàng)建網(wǎng)格布局管理器對象,實(shí)現(xiàn)對容器中的各組件的網(wǎng)格布局排列。具體的排列方向取決于容器的組件方向?qū)傩?,組件方向?qū)傩杂袃煞N:從左向右和從右向左。用戶可以根據(jù)實(shí)際要求進(jìn)行設(shè)定方向?qū)傩?,默認(rèn)的方向是從右向左。
8.3布局管理器例8.16GridLayout的示例。程序清單見程序GridLayoutExample.java,運(yùn)行結(jié)果見圖8-20.圖8-208.3布局管理器5.網(wǎng)格包布局管理器類GridBagLayout創(chuàng)建的網(wǎng)格包布局管理器,與網(wǎng)格布局管理器類似,它可以將容器的顯示區(qū)域分成很多矩形網(wǎng)格。不同的是,網(wǎng)格包布局管理器使每個GUI組件可以占用一個或多個矩形網(wǎng)格。為了實(shí)現(xiàn)網(wǎng)格包布局,不但需要類GridBagLayout,而且需要創(chuàng)建GridConstraints(網(wǎng)格包約束)對象。具體步驟是:(1)創(chuàng)建組件和網(wǎng)格包布局管理器對象;
(2)創(chuàng)建網(wǎng)格包約束GridBagConstraints對象,通過設(shè)置和組件有關(guān)的的GridBagConstraints對象的屬性來限定組件占據(jù)空間;
(3)然后調(diào)用GridBagLayout的setContraints()法將組件與此GridBagConstraints對象關(guān)聯(lián);
(4)最后再將各組件加入容器中。8.3布局管理器GridBagConstraints(1)GridBagConstraints對象的創(chuàng)建類GridBagConstraints提供兩個構(gòu)造方法來創(chuàng)建網(wǎng)格包約束對象:GridBagConstraints():創(chuàng)建網(wǎng)格包約束對象,所有的對象屬性采用默認(rèn)屬性。GridBagConstraints(intgridx,intgridy,intgridwidth,intgridheight,doubleweightx,doubleweighty,intanchor,intfill,Insetsinsets,intipadx,intipady):創(chuàng)建指定屬性的網(wǎng)格包約束對象。8.3布局管理器8.3布局管理器(2)GridBagConstraints對象的常見屬性在這里介紹GridBagConstraints對象的常見屬性:gridx和gridy:設(shè)置容器顯示區(qū)的左上角的位置。二者都有一個默認(rèn)值GridBagConstraints.RELATIVE。如果gridx的值為RELATIVE,表示新添的組件放置到最后添加組件的右邊;如果gridy的值為RELATIVE,則表示新添的組件放置到最后添加組件的下一行。8.3布局管理器gridwidth和gridheight:表示組件顯示區(qū)的行數(shù)和列數(shù)。它們可以直接指定函數(shù)和列數(shù)的大小,也可以選取GridBagConstraints.RELATIVE和GridBagConstraints.REMAINDER。GridBagConstraints.REMAINDER是默認(rèn)的取值,如果gridweight取它,表示新組件占據(jù)行剩余的所有空間;如果gridheight取REMAINDER,則表示新組件是當(dāng)前列的最后一個組件。至于RELATIVE值表示相對位置,即,如果gridweight取RELATIVE,表示新組件是當(dāng)前行組件的下一個組件;如果gridheight取RELATIVE,表示新組件是當(dāng)前列組件的后一個。8.3布局管理器weightx和heighty:表示組件的權(quán)值,即,組件相對于其他組件的重量。它們決定了該如何處理剩余空間。weightx和weighty是0.0~1.0之間的一個double值。如果weightx取值為1.0,則表示組件會占據(jù)剩余空間的行位置;如果weighty的取值為0.0,則表示組件不占據(jù)剩余空間。沒有設(shè)定weightx,heightx
8.3布局管理器設(shè)定weightx,heightx
8.3布局管理器fill:設(shè)置組件填充方式。該屬性特指一種情況:即,組件的大小小于分配給定空間,fill屬性可以重新調(diào)整組件的大小。fill屬性可以有以下幾種:GridBagConstraints.NONE:不調(diào)整組件的大小。GridBagConstraints.HORIZONTAL:將組件在水平方向填充分配的顯示區(qū)域,但寬度不發(fā)生變化。GridBagConstraints.VERTICAL:將組件在垂直方向填充分配的顯示區(qū)域,但高度不發(fā)生變化。GridBagConstraints.BOTH:將組件在水平和垂直方向填充顯示區(qū)域。8.3布局管理器anchor當(dāng)組件小于其顯示區(qū)域時使用此字段。它可以確定在顯示區(qū)域中放置組件的位置??赡艿闹涤腥N:相對于方向的值是相對于容器的組件方向?qū)傩赃M(jìn)行解釋的,方向相對值有:PAGE_START、PAGE_END、LINE_START、LINE_END、FIRST_LINE_START、FIRST_LINE_END、LAST_LINE_START和LAST_LINE_END。相對于基線值是相對于基線進(jìn)行解釋的,相對于基線的值有:BASELINE、BASELINE_LEADING、BASELINE_TRAILING、ABOVE_BASELINE、ABOVE_BASELINE_LEADING、ABOVE_BASELINE_TRAILING、BELOW_BASELINE、BELOW_BASELINE_LEADING和BELOW_BASELINE_TRAILING。默認(rèn)值為CENTER。絕對值則不然。絕對值有:CENTER、NORTH、NORTHEAST、EAST、SOUTHEAST、SOUTH、SOUTHWEST、WEST和NORTHWEST。8.3布局管理器insets此字段指定組件的外部填充,即組件與其顯示區(qū)域邊緣之間間距的最小量。默認(rèn)值為newInsets(0,0,0,0)。ipadx和ipadyipadx此字段指定組件的內(nèi)部填充,即給組件的最小寬度添加多大的空間。組件的寬度至少為其最小寬度加上ipadx像素。ipady此字段指定內(nèi)部填充,即給組件的最小高度添加多大的空間。組件的高度至少為其最小高度加上ipady像素。8.3布局管理器GridBagLayoutlayout=newGridBagLayout();setLayout(layout);GridBagConstraintsconstraints=newGridBagConstraints();LabelstuLabel=newLabel(“學(xué)號”);constraints.gridx=0;constraints.gridy=0;constraints.gridweight=1;constraints.gridheight=1;layout.setConstraints(stuLabel,constraints);add(stuLabel);TextFieldtxtField=newTextField(10);constraints.gridx=1;constraints.gridy=0;constraints.gridweight=2;constraints.gridheight=1;layout.setConstraints(txtField,constraints);add(txtField);8.3布局管理器由于各個操作具有相似性,可以采用一個方法解決限制條件的設(shè)置。publicvoidsetConstraints(Component,intx,inty,intwidth,intheight){……}8.3布局管理器例8.17網(wǎng)格包布局的示例。程序清單見程序GridBagLayoutExample.java,運(yùn)行結(jié)果見圖8-21.圖8-218.3布局管理器6.null布局管理器null布局管理器是空的管理器,這意味著,用戶可以利用GUI組件對象的方法setBounds()自行設(shè)定各個組件的位置和大小。一般,GUI組件具有setBounds()有兩種形式:voidsetBounds(intx,inty
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木工裝修合同
- 保健按摩店裝修合同監(jiān)管費(fèi)
- 水利行業(yè)水資源管理與水生態(tài)修復(fù)方案
- 專利代理合同書年
- 三農(nóng)村社會組織創(chuàng)新發(fā)展方案
- 留學(xué)服務(wù)合同
- 品牌營銷策略及市場分析作業(yè)指導(dǎo)書
- 數(shù)字化工廠設(shè)計(jì)與實(shí)施作業(yè)指導(dǎo)書
- 旅游景點(diǎn)智能化管理系統(tǒng)的設(shè)計(jì)與實(shí)施計(jì)劃書
- 三農(nóng)地區(qū)基礎(chǔ)設(shè)施建設(shè)規(guī)劃方案
- 2025民政局離婚協(xié)議書范本(民政局官方)4篇
- 島津氣相色譜培訓(xùn)
- 2024年03月四川農(nóng)村商業(yè)聯(lián)合銀行信息科技部2024年校園招考300名工作人員筆試歷年參考題庫附帶答案詳解
- 小學(xué)一年級數(shù)學(xué)上冊口算練習(xí)題總匯
- 睡眠專業(yè)知識培訓(xùn)課件
- 潤滑油知識-液壓油
- 2024年江蘇省中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 臨床思維能力培養(yǎng)
- 人教版高中物理必修第三冊第十章靜電場中的能量10-1電勢能和電勢練習(xí)含答案
- 《工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)》(2002年修訂本)
- 中國宗教文化 中國古代宗教文化的特點(diǎn)及現(xiàn)代意義
評論
0/150
提交評論