Java語言程序設計教程第2版 邱桃榮 主編 第8章 GUI編程初步新_第1頁
Java語言程序設計教程第2版 邱桃榮 主編 第8章 GUI編程初步新_第2頁
Java語言程序設計教程第2版 邱桃榮 主編 第8章 GUI編程初步新_第3頁
Java語言程序設計教程第2版 邱桃榮 主編 第8章 GUI編程初步新_第4頁
Java語言程序設計教程第2版 邱桃榮 主編 第8章 GUI編程初步新_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、在線教務輔導網(wǎng):http:/ 更多課程配套課件資源請訪問在線教務輔導網(wǎng)1第8章 GUI編程初步學習導言開發(fā)具有良好的GUI(Graphics User Interface:圖形用戶界面)的軟件無疑是程序員的追求目標。在Java語言中提供了大量的類來實現(xiàn)界面設計??梢詫崿F(xiàn)圖形界面主要有AWT工具集和Swing工具集。本章將詳細介紹Swing工具集常用的GUI組件、設置觀感效果、以及AWT的布局管理等內容。3課程結構8.1 GUI編程概述8.2 Swing的常用組件8.3 布局管理器8.4 觀感效果48.1 GUI編程概述1. Java的基礎類Java基礎類(Java Foundation Cla

2、sses)是構建圖形用戶界面的圖形框架。Java基礎類是由如下的類庫構成:(1)抽象窗口工具集:AWT;(2)Swing組件;(3)支持剪貼板的數(shù)據(jù)傳送;(4)Java2D,高級圖形圖象處理;(5)服務殘疾人的輔助應用接口。58.1 GUI編程概述2. AWT 概述AWT是Abstract Window Toolkit的縮寫,稱為抽象窗口工具集,是Java基礎類中一份子。AWT提供了構建用戶界面組件,例如菜單、按鈕、文本框、對話框、復選框等,可以根據(jù)圖形界面組件的輸入實現(xiàn)事件處理。AWT允許繪制圖形、處理圖像、控制用戶界面的布局、字體顯示以及提供利用本地剪貼板實現(xiàn)數(shù)據(jù)傳送類等輔助性質的類。68

3、.1 GUI編程概述3. Swing 概述Swing是Java基礎類中的一部分,定義了具有可插入觀感(Look-and-Feel)的組件。Swing是純Java語言實現(xiàn)的,基于JDK1.1“輕重量”用戶界面框架,并不依賴本地的工作平臺。Swing具有和AWT同性質的組件,如按鈕等。從命名的角度看,Swing組件都第一個字母標有一個”J”,比如AWT按鈕組件命名為Button,而Swing的按鈕組件命名為JButton. Swing還定義了其他具體應用的組件,如樹組件、表組件、拾取列表組件等 .78.1 GUI編程概述Swing組件采用了一種MVC的設計范式,即“模型-視圖-控制”(Model-

4、View-Controller),其中模型用來保存內容,視圖用來顯示內容,控制器用來控制用戶輸入。 88.1 GUI編程概述4.Swing組件和AWT組件的比較與AWT組件比較,最大區(qū)別在于Swing組件是由純Java代碼構成,沒有任何本地代碼。由于這一特性,使得Swing組件具有比AWT更多的優(yōu)勢,具體體現(xiàn)在以下幾個方面:Swing的標簽和按鈕組件可以顯示文本和圖片,而不是象AWT的同性質組件一樣只可以顯示文本;Swing可以實現(xiàn)用戶定義組件的外觀,而AWT組件的外觀取決于本地的操作系統(tǒng);Swing具有良好的擴展性,用戶可以擴展已有組件,定義新組件,AWT的擴展性差。98.1 GUI編程概述

5、1. JFrame組件JFrame組件定義的是框架窗口??蚣艽翱谑且环N頂層窗口,不能包含在其他窗口的窗口。這種窗口與用JWindow組件定義的窗口有明顯不同,框架窗口是指具有標題欄、邊界的窗口,而用JWindow組件創(chuàng)建的窗口是無標題和邊界的窗口。在JFrame組件的窗口的標題欄上,具有可以控制標題窗口大小的圖標。通常用JFrame創(chuàng)建的框架窗口容納其他組件,如按鈕、標簽、文本框等。 108.2 Swing的常用組件(1)JFrame的創(chuàng)建JFrame():創(chuàng)建一個空的框架窗口。JFrame(String title):創(chuàng)建一個標題為title的窗口。(2)JFrame的常用方法JFrame的

6、常用方法見表8-2。例8.1 JFrame的示例。程序清單見JFrameExample .java,運行結果見圖8-2圖8-2118.2 Swing的常用組件2.標簽(JLabel)標簽組件是用于顯示文本信息、或圖標、或二者兼而有之。JLabel組件不會對用戶的輸入發(fā)生反應,即,對JLabel組件不能編輯。標簽組件可以將顯示內容垂直或水平顯示,通常默認文本信息的顯示狀態(tài)為水平。而圖標的顯示狀態(tài)為垂直。標簽組件一般起到提示作用。128.2 Swing的常用組件(1)JLabel組件的創(chuàng)建JLabel():創(chuàng)建空標簽,無文本無圖標。JLabel(Icon image):創(chuàng)建一個具有圖標image的

7、標簽實例。JLabel(String text):創(chuàng)建一個具有文本信息text的標簽實例。JLabel(String text,int horizontalAlignment):創(chuàng)建一個具有特定字符信息text和對齊方式horizontalAlignment的標簽實例。其中,對齊方式是在SwingContants.LEFT(左對齊)、SwingContants.CENTER(居中對齊)、SwingContants.RIGHT(右對齊)、SwingConstants.LEADING(向上對齊)和SwingConstants.TRAILING(向下對齊)。JLabel(String text,Ic

8、on image,int horizontalAlignment ):創(chuàng)建具有文本text和圖標image信息的標簽實例,并且具有特定的對齊方式horizontalAlignment。138.2 Swing的常用組件(2)JLabel的常用方法JLabel的常用方法見表8-3。表8-3 JLabel的主要方法方 法功 能void setText(String)設置顯示內容 String getText()獲取顯示內容void setIcon(Icon icon)設置顯示的圖標Icon getIcon()獲取顯示的圖標void setHorizontalAlignment (int)設置沿x軸方

9、向的對齊方式int getHorizontalAlignment ()獲取沿x軸方向的對齊方式14 8.2 Swing的常用組件例8.2 JLabel創(chuàng)建的示例。程序清單見程序JLabelExample .java,運行結果見圖8-3圖8-3158.2 Swing的常用組件3.文本框(JTextField和JPasswordField)JTextField組件用于創(chuàng)建文本框。文本框是用來接受用的單行文本信息輸入的區(qū)域。通常文本框用于接受用戶信息或其他文本信息的輸入。當用戶輸入文本信息后,如果為JTextField對象添加事件處理,按回車鍵會激發(fā)一定的動作。(1)JTextField的創(chuàng)建JTe

10、xtField的構造方法常見有如下幾種:JTextField():創(chuàng)建一個空文本框。JTextField(String text):創(chuàng)建一個具有初始文本信息text的文本框。JTextField(String text,int columns):創(chuàng)建一個具有初始文本信息text以及指定列數(shù)的文本框。(2)JTextField的常用方法JTextField的常用方法見表8-4。168.2 Swing的常用組件表8-4 JTextField的主要方法方 法功 能void setText(String)設置顯示內容 String getText()獲取顯示內容void setFont(Font)設置

11、顯示文本的字體void setHorizontalAlignment (int)設置沿x軸方向的對齊方式int getHorizontalAlignment ()獲取沿x軸方向的對齊方式void setColumns(int) 設置列數(shù)int getColumns() 獲取列數(shù)Dimension getPreferredSize()獲取此文本框所需的首選大小尺寸178.2 Swing的常用組件JPasswordField是JTextField的子類,是一種特殊的文本框,也是用來接受單行文本信息的輸入的區(qū)域,但會用回顯字符串代替輸入的文本信息。因此,JPasswordField組件也稱為密碼文本

12、框。JPasswordField的默認的回顯字符是“*”,用戶可以自行設置回顯字符。(3)JPasswordField的創(chuàng)建JPasswordField的構造方法有如下幾種:JPasswordField():創(chuàng)建一個空的密碼文本框。JPasswordField(String text):創(chuàng)建一個指定初始文本信息的密碼文本框。JPasswordField(String text,int columns):創(chuàng)建一個指定文本和列數(shù)的密碼文本框。JPasswordField(int columns):創(chuàng)建一個指定列數(shù)的密碼文本框。188.2 Swing的常用組件(4)JPasswordField的常用

13、方法JPasswordField是JTextField的子類,所以JPasswordField也具有和JTextField類似名稱和功能的方法,因此,該組件也具有表8-4的方法。此外,它還具有自己的獨特方法,具體見表8-5。表8-5 JPasswordField的主要方法方 法功 能boolean echoCharIsSet()獲取設置回顯字符的狀態(tài) void setEchoChar(char)設置回顯字符char getEchoChar()獲取回顯字符char getPassword()獲取組件的文本例8.3 JTextField和JPasswordField的示例。程序清單見程序JText

14、FieldExample.java,運行結果見圖8-4圖8-4198.2 Swing的常用組件208.2 Swing的常用組件5.文本區(qū)(JTextArea)JTextArea組件是文本區(qū)組件。它與JTextField一樣能接受文本信息的輸入和顯示。但是與JTextField組件不同的是,JTextArea對象可以多行輸入與顯示,突破了JTextField的單行的限制。但是,如果文本信息的行數(shù)超過文本區(qū)限定的行數(shù),超出的文本信息不能顯示。為了解決這個問題,可以借助JScrollPane滾動窗格組件。將文本區(qū)放置到滾動窗格中,就可以實現(xiàn)超出文本信息的滾動輸出。21 8.2 Swing的常用組件(

15、1)JTextArea的創(chuàng)建JTextArea的構造方法有如下幾種:JTextArea():創(chuàng)建一個空文本區(qū)。JTextArea(int rows,int columns):創(chuàng)建一個指定行數(shù)和列數(shù)的文本區(qū)。JTextArea(String text):創(chuàng)建一個具有初始顯示內容的文本區(qū)。JTextArea(String text,int rows,int columns):創(chuàng)建一個指定行數(shù)和列數(shù)具有初始文本信息的文本區(qū)。(2)JTextArea的常用方法JTextArea的常用方法見表8-6。 22 8.2 Swing的常用組件表8-6 JTextArea的主要方法方 法功 能void setC

16、olumns(int)設置列數(shù)int getColumns()獲取列數(shù)void setRows(int)設置行數(shù)int getRows()獲取行數(shù)void setFont(Font)設置字體void insert(String,int)將指定文本插入到指定位置void append(String)尾部添加文本信息int getLineCount()獲取文本區(qū)包含的行數(shù)void setEditable(boolean)設置可寫狀態(tài)boolean isEditable()獲取可寫狀態(tài)238.2 Swing的常用組件例8.4 JTextArea的示例。程序清單見程序JTextAreaExample

17、.java,運行結果見圖8-5.圖8-5248.2 Swing的常用組件6.按鈕(JButton)JButton是用來創(chuàng)建命令按鈕。JButton對象具有這樣的功能:當用戶按下命令按鈕,會激發(fā)一定的動作。JButton創(chuàng)建的按鈕可以具有圖標和文本信息的內容,通過它們可以有效地提示及幫助用戶操作。(1) JButton的創(chuàng)建JButton常用的構造方法有如下幾種:JButton():創(chuàng)建一個空按鈕。JButton(String text):創(chuàng)建一個具有文本提示的按鈕。JButton(Icon icon):創(chuàng)建一個具有圖標提示的按鈕。JButton(String text,Icon icon):創(chuàng)

18、建一個具有文本和圖標的按鈕。(2) JButton的常用方法JButton的常用方法見表8-7。 258.2 Swing的常用組件例8.5 JButton的示例。程序清單見程序JButtonExample .java,運行結果見圖8-6,8-7,8-8.圖8-6圖8-7圖8-8表8-7 JButton的主要方法方 法功 能void setText(String)設置文本String getText()獲取文本void setPressedIcon(Icon)設置按下的圖標Icon getPressedIcon()獲取按下的圖標void setRolloverIcon(Icon)設置翻滾圖標Ic

19、on getRolloverIcon()獲取翻滾圖標void setMnemonic(int)設置快捷鍵int getMnemonic()獲取快捷鍵void setHorizontalAlignment (int)設置沿x軸方向的對齊方式int getHorizontalAlignment ()獲取沿x軸方向的對齊方式268.2 Swing的常用組件7.復選框和單選框(JCheckBox和JRadioButton)JCheckBox組件可以用來創(chuàng)建具有文本和圖標的復選框。這種復選框具有來“選中”或“取消選中”狀態(tài),可以通過用戶的選擇來實現(xiàn)。通常,用多個復選框作為一組來表示多種組合條件,用戶可以

20、同時選擇多個復選框。 JRadioButton組件可以用來創(chuàng)建具有文本和圖標的單選按鈕,和JCheckBox組件一樣,可以表示“選中”或“取消選中”狀態(tài)??梢远x一個或多個單選按鈕添加到一個ButtonGroup按鈕組作為整體處理,只不過在任何情況下,只有一個單選按鈕能處于“選中”狀態(tài),其他單選按鈕處于“非選中”狀態(tài)中。一般,定義多個單選按鈕來表示多個條件選擇一種的情況。278.2 Swing的常用組件(1)JCheckBox的創(chuàng)建JCheckBox的構造方法有如下幾種:JCheckBox():創(chuàng)建一個無文本圖標的未選的復選框。JCheckBox(Icon icon):創(chuàng)建一個指定圖標未選的復

21、選框。JCheckBox(Icon icon, boolean selected):創(chuàng)建一個指定圖標指定狀態(tài)的復選框。JCheckBox(String text):創(chuàng)建一個指定文本信息的復選框。JCheckBox(String text,boolean selected):創(chuàng)建一個指定文本信息指定狀態(tài)的復選框。JCheckBox(String text,Icon icon):創(chuàng)建一個指定文本指定圖標的復選框。JCheckBox(String text,Icon icon,boolean selected):創(chuàng)建一個指定文本圖標以及指定狀態(tài)的復選框。288.2 Swing的常用組件(2)JChe

22、ckBox的常用方法JCheckBox的常用方法見表8-8。 表8-8 JCheckBox的主要方法方 法功 能void setText(String)設置文本String getText()獲取文本void setIcon(Icon)設置圖標Icon getIcon()獲取圖標void setSelected(boolean)設置選擇狀態(tài)boolean getSelected()獲取選擇狀態(tài)void setSelectedIcon(Icon)設置選中的圖標Icon getSelectedIcon()獲取選中的圖標298.2 Swing的常用組件(3) JRadioButton的創(chuàng)建JRadi

23、oButton的構造方法有如下幾種:JRadioButton():創(chuàng)建一個初始未選擇無文本無圖標的單選按鈕。JRadioButton(Icon icon):創(chuàng)建一個指定圖標的單選按鈕。JRadioButton(Icon icon, boolean selected):創(chuàng)建一個指定圖標指定選擇狀態(tài)的單選按鈕。JRadioButton(String text):創(chuàng)建一個指定文本未選的單選按鈕。JRadioButton(String text,boolean selected):創(chuàng)建一個指定文本指定選擇狀態(tài)的單選按鈕。JRadioButton(String text,Icon icon):創(chuàng)建一個指

24、定文本指定圖標的單選按鈕。JRadioButton(String text,Icon icon,boolean selected):創(chuàng)建一個指定文本指定圖標和選擇狀態(tài)的單選按鈕308.2 Swing的常用組件(4) JRadioButton的常用方法JRadioButton的常用方法見表8-9。表8-9 JRadioButton的主要方法方 法功 能void setText(String)設置文本String getText()獲取文本void setIcon(Icon)設置圖標Icon getIcon()獲取圖標void setSelected(boolean)設置選擇狀態(tài)boolean g

25、etSelected()獲取選擇狀態(tài)void setSelectedIcon(Icon)設置選中的圖標Icon getSelectedIcon()獲取選中的圖標318.2 Swing的常用組件例8.6 JCheckBox和JRadioButton的示例。程序清單見程序JCheckBoxJRadioButtonExample .java,運行結果見圖8-9.圖8-9328.2 Swing的常用組件8.組合框(JComboBox)JComboBox組件用來創(chuàng)建組合框對象。一般,根據(jù)組合框是否可編輯的狀態(tài),可以將組合框分成兩種常見的外觀??删庉嫚顟B(tài)外觀是視為文本框和下拉列表的組合,不可編輯狀態(tài)的外觀

26、可視為按鈕和下拉列表的組合。在按鈕或文本框的右邊有一個帶有三角符號的下拉按鈕。用戶可以點擊該下拉按鈕,可以出現(xiàn)一個內容列表。這也是組合框的得名。組合框通常用于從列表的“多個項目中選擇一個”的操作。338.2 Swing的常用組件(1) JComboBox的創(chuàng)建JComboBox的構造方法有如下幾種:JComboBox():創(chuàng)建一個默認模型的組合框。JComboBox(ComboBoxModel aModel):創(chuàng)建一個指定模型的組合框。JComboBox(Object items):創(chuàng)建一個具有數(shù)組定義列表內容的組合框。(2)JComboBox的常用方法JComboBox的常用方法見表8-10

27、。348.2 Swing的常用組件表8-10 JComboBox的主要方法方 法功 能void addItemt(Object)添加項目void removeItem(Object)移除項目Object getItemAt(int)獲取指定索引的項目void setMaximumRowCount()設置最大的顯示行數(shù)int getMaximumRowCount()獲取最大的顯示行數(shù)void setSelectedItem(Object)設置選中的項目void setSelectedIndex(int)設置選中索引號的項目boolean isEditable()獲取編輯狀態(tài)void setEdi

28、table(boolean)設置編輯狀態(tài)void showPopup()顯示彈出的窗口358.2 Swing的常用組件例8.7 JComboBox的示例。程序清單見程序JComboBoxExample .java,運行結果見圖8-10.圖8-10368.2 Swing的常用組件8.列表(JList)JList組件用于定義列表,允許用戶選擇一個或多個項目。與JTextArea類似,JList本身不支持滾動功能,如果要顯示超出顯示范圍的項目,可以將JList對象放置到滾動窗格JScrollPane 對象中,便可以為列表對象實現(xiàn)滾動操作。378.2 Swing的常用組件(1)JList的創(chuàng)建JLis

29、t的構造方法如下:JList():創(chuàng)建一個空模型的列表JList(ListModel dataModel):創(chuàng)建一個指定模型的列表。JList(Object listdatas):創(chuàng)建一個具有數(shù)組指定項目內容的列表。(2)JList的常用方法JList的常用方法見表8-11。388.2 Swing的常用組件表8-11 JList的主要方法方 法功 能int getFirstVisibleIndex()獲取第一個可見單元的索引void setFirstVisibleIndex(int)設置第一個可見單元的索引int getLastVisibleIndex()獲取最后一個可見單元的索引void s

30、etLastVisibleIndex(int)設置最后一個可見單元的索引int getSelectedIndex()獲取第一個已選的索引void setSelectedIndex(int)設置第一個已選的索引Object getSelectedValue()獲取第一個已選的對象void setSelectedValue(Object)設置第一個已選的對象Object getSelectedValues()獲取已選的所有對象Color getSelectionBackground()獲取選中項目的背景色void setSelectionBackground()設置選中項目的背景色Color ge

31、tSelectionForeground()獲取選中項目的前景色void setSelectionForeground()設置選中項目的前景色int getVisibleRowCount()獲取首選可見行數(shù)void setVisibleRowCount()設置首選可見行數(shù)void setListData(Object)設置列表項目void setListData(Vector)設置列表項目398.2 Swing的常用組件例8.8 JList的示例。程序清單見程序JListExample .java,運行結果見圖8-11.圖8-11408.2 Swing的常用組件9.面板(JPanel)JPan

32、el組件定義的面板實際上是一種容器組件,用來容納各種其他輕量級的組件。此外,用戶還可以用這種面板容器繪制圖形。(1)JPanel的構造方法如下所示:JPanel():創(chuàng)建具有雙緩沖和流布局(FlowLayout)的面板。JPanel(LayoutManager layout):創(chuàng)建具有指定布局管理器的面板。418.2 Swing的常用組件(2) JPanel的常用方法JPanel的常用方法見表8-12。表8-12 JPanel的主要方法方 法功 能void add(Component)添加組件void add(Component,int)添加組件至索引指定位置void add(Componen

33、t,Object)按照指定布局限制添加組件void add(Component,Object,int)按照指定布局管理限制添加組件至指定位置void remove(Component) 移除組件void remove(int) 移除指定位置的組件void removeAll() 移除所有組件void paintComponent(Graphics)繪制組件void repaint()重新繪制void setPreferredSize(Dimension)設置最佳尺寸Dimension getPreferredSize()獲取最佳尺寸428.2 Swing的常用組件例8.9 JPanel的示例。

34、程序清單見程序JPanelExample .java,運行結果見圖8-12.圖8-12438.2 Swing的常用組件10.菜單制作許多軟件都提供菜單方便用戶操作。Java語言也提供了對菜單的支持。在Java語言中,菜單組件是特殊的組件群,菜單并不依托其他容器組件存在,菜單依賴于菜單條而存在。但是,菜單條必須放置到容器組件中才能顯示。通常容器組件具有方法setJMenuBar()來實現(xiàn)這一功能。菜單條(JMenuBar)中包含若干菜單、而菜單(JMenu)中又容納了各種菜單項。其中,菜單項包括三種形式:普通菜單項(JMenuItem)、復選框菜單項(JCheckBoxMenuItem)和單選按

35、鈕菜單項(JRadioButtonMenuItem)。對于類JCheckBoxMenuItem和類JRadioButtonMenuItem是JMenuItem的子類,表示了特殊形式的菜單項。448.2 Swing的常用組件 此外,還有一種特殊形式的菜單,就是彈出菜單(JPopupMenu),也稱為快捷菜單。在使用某些軟件時,往往單擊鼠標右鍵,會出現(xiàn)一個彈出菜單,彈出菜單中包含各種菜單項。不過,彈出菜單并不依托菜單條,它依賴于其他容器組件而存在。458.2 Swing的常用組件(1)JMenuBarJMenuBar用來實現(xiàn)菜單條,它的構造方法如下: JMenuBar():創(chuàng)建空的菜單條。JMen

36、uBar的常用方法見表8-13。表8-13 JMenuBar的主要方法方 法功 能JMenu add(JMenu)添加菜單至菜單條JMenu getMenu(int)獲取指定位置的菜單int getMenuCount()獲取菜單的個數(shù)468.2 Swing的常用組件(2)JMenu和JPopupMenu JMenu是用來創(chuàng)建菜單對象,它的構造方法有:JMenu():創(chuàng)建空的菜單。JMenu(String string):創(chuàng)建指定文本的菜單。JMenu(String s, boolean b):創(chuàng)建指定文本的菜單,并指定菜單的顯示方式是否是分離式的。JMenu的常用方法見表8-14。478.2

37、Swing的常用組件表8-14 JMenu的主要方法方 法功 能JMenuItem add(Action)添加帶有特定動作的菜單項Component add(Component)添加組件至菜單Component add(Component,int)在指定位置添加組件JMenuItem add(JMenuItem)添加菜單項JMenuItem add(String) 添加帶有文本信息的菜單項void addSeparator()添加分離線JPopupMenu getPopupMenu()獲取與菜單相關聯(lián)的彈出菜單JMenuItem insert(JMenuItem,int)將菜單項插入到指定位置

38、boolean isPopupMenuVisible()獲取與菜單相關聯(lián)的彈出菜單可見boolean isSelected()獲取菜單選擇狀態(tài)void removeAll()移除所有的菜單項void addAccelerator(KeyStroke)增加快捷鍵void setDelay(int)設置彈出菜單出現(xiàn)的延遲時間488.2 Swing的常用組件JPopupMenuJPopupMenu的構造方法如下所示:JPopupMenu():創(chuàng)建無激發(fā)的彈出菜單。JPopupMenu(String):創(chuàng)建具有特定標題的彈出菜單。JPopupMenu的常用方法見表8-15。表8-15 JPopupMe

39、nu的主要方法方 法功 能JMenuItem add(Action)添加帶有特定動作的菜單項JMenuItem add(JMenuItem)添加菜單項JMenuItem add(String) 添加帶有文本信息的菜單項void addSeparator()添加分離線void show(Component,int,int)在指定組件中的指定位置顯示彈出菜單boolean isVisible()獲取彈出菜單可見性void pack()按顯示所有組件的最小尺寸排列void remove (int)移除指定位置的菜單項498.2 Swing的常用組件(3) JMenuItem、JCheckBoxMen

40、uItem和JRadioButtonMenuItemJMenuItemJMenuItem的構造方法有如下幾種:JMenuItem():創(chuàng)建一個空菜單項。JMenuItem(String text):創(chuàng)建一個具有特定文本信息的菜單項。JMenuItem(Icon icon):創(chuàng)建一個具有特定圖標的菜單項。JMenuItem(String text,Icon icon):創(chuàng)建一個具有指定文本和特定圖標的菜單項。JMenuItem(String text,int mnemonic):創(chuàng)建一個具有特定文本和鍵盤助憶符的菜單項。 JMenuItem的常用方法見表8-16。508.2 Swing的常用組件

41、表8-16 JMenuItem的主要方法方 法功 能KeyStroke getAccelerator()獲取快捷鍵void setAccelerator(KeyStroke)設置快捷鍵void init(String,icon) 用指定文本和圖標初始化菜單項void setEnabled(boolean)設置菜單的啟動或禁止狀態(tài)MenuElement getSubElements()獲取菜單的子菜單項518.2 Swing的常用組件JCheckBoxMenuItemJCheckBoxMenuItem的構造方法有如下幾種:JCheckBoxMenuItem():創(chuàng)建空復選框菜單項。JCheckB

42、oxMenuItem(Icon icon):創(chuàng)建具有特定圖標的未選定復選框菜單項。JCheckBoxMenuItem(String text):創(chuàng)建具有特定文本信息的未選定的復選框菜單項。JCheckBoxMenuItem(String text,boolean b):創(chuàng)建具有特定文本信息和指定選擇狀態(tài)的復選框菜單項。JCheckBoxMenuItem(String text,Icon icon):創(chuàng)建具有特定文本和圖標的復選框菜單項,并且該菜單項為未選狀態(tài)。JCheckBoxMenuItem(String text,Icon icon,boolean b):創(chuàng)建具有特定文本和指定選擇狀態(tài)的復

43、選框。528.2 Swing的常用組件JRadioButtonMenuItemJRadioButtonMenuItem的構造方法有如下幾種:JRadioButtonMenuItem():創(chuàng)建一個空按鈕菜單項。JRadioButtonMenuItem(Icon icon):創(chuàng)建一個特定圖標的單選按鈕菜單項。JRadioButtonMenuItem(String text):創(chuàng)建具有特定文本的單選按鈕菜單項。JRadioButtonMenuItem(String text,Icon icon):創(chuàng)建具有特定文本和圖標的單選菜單項。JRadioButtonMenuItem(String text,b

44、oolean b):創(chuàng)建具有特定文本以及選定狀態(tài)的單選菜單項。JRadioButtonMenuItem(String text,Icon,boolean b):創(chuàng)建具有特定文本、圖標以及選定狀態(tài)的單選菜單項。538.2 Swing的常用組件例8.10 菜單制作的示例。程序清單見程序MenuProducerExample .java,運行結果見圖8-13,8-14. 8-13 運行菜單 8-14運行彈出菜單548.2 Swing的常用組件11. JTree樹形層次結構是一種常用的圖形界面形式。通常在文件目錄、書目索引、商品目錄等應用中都會使用樹形層次結構。Java語言中的Swing包提供一種高級

45、組件JTree。通過它可以直接實現(xiàn)樹形層次結構。Java中樹形層次結構存在特殊性:有且只有一個節(jié)點是根節(jié)點(沒有父節(jié)點),每一個節(jié)點只有一個父節(jié)點。558.2 Swing的常用組件JTree組件與其他的Swing組件一樣,采用MVC模型。為了實現(xiàn)一種樹形結構,首先是用TreeNode接口定義樹的節(jié)點。然后,將利用已有的樹節(jié)點創(chuàng)建樹的模型。Swing工具集中提供了一個默認的樹模型DefaultTreeModel,根據(jù)樹的模型創(chuàng)建出樹形結構。 (1)JTree的創(chuàng)建JTree的對象可以通過下列的常用的構造方法來實現(xiàn):JTree():返回帶有示例模型的 JTree。 JTree(TreeModel

46、newModel):返回 JTree 的一個實例,它顯示根節(jié)點 - 使用指定的數(shù)據(jù)模型創(chuàng)建樹。 JTree(TreeNode root):返回一個 JTree,指定的 TreeNode 作為其根,它顯示根節(jié)點。 JTree(TreeNode root, boolean asksAllowsChildren):返回一個 JTree,指定的 TreeNode 作為其根,它用指定的方式顯示根節(jié)點,并確定節(jié)點是否為葉節(jié)點。 568.2 Swing的常用組件例8.11 創(chuàng)建簡單樹形結構的示例。程序清單見程序JTreeExample .java,運行結果見圖8-15.8-15578.2 Swing的常用組

47、件JTableSwing工具集的JTable組件可以實現(xiàn)二維表格。該組件是一種遵循MVC模型的高級組件,它利用接口TableModel定義表格模型,實現(xiàn)獲取表格數(shù)據(jù)代理。JTable確定表格模型TableModel的視圖。一般,建立簡單的二維表格可以通過實現(xiàn)TableModel接口的DefaultTableModel類來定義表格模型。然后根據(jù)表格模型創(chuàng)建表格。588.2 Swing的常用組件JTable對象的創(chuàng)建創(chuàng)建JTable對象可以通過下列的構造方法實現(xiàn):(1)JTable():構造默認的 JTable,使用默認的數(shù)據(jù)模型、默認的列模型和默認的選擇模型對其進行初始化。 (2)JTable(

48、int numRows, int numColumns):使用 DefaultTableModel 創(chuàng)建具有空單元格的 numRows 行和 numColumns 列的 JTable對象。 (3)JTable(Object rowData, Object columnNames):創(chuàng)建JTable對象,用來顯示二維數(shù)組 rowData 中的值,其列名稱為 columnNames。 (4)JTable(TableModel model):創(chuàng)建JTable對象,使用 model 作為數(shù)據(jù)模型、默認的列模型和默認的選擇模型對其進行初始化。 (5)JTable(TableModel model, Ta

49、bleColumnModel cm):創(chuàng)建JTable對象,使用 model 作為數(shù)據(jù)模型、cm 作為列模型和默認的選擇模型對其進行初始化。 598.2 Swing的常用組件例8.12 創(chuàng)建簡單表格的示例。程序清單見程序JTableExample .java,運行結果見圖8-16.8-16608.3 布局管理器Java語言將GUI組件放置在容器內和布局管理分成功能獨立的兩部分。容器中可以放置GUI組件,但是容器本身并不管理已容納GUI組件的布局。而利用布局管理器來管理GUI組件在容器中的布局。實際上,Java語言的java.awt包中定義了一個布局管理器接口LayoutManager,通過實現(xiàn)

50、該接口可以實現(xiàn)組件的布局。常用實現(xiàn)LayoutManager布局管理器接口的常用類有FlowLayout、BorderLayout、CardLayout、GridLayout、GridBagLayout。以及利用null布局管理方式實現(xiàn)手工布局。618.3 布局管理器1.流布局管理器類FlowLayout是流布局管理器。這種管理器的特點是,組件在容器內依照指定方向按照組件添加的順序依次加入到容器中。這個指定方向取決于FlowLayout管理器的組件方向屬性。該屬性有兩種可能:從左到右方向和從右向左方向。在默認情況下,這個指定方向是從左到右的。許多的容器采用流布局管理器作為默認布局管理方式,如J

51、Panel。628.3 布局管理器例8.13 FlowLayout的示例。程序清單見程序FlowLayoutExample.java,運行結果見圖8-17.圖8-17638.3 布局管理器2.邊界布局管理器AWT包的類BorderLayout可以創(chuàng)建邊界布局管理器。邊界布局管理器可以將容器分成東(BorderLayout.EAST)、西(BorderLayout.WEST)、南(BorderLayout.SOUTH)、北(BorderLayout.NORTH)、中(BorderLayout.CENTER)五個區(qū)域,這五個區(qū)域中最多可以放置一個GUI組件。GUI組件可以按照指定的位置在這五個區(qū)域

52、中選擇其一布局,如果沒有指定位置放置GUI組件,邊界布局管理器會將該組件放置到容器的中央位置(BorderLayout.CENTER)。邊界布局管理器也是JFrame與JApplet的默認布局方式。648.3 布局管理器8.14 BorderLayout的示例。程序清單見程序BorderLayoutExample.java,運行結果見圖8-18.圖8-18658.3 布局管理器3.卡片布局管理器卡片布局管理器能將容器中的組件看成不同的卡片層疊排列,每次只能顯示一張卡片。每張卡片只能容納一個組件。初次顯示時,顯示的是第一張卡片??ㄆ季止芾砥魇峭ㄟ^AWT包的類CardLayout來創(chuàng)建的。例8.

53、15 CardLayout的示例。程序清單見程序CardLayoutExample.java,運行結果見圖8-19.圖8-19668.3 布局管理器4.網(wǎng)格布局管理器網(wǎng)格布局是一種常用的布局方式,將容器的區(qū)域被劃分成矩形網(wǎng)格,每個矩形大小規(guī)格一致,組件可以放置在其中的一個矩形中。Java語言中通過java.awt.GridLayout類創(chuàng)建網(wǎng)格布局管理器對象,實現(xiàn)對容器中的各組件的網(wǎng)格布局排列。具體的排列方向取決于容器的組件方向屬性,組件方向屬性有兩種:從左向右和從右向左。用戶可以根據(jù)實際要求進行設定方向屬性,默認的方向是從右向左。67 8.3 布局管理器例8.16 GridLayout的示例

54、。程序清單見程序GridLayoutExample.java,運行結果見圖8-20.圖8-20688.3 布局管理器5.網(wǎng)格包布局管理器類GridBagLayout創(chuàng)建的網(wǎng)格包布局管理器,與網(wǎng)格布局管理器類似,它可以將容器的顯示區(qū)域分成很多矩形網(wǎng)格。不同的是,網(wǎng)格包布局管理器使每個GUI組件可以占用一個或多個矩形網(wǎng)格。為了實現(xiàn)網(wǎng)格包布局,不但需要類GridBagLayout,而且需要創(chuàng)建GridConstraints(網(wǎng)格包約束)對象。具體步驟是:(1)創(chuàng)建組件和網(wǎng)格包布局管理器對象; (2)創(chuàng)建網(wǎng)格包約束GridBagConstraints對象,通過設置和組件有關的的GridBagConst

55、raints對象的屬性來限定組件占據(jù)空間; (3)然后調用GridBagLayout的setContraints()法將組件與此GridBagConstraints對象關聯(lián); (4)最后再將各組件加入容器中。698.3 布局管理器GridBagConstraints(1)GridBagConstraints對象的創(chuàng)建類GridBagConstraints提供兩個構造方法來創(chuàng)建網(wǎng)格包約束對象:GridBagConstraints():創(chuàng)建網(wǎng)格包約束對象,所有的對象屬性采用默認屬性。GridBagConstraints(int gridx, int gridy, int gridwidth, in

56、t gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady):創(chuàng)建指定屬性的網(wǎng)格包約束對象。708.3 布局管理器718.3 布局管理器(2)GridBagConstraints對象的常見屬性在這里介紹GridBagConstraints對象的常見屬性:gridx和gridy:設置容器顯示區(qū)的左上角的位置。二者都有一個默認值GridBagConstraints.RELATIVE。如果gridx的值為RELATIVE,表示新添的組件放置到最后添加組件

57、的右邊;如果gridy的值為RELATIVE,則表示新添的組件放置到最后添加組件的下一行。728.3 布局管理器gridwidth和gridheight:表示組件顯示區(qū)的行數(shù)和列數(shù)。它們可以直接指定函數(shù)和列數(shù)的大小,也可以選取GridBagConstraints.RELATIVE和GridBagConstraints.REMAINDER。GridBagConstraints.REMAINDER是默認的取值,如果gridweight取它,表示新組件占據(jù)行剩余的所有空間;如果gridheight取REMAINDER,則表示新組件是當前列的最后一個組件。至于RELATIVE值表示相對位置,即,如果g

58、ridweight取RELATIVE,表示新組件是當前行組件的下一個組件;如果gridheight取RELATIVE,表示新組件是當前列組件的后一個。738.3 布局管理器weightx和heighty:表示組件的權值,即,組件相對于其他組件的重量。它們決定了該如何處理剩余空間。weightx和weighty是0.01.0之間的一個double值。如果weightx取值為1.0,則表示組件會占據(jù)剩余空間的行位置;如果weighty的取值為0.0,則表示組件不占據(jù)剩余空間。沒有設定weightx,heightx 748.3 布局管理器設定weightx,heightx 758.3 布局管理器fi

59、ll:設置組件填充方式。該屬性特指一種情況:即,組件的大小小于分配給定空間,fill屬性可以重新調整組件的大小。fill屬性可以有以下幾種:GridBagConstraints.NONE:不調整組件的大小。GridBagConstraints. HORIZONTAL:將組件在水平方向填充分配的顯示區(qū)域,但寬度不發(fā)生變化。GridBagConstraints. VERTICAL:將組件在垂直方向填充分配的顯示區(qū)域,但高度不發(fā)生變化。GridBagConstraints.BOTH:將組件在水平和垂直方向填充顯示區(qū)域。768.3 布局管理器anchor當組件小于其顯示區(qū)域時使用此字段。它可以確定在顯

60、示區(qū)域中放置組件的位置。 可能的值有三種:相對于方向的值是相對于容器的組件方向屬性進行解釋的,方向相對值有:PAGE_START、PAGE_END、LINE_START、LINE_END、FIRST_LINE_START、FIRST_LINE_END、LAST_LINE_START 和 LAST_LINE_END。相對于基線值是相對于基線進行解釋的,相對于基線的值有:BASELINE、BASELINE_LEADING、BASELINE_TRAILING、ABOVE_BASELINE、ABOVE_BASELINE_LEADING、ABOVE_BASELINE_TRAILING、BELOW_BAS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論