Java程序設計案例教程(第2版)課件 單元8 Java GUI編程_第1頁
Java程序設計案例教程(第2版)課件 單元8 Java GUI編程_第2頁
Java程序設計案例教程(第2版)課件 單元8 Java GUI編程_第3頁
Java程序設計案例教程(第2版)課件 單元8 Java GUI編程_第4頁
Java程序設計案例教程(第2版)課件 單元8 Java GUI編程_第5頁
已閱讀5頁,還剩129頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

8.1.1JavaGUI編程概述8.1.2Swing簡介8.1.3布局管理器8.1SwingGUI界面圖形用戶Java語言程序設計Unit88.1.1JavaGUI編程概述

圖形用戶界面

圖形用戶界面是一種高效的人機交互界面。它通過圖形展示的方法,借助菜單、按鈕等標準界面元素和鼠標、鍵盤燈操作,幫助用戶方便地向計算機發(fā)出操作命令,并將程序運行結果以圖形的方式反饋給用戶。8.1.1JavaGUI編程概述

Java圖形用戶界面

Java圖形用戶界面(GUI,GraphicsUserInterface)設計的基礎是其所特有的兩套圖形設計工具集,即AWT(AbstrctWindowToolkit)和Swing,其中包含許多類來支持GUI設計,涉及到用戶界面組件、事件處理模型、圖形和圖像工具(包括形狀、顏色和字體類)及布局管理器(可以在窗口中對組件進行靈活地布局)。8.1.1JavaGUI編程概述

組件界面設計的核心是組件,根據(jù)其在界面中所起的作用可分為兩類:即非容器組件和容器組件。例如:

整個窗體是一個容器組件,而窗體里面的兩個按鈕(login和cancel)和用戶名輸入文本框等就是非容器組件。8.1.1JavaGUI編程概述1非容器組件

非容器組件非容器組件,是指一個可以以圖形化的方式顯示在屏幕上并能與用戶進行交互的對象,例如一個按鈕,一個標簽等。

非容器組件不能獨立地顯示出來,必須將其放在一定的載體(即容器組件)中才可以顯示出來。任何系統(tǒng)組件的使用,必須先導入其相應的類。如:importjavax.swing.JButton;JButtonbutton=newJButton();8.1.1JavaGUI編程概述1非容器組件Component類的常用方法(1)StringgetName():獲取組件的名稱。(2)voidrepaint():重繪此組件。(3)voidsetBackground(Colorc):設置組件的背景色。(4)voidsetBounds(intx,inty,intwidth,intheight):顯示組件的左頂點

坐標(x,y),長寬為width和height。(5)voidsetEnabled(booleanb):根據(jù)參數(shù)b的值啟用或禁用此組件。(6)voidsetFont(Fontf):設置組件的字體。(7)voidsetForeground(Colorc):設置組件的前景色。(8)voidsetSize(intwidth,intheight):調整組件寬度為width,高度為height。(9)voidsetVisible(booleanb):根據(jù)參數(shù)b的值顯示或隱藏此組件。8.1.1JavaGUI編程概述2容器組件

容器組件容器組件,是指能夠存放組件的組件,它可以容納多個組件,并使它們成為一個整體。

Container類Java中所有的容器直接或間接地繼承于容器類,即Container類。

實質上,容器本身也是一個組件,因此,Container類是Component類的子類,它具有組件的所有性質,但它的主要功能是容納其它組件和容器。8.1.1JavaGUI編程概述2容器組件常見的組件包括按鈕、標簽、文本框、文本區(qū)域、下拉框等,常用的容器有Frame、Panel、Applet等。Container類和Component類間存在著繼承關系。8.1.1JavaGUI編程概述2容器組件(1)Componentadd(Componentcomp):將指定組件追加到此容器的尾部。(2)voidremove(Componentcomp):從此容器中移除指定組件。(3)voidsetFont(Fontf):設置此容器的字體。(4)voidsetLayout(LayoutManagermgr):設置此容器的布局管理器。

容器類常用的方法8.1.1JavaGUI編程概述8.1.2Swing簡介8.1.3布局管理器8.1SwingGUI浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.1.2Swing簡介

AWTAWT是JavaGUI設計的基礎,但AWT僅能滿足設計簡單用戶圖形界面需求,無法滿足GUI編程日益豐富的功能需求,比如AWT缺少剪貼板、打印支持、鍵盤導航等特性,甚至不包括彈出式菜單或滾動窗格等基本元素。AWT組件基本屬于重質組件(weightcomponent),即效果依賴于系統(tǒng)平臺。

SwingSwing組件屬于輕質組件(lightcomponent),即組件效果完全獨立于系統(tǒng)平臺。Swing組件是由純Java實現(xiàn)的,Swing組件都是AWT的Container類的直接或者間接子類。8.1.2Swing簡介部分Swing組件與AWT組件的關系所有的Swing組件都被定義在javax.swing包中,包括兩種類型的組件:容器(如JFrame,JApplet,JDialog和JPanel).非容器組件(如JButton,JLabel)。8.1.1JavaGUI編程概述8.1.2Swing簡介8.1.3布局管理器8.1SwingGUI浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.1.3布局管理器

布局的作用布局的作用在于當設計者往一個容器內部添加了若干組件后,能夠把這些組件合理美觀地排列成一個整體。

Java布局管理器Java把組件布局任務交由布局管理器(LayoutManager)來執(zhí)行。

常見的布局管理器有:FlowLayout、BorderLayout、

GridLayout、CardLayout8.1.3布局管理器1FlowLayout(流式布局管理器)

FlowLayout是Panel類型容器的默認布局管理器。它的布局效果,即組件在容器中按加入順序逐行定位,行內從左到右,一行滿后換行,默認對齊方式為居中對齊。常用的構造方法(1)publicFlowLayout():默認的對齊方式。(2)publicFlowLayout(intalign):創(chuàng)建FlowLayout并設置對齊方式,align為方位常量。(3)publicFlowLayout(intalign,inthgap,intvgap):創(chuàng)建FlowLayout并設置對齊方式,

組件的垂直和水平間距。三個方位常量FlowLayout.LEFT(左對齊)、FlowLayout.RIGHT(右對齊)、FlowLayout.CENTER(居中對齊)。8.1.3布局管理器2BorderLayout(邊界布局管理器)

BorderLayout是Window及子類(Frame,Dialog)的默認布局管理器。它的組件布局效果,即將整個容器分為:東,西,南,北,中(East,West,South,North,Center)五部分,組件只能被添加到指定的區(qū)域,默認加的Center區(qū)域,每個區(qū)域只能加入一個組件。東、西為垂直縮放,南、北為水平縮放。常用的構造方法(1)publicBorderLayout():創(chuàng)建默認布局管理器。(2)publicBorderLayout(inth,intv):指定水平和垂直間距。五個方位常量BorderLayout.EAST(內容窗格的東邊)、BorderLayout.WEST(內容窗格的西邊)、BorderLayout.NORTH(內容窗格的北邊)、BorderLayout.SOUTH(內容窗格的南邊)、BorderLayout.CENTER(內容窗格的中間)8.1.3布局管理器3GridLayout(網(wǎng)格布局管理器)

GridLayout布局管理器將容器區(qū)域劃分成規(guī)則的矩形網(wǎng)格,每個單元格區(qū)域大小相等。組件被順序地添加到每個單元格中,先按行從上到下,在同一行里按照從左至右填滿一行。GridLayout是一種很有效的布局管理器。常用的構造方法(1)publicGridLayout():默認設置,所有組件在同一行中,各占一列。(2)publicGridLayout(introws,intcols):指定行數(shù)和列數(shù)。(3)publicGridLayout(introws,intcols,inth,intv):指定行數(shù),列數(shù)和垂直,水平間距。8.2.1窗體和面板組件8.2.2按鈕和標簽組件8.2.3文本框和文本域組件8.2Swing基本組件浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.2.1窗體和面板組件

在Java中,容器通常又可分為兩類:頂級容器和普通容器。頂級容器,是指不允許將其置入其他容器的容器,如窗體(JFrame)。

普通容器,是指其可以容納其它小組件,而自身又可以被置入其它容器的容器,如面板(JPanel)。8.2.1窗體和面板組件1窗體(JFrame)

窗體窗體(JFrame),也稱之為框架,它是一種頂級容器。窗體通常用于開發(fā)桌面應用程序的主窗體和子窗體。它定義了一個包含標題條、系統(tǒng)菜單欄最大化/最小化按鈕及可選菜單條的完整窗體。窗體一經(jīng)定義,就會默認地被加載到系統(tǒng)屏幕上,因此窗體不能再被嵌套在另一個窗體內部。8.2.1窗體和面板組件1窗體(JFrame)窗體的內部結構一般分為四個窗格:

RootPane

LayeredPane

ContentPane

GlassPane其中內容窗格與編程的關系最為緊密,因為它是窗體添加組件的直接途徑。TitleJFrameMenuRootPaneLayeredPaneContentPaneMenuBarGlassPane8.2.1窗體和面板組件1窗體(JFrame)窗體默認的布局管理器是BorderLayout,默認組件添加位置是:

BorderLayout.CENTER。常用的構造方法(1)publicJFrame()throwsHeadlessException:構造一個不可見的新窗體。(2)publicJFrame(Stringtitle)throwsHeadlessException:

創(chuàng)建一個新的、初始不可見的、具有指定標題的Frame。8.2.1窗體和面板組件1窗體(JFrame)窗體的常用方法(1)voidsetJMenuBar(JMenuBarmenubar):設置此窗體的菜單欄。(2)publicvoidsetLayout(LayoutManagermanager):設置LayoutManager。(3)Componentadd(Componentcomp):將指定組件追加到此容器的尾部。(4)ContainergetContentPane():返回此窗體的ContentPane對象。(5)ContainergetJMenuBar():返回此窗體上設置的菜單欄。(6)voidremove(Componentcomp):從該容器中移除指定組件。(7)staticvoidsetDefaultCloseOperation(intoperation):

設置用戶在此窗體上點擊“close”時的默認操作。(8)voidsetIconImage(Imageimage):設置要作為此窗體圖標顯示的圖像。8.2.1窗體和面板組件2面板(JPanel)

面板面板(JPanel),是一種有效的普通容器。面板通常可以裝載一些小組件(如按鈕、標簽等),同時它又可以容納其它面板。Java中一種常見的GUI設計模式就是把小組件置于面板中,再把面板加載到窗體的內容窗格(ContentPane)中。JPanel的缺省布局管理器為流式布局管理器。面板(JPanel)的重要構造方法:(1)publicJPanel():創(chuàng)建一個具有默認流式布局管理器的面板。(2)publicJPanel(LayoutManagerlayout):創(chuàng)建一個指定布局管理器的面板。8.2.1窗體和面板組件2面板(JPanel)窗體和面板的一個簡單應用如下:JFrameframe=newJFrame("FrameWithPanel");frame.getContentPane().setBackground(Color.CYAN);//背景設置為藍綠色JPanelpanel=newJPanel();//創(chuàng)建一個JPanel的實例panel.setBackground(Color.yellow);//將JPanel的實例背景設置為黃色frame.getContentPane().add(panel,BorderLayout.SOUTH);//將JPanel實例添加到JFrame的南側frame.setSize(300,200); frame.setVisible(true);8.2.1窗體和面板組件8.2.2按鈕和標簽組件8.2.3文本框和文本域組件8.2Swing基本組件浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.2.2按鈕和標簽組件1按鈕類(JButton)按鈕是一個常用組件,Swing中提供JButton類來創(chuàng)建一個按鈕,并且可以帶標簽或圖象,效果如圖所示。8.2.2按鈕和標簽組件1按鈕類(JButton)JButton類的主要構造方法(1)JButton(Iconicon):構造方法1,按鈕上顯示圖標。(2)JButton(Stringtext):構造方法2,按鈕上顯示字符。(3)JButton(Stringtext,Iconicon):構造方法3,按鈕上顯示圖標和字符。(4)JButton(Actiona):構造方法4,按鈕的屬性從所提供的Action中獲取。JButton類的常用方法(1)voidsetIcon(IcondefaultIcon):設置按鈕的默認圖標。(2)voidsetText(Stringtext):設置按鈕的文本。(3)voidsetEnabled(booleanb):啟用(或禁用)按鈕。8.2.2按鈕和標簽組件2標簽類(JLabel)標簽(JLabel)是最簡單的顯示靜態(tài)文本的功能組件,可以起到信息說明的作用。程序可以改變文本,但運行時用戶不能改變其顯示的文本內容,其效果如圖所示。8.2.2按鈕和標簽組件2標簽類(JLabel)JLabel組件有三種構造方法(1)JLabel():用于創(chuàng)建一個空字符的標簽組件。(2)JLabel(Stringcaption):用于創(chuàng)建一個指定字符串的標簽組件。(3)JLabel(Stringcaption,intalignment):用于創(chuàng)建一個指定字符串,并且按一定

方式對齊的標簽,其中參數(shù)alignment的值包括LEFT(左對齊)、RIGHT(右對齊)、

CENTER(居中對齊),Label默認對齊方式是左對齊方式。JLabel類的常用方法(1)voidsetText(Stringcaption):設置Label的顯示文本內容。(2)StringgetText():獲取當前的Label文本。(3)voidsetAlignment(intaligment):設置當前Label的對齊方式。8.2.2按鈕和標簽組件使用窗體、面板、按鈕、標簽等基本界面元素構成界面。知識應用8.2.1窗體和面板組件8.2.2按鈕和標簽組件8.2.3文本框和文本域組件8.2Swing基本組件浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.2.3文本框和文本域組件1單行文本框類(JTextField)單行文本框(JTextField)是一個提供單行文本編輯的組件,它用來獲取用戶輸入或者顯示可編輯的程序輸出,其效果如圖中處于窗體頂部的顯示欄所示。文本域單行文本框8.2.3文本框和文本域組1單行文本框類(JTextField)JTextField類的主要構造方法(1)JTextField():構造一個新的TextField。(2)JTextField(intcolumns):構造一個具有指定列數(shù)的新的空TextField。(3)JTextField(Stringtext):構造一個用指定文本初始化的新TextField。(4)JTextField(Stringtext,intcolumns):

構造一個用指定文本和列數(shù)初始化的TextField。8.2.3文本框和文本域組1單行文本框類(JTextField)JTextField類的常用方法(1)voidsetFont(Fontf):為文本框設置字體。(2)voidsetHorizontalAlignment(intalignment):設置文本水平對齊方式。(3)StringgetText():返回此文本框中包含的文本。(4)voidsetText(Stringt):將字符串t設置為指定文本。(5)voidsetEditable(booleanb):設置該文本框是否為可編輯。(6)publicvoidsetToolTipText(Stringtext):

設置要當鼠標置于文本框上方時,需顯示的提示信息。8.2.3文本框和文本域組1單行文本框類(JTextField)單行文本框的簡單應用如下:JTextFieldjt1=newJTextField("jt1");//創(chuàng)建一個文本框,默認文本“jt1”jt1.setFont(newFont("楷體",Font.BOLD|Font.ITALIC,16));//設置文本的字體為楷體16號且粗體斜體jt1.setHorizontalAlignment(JTextField.CENTER);//設置文本水平對齊方式為居中對齊8.2.3文本框和文本域組2文本域類(JTextArea)文本域(JTextArea),是一個可以顯示純文本的多行區(qū)域。文本域單行文本框8.2.3文本框和文本域組2文本域類(JTextArea)JTextArea的主要構造方法(1)JTextArea():構造一個新的TextArea。(2)JTextArea(introws,intcolumns):構造具有指定行列數(shù)的TextArea。(3)JTextArea(Stringtext):構造顯示指定文本的新的TextArea。JTextArea類的常用方法(1)voidinsert(Stringstr,intpos):將指定文本插入指定位置。(2)voidsetColumns(intcolumns):設置此TextArea中的列數(shù)。(3)setRows(introws):設置此TextArea的行數(shù)。(4)voidsetFont(Fontf):設置當前字體。(5)voidsetLineWrap(booleanwrap):設置文本區(qū)的換行策略。若設為true,則當行的長度大于所分配的寬度時,將換行。若設置為false,則始終不換行。8.2.3文本框和文本域組2文本域類(JTextArea)多行文本域的簡單應用如下:JTextAreajta=newJTextArea(10,15);//創(chuàng)建一個默認10行15列的文本域jta.setFont(newFont("標楷體",Font.BOLD,16));//設置字體jta.setLineWrap(true);//激活自動換行功能jta.setBackground(Color.CYAN);//設置背景顏色jta.setText("JTextArea1");//設置文本域顯示的內容jta.append("JtextArea1");//將給定文本追加到文檔結尾浙江經(jīng)貿(mào)職業(yè)技術學院案例

8-1單元8

圖形用戶界面簡單計算器案例單元Java語言程序設計主講胡堅eclipseeclipseeclipse案例

8-1:簡單計算器案例目標構建簡單計算器軟件界面(無計算功能)。案例解釋簡單計算器界面中,包含計算器的窗體、標題、數(shù)字按鈕、運算符按鈕及計算結果文本框。案例效果案例

8-1:簡單計算器實現(xiàn)思路基本步驟按實訓要求創(chuàng)建工程并配置環(huán)境設置窗體基本要素:(1)利用setTitle方法設置窗體標題"Calculator"。(2)利用setSize方法設置窗體尺寸:長200、寬200。(3)創(chuàng)建數(shù)據(jù)輸入?yún)^(qū)域面板1及計算顯示區(qū)域面板2構建數(shù)據(jù)輸入?yún)^(qū)域:(1)創(chuàng)建一個按鈕類型的數(shù)組,大小為16。(2)數(shù)組0號元素---9號元素分別存儲“按鈕0”-“按鈕9”,10號元素

---15號元素存儲各運算符。(3)創(chuàng)建數(shù)據(jù)輸入?yún)^(qū)域面板,設置其布局管理器為GridLayout(4,4)。(4)將該面板置于窗體的CENTER方位。構建計算顯示區(qū)域:(1)

創(chuàng)建一個文本框顯示計算結果,設置寬度:20。(2)將該文本框置于窗體的NORTH方位。浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.4.1復選和單選組件8.4.3對話框組件8.4.4表格和滾動窗格組件8.4Swing高級組件8.4.2下拉框和列表框組件8.4.5菜單組件8.4.1復選和單選組件1復選框組件(JCheckBox)復選框(JCheckBox)允許用戶在一組候選條目中選中若干項,選中效果如圖所示JCheckBox類的主要構造方法JCheckBox(Stringtext):創(chuàng)建一個帶文本的、最初未被選定的復選框。JCheckBox(Stringtext,booleanselected):創(chuàng)建帶文本的復選框并指定初始選定狀態(tài)。JCheckBox的常用方法booleanisSelected():檢查復選框是否被選中。voidsetSelected(booleanb):設置復選框的選中狀態(tài)。voidsetText(Stringtext):設置復選框中顯示的文字。8.4.1復選和單選組件1復選框組件(JCheckBox)復選框的簡單應用如下所示:JCheckBoxc1=newJCheckBox("麥當勞");//創(chuàng)建一個未選中狀態(tài)的復選框JCheckBoxc2=newJCheckBox("肯德基",true);//創(chuàng)建一個選中狀態(tài)的復選框JCheckBoxc3=newJCheckBox("必勝客",newImageIcon(".\\x.jpg"));//創(chuàng)建一個帶圖標的復選框8.4.1復選和單選組件2單選按鈕組件(JRadioButton)和按鈕組組件(ButtonGroup)單選框(JRadioButton)允許用戶在一組候選條目中只能選擇其中1項,這一效果需和按鈕組(ButtonGroup)類合用,用黑圓點表示當前項選中。JRadioButton類的主要構造方法JRadioButton(Stringtext):創(chuàng)建一個指定文本且未選中的單選按鈕。JRadioButton(Stringtext,booleanselected):指定文本及選中狀態(tài)。JRadioButton(Stringtext,Iconicon):指定文本及圖標。JRadioButton的常用方法booleanisSelected():檢查單選按鈕是否選中。voidsetSelected(booleanb):設置單選按鈕的選中狀態(tài)。voidsetText(Stringtext):設置單選按鈕中顯示的文字。8.4.1復選和單選組件2單選按鈕組件(JRadioButton)和按鈕組組件(ButtonGroup)ButtonGroup類用于為一組按鈕創(chuàng)建一個多斥(multiple-exclusion)作用域,即用戶對一個組中的多個選項只能選擇其一,該類常與JRadioButton類組合而用。ButtonGroup類的主要構造方法ButtonGroup():創(chuàng)建一個新的ButtonGroup。ButtonGroup類的常用方法voidadd(AbstractButtonb):將按鈕添加到按鈕組中。voidclearSelection():清除ButtonGroup中的任何選中狀態(tài)。intgetButtonCount():返回此組中的按鈕數(shù)。8.4.1復選和單選組件2單選按鈕組件(JRadioButton)和按鈕組組件(ButtonGroup)關于教師職稱選項應用:JRadioButtonr1=newJRadioButton("教授");JRadioButtonr2=newJRadioButton("副教授");JRadioButtonr3=newJRadioButton("講師");ButtonGroupbg=newButtonGroup();bg.add(r1);bg.add(r2);bg.add(r3);浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.4.1復選和單選組件8.4.3對話框組件8.4.4表格和滾動窗格組件8.4Swing高級組件8.4.2下拉框和列表框組件8.4.5菜單組件8.4.2下拉框和列表框組件1下拉框組件(JComboBox)下拉框(JComboBox)允許用戶在若干條目中選擇其中一項,可編輯每項內容,而且每項的內容可以是任意類,而不再局限于String。JComboBox類的主要構造方法JComboBox():創(chuàng)建默認的JComboBox。JComboBox(Object[]items):創(chuàng)建包含指定數(shù)組中的元素的JComboBox。8.4.2下拉框和列表框組件1下拉框組件(JComboBox)創(chuàng)建包含三條選項內容的下拉框:JComboBoxsort=newJComboBox();sort.addItem("");sort.addItem("按分數(shù)升序");sort.addItem("按分數(shù)降序");JComboBox的常用方法ObjectgetItemAt(intindex):返回指定索引處的列表項。voidaddItem(ObjectanObject):為項列表添加項。intgetItemCount():返回列表中的項數(shù)。ObjectgetSelectedItem():返回當前所選項。8.4.2下拉框和列表框組件2列表框組件(JList)列表框(JLlist)用于顯示對象列表并且允許用戶選擇一個或多個條目,里面的條目可以由任意類型對象構成。滾動窗格列表框JLlist類的主要構造方法JList():創(chuàng)建一個內容為空的列表框。JList(Object[]items):創(chuàng)建一個包含指定數(shù)組各元素的列表框。8.4.2下拉框和列表框組件2列表框組件(JList)JLlist類的常用方法voidsetVisibleRowCount(intnum):設置列表可見行數(shù)。voidsetFixedCellWidth(intwidth):設置列表框的固定寬度(像素)。voidsetFixedCellHeight(intheight):設置列表框的固定高度。BooleanisSelectedIndex(intindex):序數(shù)為index的項是否被選中。voidsetSelectedIndex(intindex):選擇單個單元。列表框的具體使用String[]elementList={"Element0","Element1","Element2"};//創(chuàng)建列表元素數(shù)組JListlist=newJList(elementList);//創(chuàng)建含三個條目的列表浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.4.1復選和單選組件8.4.3對話框組件8.4.4表格和滾動窗格組件8.4Swing高級組件8.4.2下拉框和列表框組件8.4.5菜單組件8.4.3對話框組件JOptionPaneJFileChooserJColorChooser123Java的swing包中定義了三個專用對話框用于顯示消息的選項對話框文件選擇對話框顏色選擇對話框8.4.3對話框組件JOptionPane類---選項對話框JOptionPane類提供了多個方法來生成各種標準的對話框,用于實現(xiàn)信息顯示、問題提出確認、用戶輸入?yún)?shù)等功能。8.4.3對話框組件1showConfirmDialog描述詢問一個待確認問題,如yes/no。常用格式staticintshowConfirmDialog(ComponentparentComponent,Objectmessage,Stringtitle,intoptionType)showConfirmDialog方法使用的效果:JOptionPane.showConfirmDialog(null,

"確認對話框,請選擇YES或者NO!","ConfirmDialog",JOptionPane.YES_NO_OPTION);8.4.3對話框組件2showMessageDialog描述提示用戶具體信息。常用格式staticvoidshowMessageDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType);showMessageDialog方法使用的效果:JOptionPane.showMessageDialog(null,"提示對話框,請注意此處有錯誤!","MessageDialog",JOptionPane.ERROR_MESSAGE);8.4.3對話框組件3showInputDialog描述提示輸入文本信息。常用格式staticStringshowInputDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType);showInputDialog方法使用的效果:StringinputValue=JOptionPane.showInputDialog(null,"請輸入數(shù)據(jù):","InputDialog",JOptionPane.QUESTION_MESSAGE);浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.4.1復選和單選組件8.4.3對話框組件8.4.4表格和滾動窗格組件8.4Swing高級組件8.4.2下拉框和列表框組件8.4.5菜單組件8.4.4表格和滾動窗格組件

現(xiàn)實世界中基于數(shù)據(jù)庫的數(shù)據(jù)查詢應用廣泛,如電商購物平臺查詢,銀行賬單查詢等等,而數(shù)據(jù)庫中的數(shù)據(jù)均以二維關系表的形式存在,所以查詢的結果通過表格組件以數(shù)據(jù)表的形式呈現(xiàn)最為合適。

表格組件(JTable)常與滾動窗格組件(JScrollPane)搭配使用以顯示大量數(shù)據(jù)。8.4.4表格和滾動窗格組件1表格組件(JTable)表格(JTable)類,屬于Swing組件,用來顯示和編輯常規(guī)的二維關系表數(shù)據(jù),其效果如圖所示滾動窗格8.4.4表格和滾動窗格組件1表格組件(JTable)JTable類的常用方法voidsetPreferredScrollableViewportSize(Dimensionsize):

設置表格內容區(qū)域大小。voidsetGridColor(ColorgridColor):設置表格網(wǎng)格線顏色,并顯示。ObjectgetValueAt(introw,intcolumn):返回第row行和column列的單元格值。JTabel類的主要構造方法JTable(Object[][]rowData,Object[]columnNames):

構造一個JTable來顯示二維數(shù)組rowData的值,列名稱為columnNames。JTable(intnumRows,intnumColumns):用DefaultTableModel構造具有numRows行和numColumns列單元格的表格。8.4.4表格和滾動窗格組件1表格組件(JTable)表格組件顯示注冊用戶基本信息Object[]columnNames={"姓名","性別","籍貫","生日","職業(yè)"};Object[][]rowData={{"李萌","男","南京","03/24/1985","教師"},{"曉明","女","南京","09/12/1985","醫(yī)生"}};JTablefriends=newJTable(rowData,columnNames);friends.setPreferredScrollableViewportSize(newDimension(600,100));friends.setRowHeight(30);//設置每行的高度為30friends.setRowMargin(5);//設置相鄰兩行單元格的距離friends.setSelectionBackground(Color.white);//設置所選擇行的背景色friends.setValueAt("tt",0,0);//設置0行0列單元格的值8.4.4表格和滾動窗格組件2滾動窗格組件(JScrollPane)滾動窗格類(JScrollPane)允許用戶在滾動條內移動滑塊以確定顯示區(qū)域中的內容,其效果如圖所示滾動窗格JScrollPane類的主要構造方法JScrollPane():建立一個空的JScrollPane對象。JScrollPane(Componentview):建立一個新的JScrollPane對象,當組件內容大于顯示區(qū)域時會自動產(chǎn)生滾動軸。8.4.4表格和滾動窗格組件2滾動窗格組件(JScrollPane)JScrollPane類的常用方法voidsetViewportView(Componentview):設置滾動窗格中顯示的內容組件對象。voidsetHorizontalScrollBarPolicy(intpolicy):設置滾動窗格的水平滾動條策略值,合法值:ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDEDScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVERScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYSvoidsetVerticalScrollBarPolicy(intpolicy):設置滾動窗格的垂直滾動條策略值,合法值:ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDEDScrollPaneConstants.VERTICAL_SCROLLBAR_NEVERScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS8.4.4表格和滾動窗格組件2滾動窗格組件(JScrollPane)嵌入JTable的JScrollPane的典型應用如下:Object[][]data={{"章敬","23","國貿(mào)"},{"許果","22","軟件"}};StringcolumnNames={"姓名","年齡","專業(yè)"};JTabletable=newJTable(data,columnNames);JScrollPanespResult=newJScrollPane();spResult.setViewportView(table);JPanelpanel=newJPanel();panel.add(spResult);浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.4.1復選和單選組件8.4.3對話框組件8.4.4表格和滾動窗格組件8.4Swing高級組件8.4.2下拉框和列表框組件8.4.5菜單組件8.4.5菜單組件下拉式菜單和彈出式菜單是常用的GUI組件。

菜單采用的是一種層次結構,其中下拉式菜單的最頂層是菜單欄(JMenuBar),在菜單欄中可以添加若干個菜單(JMenu),每個菜單中又可以添加若干個菜單項(JMenuItem)、分隔線(Separator);彈出式菜單中也允許出現(xiàn)級聯(lián)菜單。菜單效果如圖所示。JMenuTest下拉式菜單彈出式菜單8.4.5菜單組件1菜單欄類(JMenuBar)、下拉式菜單類(JMenu)和菜單項類(JMenuItem)菜單欄(JMenuBar)類菜單欄(JMenuBar)類的常用方法JMenuadd(JMenuc):將指定的菜單追加到菜單欄的末尾。菜單欄(JMenuBar)類的主要構造方法JMenuBar():創(chuàng)建新的菜單欄。8.4.5菜單組件1菜單欄類(JMenuBar)、下拉式菜單類(JMenu)和菜單項類(JMenuItem)下拉式菜單(JMenu)類菜單(JMenu)類的常用方法Componentadd(Componentc):將某個組件追加到此菜單的末尾。JMenuItemadd(JMenuItemmenuItem):將某菜單項追加到菜單的末尾。voiddoClick(intpressTime):以編程方式執(zhí)行“單擊”動作。菜單(JMenu)類的主要構造方法JMenu(Strings):構造一個新JMenu,并以字符串s作為菜單名。8.4.5菜單組件1菜單欄類(JMenuBar)、下拉式菜單類(JMenu)和菜單項類(JMenuItem)菜單項(JMenuItem)類菜單項(JMenuItem)類的常用方法setEnabled(booleanb):啟用或禁用菜單項。菜單項(JMenuItem)類的主要構造方法JMenuItem(Stringtext):創(chuàng)建帶有指定文本的JMenuItem。JMenuItem(Stringtext,Iconico):創(chuàng)建帶文本和圖標的菜單項。JMenuItem(Stringtext,intmnemon):創(chuàng)建帶文本和快捷鍵的菜單項。8.4.5菜單組件1菜單欄類(JMenuBar)、下拉式菜單類(JMenu)和菜單項類(JMenuItem)菜單相關類的典型應用為:JFrameframe=newJFrame("MenuSampleExample");//定義一個窗體JMenuBarmenuBar=newJMenuBar();//定義一個菜單欄JMenufileMenu=newJMenu("File");//定義一個菜單menuBar.add(fileMenu);//把一個菜單加載到菜單欄里JMenuItemnewMenuItem=newJMenuItem("New",‘N’);//定義一個菜單項fileMenu.add(newMenuItem);//把菜單項加載到菜單中frame.setJMenuBar(menuBar);//把菜單欄加載到窗體中8.4.5菜單組件2彈出式菜單類(JPopMenu)彈出式菜單(JPopupMenu)是當點擊鼠標右鍵時可彈出的一個菜單,它允許用戶在這個菜單中選擇某一菜單項。JPopupMenu類的主要構造方法JPopupMenu():構造一個缺省的JPopupMenu。JPopupMenu(Stringlabel):構造一個帶標題的JPopupMenu。JPopupMenu類的常用方法setPopupSize(intwidth,intheight):設置彈出窗口的大小。addSeparator():將新分隔符添加到菜單的末尾。8.4.5菜單組件2彈出式菜單類(JPopMenu)彈出菜單類的典型應用為:JPopupMenupopMenu=newJPopupMenu();//實例化彈出菜單popMenu.add(newJMenuItem("save"));//向彈出菜單里加載菜單項popMenu.addSeparator();//向彈出菜單里添加分割條popMenu.add(newJMenuItem("exit"));JPanelpanel=newJPanel();panel.setComponentPopupMenu(popMenu);8.5.1事件與監(jiān)聽8.5.2事件處理8.5.3事件適配器與匿名類8.5Swing事件處理機制浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.5.1事件與監(jiān)聽

客觀事件與事件響應8.5.1事件與監(jiān)聽事件Event事件源Eventsource事件處理器Eventhandler事件服務方法Eventservicemethod即一個對象,它描述了針對某一組件發(fā)生什么了事情。如在一個按鈕上單擊了一下,這個“單擊”動作就是一個針對按鈕的事件。發(fā)生事件的組件對象,如上述的按鈕。即一個對象,它能捕獲發(fā)生在某一組件上的特定事件并作出相應的處理,也稱為事件監(jiān)聽器。即一個方法,它可以處理由事件處理器所捕獲到的一個特定事件。Java在組件事件的應對策略上,采用了一種名為“事件授權模型”的處理機制,以支持GUI程序與用戶的實時交互。與組件事件處理相關的四個要素為:8.5.1事件與監(jiān)聽Java事件處理模型8.5.1事件與監(jiān)聽classButtonActionListenerimplementsActionListener{publicvoidactionPerformed(finalActionEvente){if(e.getSource()==ButtonExit)//判斷事件源是否為“退出”按鈕

doDefaultCloseAction();//執(zhí)行系統(tǒng)定義的窗口關閉動作}}。。。。。。ButtonActionListenerbtActionListener=newButtonActionListener();JButtonexitButton=newJButton("Exit");exitButton.addActionListener(btActionListener);

//利用按鈕組件的addActionListener()方法加載一個監(jiān)聽器類對象Java事件處理模型的典型應用8.5.1事件與監(jiān)聽8.5.2事件處理8.5.3事件適配器與匿名類8.5Swing事件處理機制浙江經(jīng)貿(mào)職業(yè)技術學院界面圖形用戶Java語言程序設計Unit8主講胡堅8.5.2事件處理1常用組件事件處理在Java中具體的組件(事件源)關聯(lián)著特定的事件類型,而特定的事件必須由相應的事件監(jiān)聽器類(一般實現(xiàn)于指定的事件監(jiān)聽接口)來偵聽。Swing的事件處理機制繼續(xù)沿用AWT的事件授權模型,其基本的事件處理需要使用java.awt.event包中的類,但Swing也增加了一些新的事件及其監(jiān)聽接口,相應類位于javax.swing.even包中。8.5.2事件處理事件源(EventSource)事件(Event)事件所描述的信息事件監(jiān)聽接口(EventListener)JButton、JCheckBox、JRadioButtonActionEvent表示激活組件(如單擊)ActionListener、ChangeListener、ItemListenerChangeEvent表示改變組件狀態(tài)ItemEvent表示選擇了某個條目JComboBoxActionEvent、ItemEvent選中列表某項的事件ActionListener、ItemListenerJListListSelectionEventListSelectionListenerJMenuItemActionEvent、ChangeEvent、ItemEvent、MenuKeyEvent、與菜單相關的按鍵事件ActionListener、ChangeListener、ItemListener、MenuKeyListener、JMenuMenuEvent菜單相關事件(如選中)MenuListenerJPopupMenuPopupMenuEvent彈出菜單相關事件PopupMenuListenerJTextFieldActionEvent文本框操作事件ActionListenerJScrollBarAdjustmentEvent移動滾動條等組件事件AdjustMentListenerJTableTableModeEvent、TableColumnModelEvent、CellEditorEvent

表模型改變事件、表的列模型改變事件、

單元格編輯事件TableModeListener、TableColumnModelListener、CellEditorListenerWindowWindowEvent窗口操作事件WindowListener常用組件相關事件類和事件監(jiān)聽器類8.5.2事件處理事件監(jiān)聽接口(EventListener)事件服務方法(EventServiceMethod)事件監(jiān)聽接口所屬包ActionListeneractionPerformed(ActionEvente)java.awt.eventItemListeneritemStateChanged(ItemEvente)java.awt.eventListSelectionListenervalueChanged(ListSelectionEvente)javax.swing.eventChangeListenerstateChanged(ChangeEvente)javax.swing.eventMenuKeyListenermenuKeyPressed(MenuKeyEvente)menuKeyReleased(MenuKeyEvente)

menuKeyTyped(MenuKeyEvente)javax.swing.eventMenuListenermenuCanceled(MenuEvente)menuDeselected(MenuEvente)menuSelected(MenuEvente)javax.swing.eventAdjustMentListeneradjustmentValueChanged(AdjustmentEvente)java.awt.eventCellEditorListenereditingCanceled(ChangeEvente)editingStopped(ChangeEvente)javax.swing.eventTableModeListenermenuCanceled(MenuEvente)menuDeselected(MenuEvente)

menuSelected(MenuEvente)javax.swing.eventTableColumnModelListenercolumnAdded(TableColumnModelEvente)

columnMoved(TableColumnModelEvente)

columnSelection(ChangedListSelectionEvente)javax.swing.eventWindowListenerwindowOpened(WindowEvent)windowClosing(WindowEvent)windowClosed(WindowEvent)windowIconified(WindowEvent)

windowDeiconified(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)java.awt.event常用組件的相關事件類和事件監(jiān)聽器接口8.5.2事件處理1常用組件事件處理Step1:定義按鈕監(jiān)聽器類:classButtonHandlerimplementsActionListener{publicvoidactionPerformed(ActionEventevent)

{//按鈕監(jiān)聽方法JOptionPane.showMessageDialog(null,String.format("Youpressed:%s",event.getActionCommand()));}}簡單組件事件處理舉例8.5.2事件處理1常用組件事件處理Step2:創(chuàng)建事件監(jiān)聽對象,并注冊到按鈕上:publicclassSimpleEventHandle{publicstaticvoidmain(Stringargs[]){JFramejf=newJFrame("簡單組件事件");jf.setSize(260,110);

jf.setVisible(true);

JButtonjbut=newJButton("MyButton!");jf.add(jbut);ButtonHandlerhandler=newButtonHandler();//創(chuàng)建按鈕監(jiān)聽器

jbut.addActionListener(handler);}//按鈕監(jiān)聽器加載到按鈕上}8.5.2事件處理2鼠標事件處理

MouseEvent事件鼠標事件類(MouseEvent)用于描述組件中發(fā)生鼠標動作的事件。MouseEvent類的常用的方法intgetX():返回事件相對于源組件的水平x坐標。intgetXOnScreen():返回事件的絕對水平x坐標。intgetY():返回事件相對于源組件的垂直y坐標。intgetYOnScreen():返回事件的絕對垂直y坐標。8.5.2事件處理2鼠標事件處理

MouseListener接口鼠標監(jiān)聽接口(MouseListener)用于監(jiān)聽發(fā)生在—個GUI組件上的鼠標事件,包括鼠標的按下、釋放、單擊、進入和退出。MouseListener接口的常用的方法mouseClicked(MouseEvente):當在一個組件上單擊鼠標時該方法被觸發(fā)。mousePressed(MouseEvente):當在一個組件上按下鼠標時該方法觸發(fā)。mouseReleased(MouseEvente):當在一個組件上釋放鼠標時該方法觸發(fā)。mouseEntered(MouseEvente):當鼠標指針進入到組件時該方法被觸發(fā)。mouseExited(MouseEvente):當鼠標指針退出組件時該方法被觸發(fā)。

8.5.2事件處理2鼠標事件處理Step1:自定義的鼠標事件監(jiān)聽器類實現(xiàn)于MouseListener接口classMouseActionListenerimplementsMouseListener{//該方法監(jiān)聽鼠標鍵按下的動作

publicvoidmouseClicked(MouseEvente){if(e.getSource()==text)//如果事件源是text文本框的話

text.setText("按下鼠標,位置:"+"("+e.getX()+","+e.getY()+")");}}Java鼠標事件的典型應用實現(xiàn)功能:當鼠標在一個文本框內部某處點擊一下時,該文本框的就顯示鼠標點擊時的位置坐標信息。8.5.2事件處理2鼠標事件處理Step2:創(chuàng)建鼠標事件監(jiān)聽對象,并注冊到文本框控件上pulicclassMouseEventTest{publicstaticvoidmain(Stringargs[]){MouseActionListenermyMouseActionListener=newMouseActionListener();JTextFieldtext=newJTextField();text.addMouseListener(myMouseActionListener);//為文本框加載監(jiān)聽器}}8.5.2事件處理3鍵盤事件處理KeyListener接口能夠監(jiān)聽的鍵盤事件有3種,處理方法分別為:publicvoidkeyTyped(KeyEvente):當鍵盤的一個鍵被按下并釋放后該方法被觸發(fā)。publicvoidkeyPressed(KeyEvente):當鍵盤鍵被按下后該方法被觸發(fā)。publicvoidkeyReleased(KeyEvente):當鍵盤鍵被釋放后該方法被觸發(fā)。KeyEvent類中所包含的常用方法publicintgetKeyCode():返回與此事件中的鍵關聯(lián)的整數(shù)鍵碼。publicstaticStringgetKeyText(intkeyCode):返回描述keyCode的串信息,如

“HOME”、“F1”或“A”。8.5.2事件處理Step1:自定義的鍵盤事件監(jiān)聽器類實現(xiàn)于KeyListener接口classKeyActionListenerimplementsKeyListener{//該方法監(jiān)聽鍵盤按鍵按下的動作

publicvoidkeyPressed(KeyEvente){if(e.getKeyCode()==KeyEvent.VK_LEFT)//如果按下了左方向鍵

text.setText("你按下了左方向鍵!");if(e.getKeyCode()==KeyEvent.VK_RIGHT)//如果按下右方向鍵

text.setText("你按下了右方向鍵!");}

}實現(xiàn)功能:當用戶按下了鍵盤上的“左”或者“右”方向鍵時,文本框中顯示用戶按下的鍵名稱的信息。3鍵盤事件處理Java鍵盤事件的典型應用8.5.2事件處理Step2:創(chuàng)建鍵盤事件監(jiān)聽對象,并注冊到文本框控件上pulicclassKeyEventTest{publicstaticvoidmain(Stringargs[]){KeyAct

溫馨提示

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

最新文檔

評論

0/150

提交評論