Java語(yǔ)言程序設(shè)計(jì)-辛運(yùn)幃-饒一梅-第八章新課件_第1頁(yè)
Java語(yǔ)言程序設(shè)計(jì)-辛運(yùn)幃-饒一梅-第八章新課件_第2頁(yè)
Java語(yǔ)言程序設(shè)計(jì)-辛運(yùn)幃-饒一梅-第八章新課件_第3頁(yè)
Java語(yǔ)言程序設(shè)計(jì)-辛運(yùn)幃-饒一梅-第八章新課件_第4頁(yè)
Java語(yǔ)言程序設(shè)計(jì)-辛運(yùn)幃-饒一梅-第八章新課件_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章圖形用戶(hù)界面設(shè)計(jì)

第8章圖形用戶(hù)界面設(shè)計(jì)

圖形用戶(hù)界面圖形用戶(hù)界面(GraphicalUserInterface,簡(jiǎn)稱(chēng)GUI)是人機(jī)交互接口,它是應(yīng)用程序的外觀。Java語(yǔ)言提供了一套用來(lái)構(gòu)建用戶(hù)界面的組件(component),包括面板(Panel)、按鈕(Button)、標(biāo)簽(Label)、畫(huà)板(Canvases)、滾動(dòng)條(Scrollbar)、列表框(List)、文本域(TextField)、文本區(qū)(TextArea)等。2023/9/112圖形用戶(hù)界面圖形用戶(hù)界面(GraphicalUserInAWT與Swing早期的JDK版本中提供的是Java抽象窗口工具集(AbstractWindowToolkit,簡(jiǎn)稱(chēng)AWT),相應(yīng)的組件定義在java.awt包中。在后續(xù)的JDK版本中,又提供了功能更強(qiáng)的Swing。Swing屬于JavaTMFoundationClasses(簡(jiǎn)稱(chēng)JFC)的一部分。Swing組件則定義在javax.swing包中。2023/9/113AWT與Swing早期的JDK版本中提供的是Java抽象窗AWT包AWT中包含的主要類(lèi)及相互的繼承關(guān)系如圖:2023/9/114AWT包AWT中包含的主要類(lèi)及相互的繼承關(guān)系如圖:2023Swing包Swing包中主要的類(lèi)與繼承關(guān)系如圖所示2023/9/115Swing包Swing包中主要的類(lèi)與繼承關(guān)系如圖所示2023AWT包與Swing包Swing對(duì)AWT的改進(jìn)主要的是體現(xiàn)在平臺(tái)無(wú)關(guān)性上。Swing稱(chēng)為輕量級(jí)(lightweight)組件,在實(shí)現(xiàn)時(shí)可以完全不依賴(lài)于本機(jī)環(huán)境。所以使用Swing組件的程序移植性更好。AWT組件稱(chēng)為重量級(jí)(heavyweight)組件,是指它含有較多的本機(jī)代碼,平臺(tái)無(wú)關(guān)性不徹底,不便于程序移植。2023/9/116AWT包與Swing包Swing對(duì)AWT的改進(jìn)主要的是體現(xiàn)組件和容器組件是構(gòu)成圖形用戶(hù)界面最基本的元素。組件的級(jí)別是不同的,有些組件是最頂層的組件,可以在界面窗口內(nèi)直接顯示。有一些組件不能單獨(dú)存在,它們必須被加入到某個(gè)組件中才能顯示。能夠容納其他組件的組件稱(chēng)為容器(container),有了容器,就可以構(gòu)造嵌套關(guān)系的組件架構(gòu),從而形成復(fù)雜的窗口界面。設(shè)計(jì)程序時(shí),最外層的組件必須是容器,這些容器稱(chēng)為頂層容器。Swing中共有四種頂層容器,分別為JFrame、JApplet、JDialog和JWindow。2023/9/117組件和容器組件是構(gòu)成圖形用戶(hù)界面最基本的元素。組件的級(jí)別是不窗口簡(jiǎn)單示例程序8-1窗口簡(jiǎn)單示例importjava.awt.*;importjavax.swing.*;publicclassJFrameDemo1{ publicstaticvoidmain(Stringargs[]){ JFrameframe=newJFrame("JFrame");

//創(chuàng)建一個(gè)JFrame的實(shí)例

JButtonbutton=newJButton("AFrame");

//創(chuàng)建一個(gè)JButton的實(shí)例

//將JButton放到JFrame的中央

frame.getContentPane().add(button); frame.pack(); //將JFrame設(shè)置到適當(dāng)?shù)拇笮?/p>

frame.setVisible(true); //顯示JFrame }}

2023/9/118窗口簡(jiǎn)單示例程序8-1窗口簡(jiǎn)單示例2023/8/38窗口簡(jiǎn)單示例該程序運(yùn)行之后,彈出的窗口如圖8-3所示,窗口中有一個(gè)按鈕。2023/9/119窗口簡(jiǎn)單示例該程序運(yùn)行之后,彈出的窗口如圖8-3所示,窗口中內(nèi)容窗格Swing的頂層容器是不能直接添加組件的。每個(gè)頂層容器都有一個(gè)內(nèi)容窗格(ContentPane),也稱(chēng)為內(nèi)容面板。除菜單之外的組件都需要放在這個(gè)內(nèi)容窗格中,通過(guò)getContentPane()方法得到一個(gè)內(nèi)容窗格。既可以直接調(diào)用頂層容器的add()方法,也可以調(diào)用內(nèi)容窗格的add()方法來(lái)添加組件。每種頂層容器都有默認(rèn)的內(nèi)容窗格,也可以創(chuàng)建一個(gè)新的內(nèi)容窗格取代頂層容器默認(rèn)的內(nèi)容窗格。2023/9/1110內(nèi)容窗格Swing的頂層容器是不能直接添加組件的。每個(gè)頂層內(nèi)容窗格當(dāng)創(chuàng)建一個(gè)新的內(nèi)容窗格時(shí),通常的做法是創(chuàng)建面板JPanel的一個(gè)實(shí)例(JPanel是java.awt.Container的子類(lèi)),然后將組件添加到JPanel實(shí)例中,再通過(guò)頂層容器的setContentPane()方法將JPanel實(shí)例設(shè)置為新的內(nèi)容窗格。修改程序8-1,創(chuàng)建新的內(nèi)容窗格并添加組件。(見(jiàn)下一頁(yè))2023/9/1111內(nèi)容窗格當(dāng)創(chuàng)建一個(gè)新的內(nèi)容窗格時(shí),通常的做法是創(chuàng)建面板JPa內(nèi)容窗格的完整程序程序8-2創(chuàng)建新的內(nèi)容窗格的完整程序importjava.awt.*;importjavax.swing.*;publicclassJFrameDemo2{ publicstaticvoidmain(Stringargs[]){ JFrameframe=newJFrame("JFrameDemo2");

//創(chuàng)建一個(gè)JFrame的實(shí)例

JButtonbutton=newJButton("AButton");

//創(chuàng)建一個(gè)JButton的實(shí)例

JPanelcontentPane=newJPanel();

//創(chuàng)建一個(gè)JPanel的實(shí)例

//為JPanel設(shè)置BorderLayout布局管理器

contentPane.setLayout(newBorderLayout()); //將JButton放到JPanel的中央

contentPane.add(button,BorderLayout.CENTER); //為JFrame設(shè)置新的內(nèi)容窗格

frame.setContentPane(contentPane); frame.pack(); //將JFrame設(shè)置到適當(dāng)?shù)拇笮?/p>

frame.setVisible(true); //顯示JFrame }}2023/9/1112內(nèi)容窗格的完整程序程序8-2創(chuàng)建新的內(nèi)容窗格的完整程序202按鈕按鈕是Java圖形用戶(hù)界面的基本組件之一,下圖中顯示的是最常用到的四種按鈕,分別是JButton、JToggleButton、JCheckBox、JRadioButton

2023/9/1113按鈕按鈕是Java圖形用戶(hù)界面的基本組件之一,下圖中顯示的按鈕這些按鈕類(lèi)均是AbstractButton的子類(lèi)或間接子類(lèi),各類(lèi)之間的繼承關(guān)系如圖所示2023/9/1114按鈕這些按鈕類(lèi)均是AbstractButton的子類(lèi)或間接子按鈕Button是最簡(jiǎn)單的按鈕,它的構(gòu)造方法中可以指定在按鈕上要顯示的內(nèi)容,既可以顯示文本,也可以顯示圖標(biāo)。切換按鈕(JToggleButton)具有兩種狀態(tài),即選中狀態(tài)和未選中狀態(tài),每次單擊導(dǎo)致從一種狀態(tài)變?yōu)榱硪环N狀態(tài)。構(gòu)造方法中如果沒(méi)有指定按鈕的初始狀態(tài),則默認(rèn)地處于未選中狀態(tài)。上圖中第二個(gè)按鈕被單擊過(guò)一次,為選中狀態(tài),第一個(gè)按鈕未被單擊過(guò),為未選中狀態(tài),而第三個(gè)按鈕被單擊過(guò)兩次,又回到未選中狀態(tài)。2023/9/1115按鈕Button是最簡(jiǎn)單的按鈕,它的構(gòu)造方法中可以指定在按鈕按鈕復(fù)選按鈕(JCheckBox)允許同時(shí)選取多個(gè)選項(xiàng),如圖8-7中第一排的按鈕所示。而單選按鈕(JRadioButton)顧名思義,只允許在多種選擇中選擇一種,具有排他性,如圖8-7中第二排的按鈕所示。JCheckBox和JRadioButton都是JToggleButton的子類(lèi),構(gòu)造方法的格式與JToggleButton相同,它們也都具有選中和未選中兩種狀態(tài)。2023/9/1116按鈕復(fù)選按鈕(JCheckBox)允許同時(shí)選取多個(gè)選項(xiàng),如圖標(biāo)簽(JLabel)標(biāo)簽對(duì)象通常用于顯示提示性的內(nèi)容,可以顯示文本信息,也可以顯示圖標(biāo)。構(gòu)造方法中的int型參數(shù)horizontalAlignment用來(lái)指定顯示的信息在水平方向上的對(duì)方方式,它的取值可以是JLabel.LEFT、JLabel.RIGHT和JLabel.CENTER等常量,分別表示左對(duì)齊、右對(duì)齊和居中??梢苑謩e使用setHorizontalAlignment(intalignment)方法和setVerticalAlignment(intalignment)方法改變標(biāo)簽內(nèi)容的水平或垂直對(duì)齊方式。改變水平對(duì)齊方式時(shí),alignment取值可為JLabel.LEFT、JLabel.RIGHT和JLabel.CENTER等常量,改變垂直對(duì)齊方式時(shí),alignment取值可為JLabel.TOP、JLabel.BOTTOM和JLabel.CENTER等常量。

2023/9/1117標(biāo)簽(JLabel)標(biāo)簽對(duì)象通常用于顯示提示性的內(nèi)容,可以標(biāo)簽示例JLabellabel=newJLabel(“Hello”,JLabel.RIGHT);

//構(gòu)造一個(gè)以右對(duì)齊方式顯示的標(biāo)簽label.setHorizontalAlignment(JLabel.CENTER);

//顯示內(nèi)容設(shè)置為水平居中l(wèi)abel.setVerticalAlignment(JLabel.BOTTOM);

//顯示內(nèi)容設(shè)置為底部對(duì)齊label.setVerticalTextPosition(JLabel.BOTTOM);

//設(shè)置文本信息顯示在圖標(biāo)的底部label.setHorizontalTextPosition(JLabel.CENTER);

//文本和圖標(biāo)都居中在程序中,可以使用setText(Stringtext)方法修改顯示在標(biāo)簽上的文本信息,也可以使用setIcon(Iconicon)方法修改標(biāo)簽上的圖標(biāo),但是在程序運(yùn)行過(guò)程中,用戶(hù)不能對(duì)標(biāo)簽內(nèi)容進(jìn)行修改。2023/9/1118標(biāo)簽示例JLabellabel=newJLabel組合框組合框(JComboBox)是一個(gè)下拉式菜單。程序中當(dāng)一個(gè)輸入框中的值只有若干種選擇的時(shí)候,可以將它們組織到組合框中,使用者只需要從中選擇就可以了。組合框分可編輯和不可編輯兩種形式。對(duì)不可編輯的組合框,用戶(hù)只能在現(xiàn)有的選項(xiàng)列表中選擇其中之一;而可編輯的組合框,用戶(hù)既可以在現(xiàn)有選項(xiàng)中選擇,也可以輸入新的內(nèi)容。

2023/9/1119組合框組合框(JComboBox)是一個(gè)下拉式菜單。程序中組合框常用方法組合框中控制選項(xiàng)的方法:例8-4組合框示例String[]itemList={"One","Two","Three","Four","Five"};JComboBoxjcb=newJComboBox(itemList);

//創(chuàng)建一個(gè)具有五個(gè)可選項(xiàng)的組合框方法名功能addItem(ObjectanObject)在末尾位置添加新的可選項(xiàng)insertItemAt(ObjectanObject,intindex)在index指定的位置添加新的可選項(xiàng)anObjectremoveItem(ObjectanObject)刪除由anObject指定的可選項(xiàng)2023/9/1120組合框常用方法組合框中控制選項(xiàng)的方法:方法名功能addIt文本組件Java提供了文本組件,專(zhuān)門(mén)用來(lái)處理輸入較多文字的情況。文本組件既能顯示信息,也可以接受用戶(hù)的輸入。在Swing中有多個(gè)文本組件,如文本域(JTextField)、口令輸入域(JPasswordField)、文本區(qū)(JTextArea)等,它們有共同的基類(lèi)JTextComponent。文本域是一個(gè)單行的文本輸入框,可用于輸入少量文本。它的構(gòu)造方法允許指定列數(shù),也可以顯示初始字符串。文本區(qū)是一個(gè)多行多列的文本輸入框,同樣地,它允許程序員設(shè)定初始的字符串,也允許設(shè)定初始的行數(shù)和列數(shù)。2023/9/1121文本組件Java提供了文本組件,專(zhuān)門(mén)用來(lái)處理輸入較多文字的文本組件示例例8-5文本組件示例//創(chuàng)建一個(gè)列數(shù)為30、有初始字符串的文本域JTextFieldtf=newJTextField(“SingleLine”,30);//創(chuàng)建一個(gè)4行30列、有初始字符串的文本區(qū)JTextAreata=newJTextArea(“Initialtext”,4,30);2023/9/1122文本組件示例例8-5文本組件示例2023/8/322菜單組件Swing包中提供了設(shè)計(jì)菜單時(shí)使用的多種組件,包括JMenuBar、JMenuItem、JMenu、JCheckBoxMenuItem、JRadioButtonMenuItem和JPopupMenu等,它們的繼承關(guān)系如圖所示2023/9/1123菜單組件Swing包中提供了設(shè)計(jì)菜單時(shí)使用的多種組件,包括菜單示例例8-6菜單示例//定義菜單欄JFrameframe=newJFrame(“JMenuBar”);JMenuBarmenubar=newJMenuBar(); //創(chuàng)建最上面一行的菜單frame.setJMenuBar(menubar);//定義菜單JMenumenu1=newJMenu("File"); //最上面一行菜單的內(nèi)容JMenumenu2=newJMenu("Edit"); //第二項(xiàng)menubar.add(menu1); //將菜單加入菜單欄中menubar.add(menu2);//建立并添加菜單項(xiàng)JMenuItemmi1=newJMenuItem("Save");JMenuItemmi2=newJMenuItem(“Load”);JMenuItemmi3=newJMenuItem(“Quit”);menu1.add(mi1); //添加菜單項(xiàng)menu1.add(mi2);menu1.addSeparator(); //添加分隔線(xiàn)menu1.add(mi3);2023/9/1124菜單示例例8-6菜單示例2023/8/324特殊菜單項(xiàng)除了普通的菜單項(xiàng)之外,還有兩種特殊的菜單項(xiàng),分別是復(fù)選菜單項(xiàng)和單選菜單項(xiàng)。復(fù)選菜單項(xiàng)的前面有一個(gè)方框,單選菜單項(xiàng)的前面有一個(gè)圓圈。這兩類(lèi)菜單項(xiàng)都可以選中或不選中,使用方法與復(fù)選按鈕和單選按鈕類(lèi)似。這兩類(lèi)特殊菜單項(xiàng)也可以顯示文本和圖標(biāo),同時(shí)可以在構(gòu)造方法中用boolean型參數(shù)指定菜單項(xiàng)的初始狀態(tài)。例如:JCheckBoxMenuItemmi1=newJCheckBoxMenuItem(“Persistent”);//未選中JCheckBoxMenuItemmi2=newJCheckBoxMenuItem(“transient”,true);//選中上述命令構(gòu)造兩個(gè)復(fù)選菜單項(xiàng),一個(gè)顯示“Persistent”、初態(tài)為未選中,另一個(gè)顯示“transient”、初態(tài)為選中。2023/9/1125特殊菜單項(xiàng)除了普通的菜單項(xiàng)之外,還有兩種特殊的菜單項(xiàng),分別是對(duì)話(huà)框?qū)υ?huà)框有3類(lèi)普通對(duì)話(huà)框標(biāo)準(zhǔn)對(duì)話(huà)框文件對(duì)話(huà)框?qū)υ?huà)框(JDialog)是一個(gè)可移動(dòng)窗口,它能夠被設(shè)置為“模式(modal)”窗口。所謂“模式”窗口是指在該窗口被關(guān)閉之前,其他窗口無(wú)法接收任何形式的輸入。對(duì)話(huà)框可以帶標(biāo)題,并需要指定它的擁有者是哪個(gè)框架。例如創(chuàng)建一個(gè)標(biāo)題為“Dialog”的模式對(duì)話(huà)框:JDialogdialog=newJDialog(frame,“Dialog”,true);這個(gè)對(duì)話(huà)框的擁有者為框架frame。對(duì)話(huà)框依附于其擁有者,當(dāng)擁有者被清除后,對(duì)話(huà)框也被清除。如果擁有者最小化,對(duì)話(huà)框也隨之不可見(jiàn)。2023/9/1126對(duì)話(huà)框?qū)υ?huà)框有3類(lèi)2023/8/326標(biāo)準(zhǔn)對(duì)話(huà)框Swing中還提供了用于顯示標(biāo)準(zhǔn)對(duì)話(huà)框(JOptionPane)的JOptionPane類(lèi)。例如下面兩個(gè)是常用的標(biāo)準(zhǔn)對(duì)話(huà)框:JOptionPane.showMessageDialog(frame,"Filenotfound.","Anerror",JOptionPane.ERROR_MESSAGE); //信息對(duì)話(huà)框JOptionPane.showOptionDialog(frame,"ClickOKtocontinue","Warning",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]); //選項(xiàng)對(duì)話(huà)框2023/9/1127標(biāo)準(zhǔn)對(duì)話(huà)框Swing中還提供了用于顯示標(biāo)準(zhǔn)對(duì)話(huà)框(JOpt文件對(duì)話(huà)框文件對(duì)話(huà)框(JFileChooser)是專(zhuān)門(mén)用于對(duì)文件(或目錄)進(jìn)行瀏覽和選擇的對(duì)話(huà)框,剛剛創(chuàng)建的文件對(duì)話(huà)框是不可見(jiàn)的,根據(jù)不同的文件對(duì)話(huà)框類(lèi)型可以調(diào)用不同的方法將其顯示出來(lái)。例如showOpenDialog()方法將顯示一個(gè)“打開(kāi)”文件對(duì)話(huà)框。2023/9/1128文件對(duì)話(huà)框文件對(duì)話(huà)框(JFileChooser)是專(zhuān)門(mén)用于布局管理器負(fù)責(zé)組件布局的機(jī)制是布局管理器,它用來(lái)決定窗口中各組件的排列方式,從而決定著界面的美觀程度與使用的方便性。Java為各個(gè)容器確定了默認(rèn)的布局管理器,下表列出了Java標(biāo)準(zhǔn)類(lèi)庫(kù)提供的幾個(gè)預(yù)定義的布局管理器。布局管理器描述BorderLayout將組件放到五個(gè)區(qū)域(北、南、東、西和中心)中。BoxLayout將組件按一行或一列來(lái)排列。CardLayout將組件放到一個(gè)區(qū)域中,每次只能看到一個(gè)組件。FlowLayout將組件從左至右排列,排不下時(shí)另起一行。GridLayout將組件放到橫、縱的格子里。GridBagLayout將組件放到單元格里,允許組件占據(jù)多個(gè)單元。2023/9/1129布局管理器負(fù)責(zé)組件布局的機(jī)制是布局管理器,它用來(lái)決定窗口中FlowLayout布局管理器FlowLayout是簡(jiǎn)單常用的一種布局管理器。它象我們?cè)诎准埳蠈?xiě)字那樣按行來(lái)放置組件,按組件添加的次序逐個(gè)地將組件排列在容器的一行中,一行放滿(mǎn)后就另起一個(gè)新行。FlowLayout布局管理器有5種對(duì)齊方式,如下表:

對(duì)齊方式常量含義

FlowLayout.LEFT左對(duì)齊

FlowLayout.RIGHT右對(duì)齊

FlowLayout.CENTER居中對(duì)齊

FlowLayout.LEADING頭對(duì)齊

FlowLayout.TRAILING尾對(duì)齊

2023/9/1130FlowLayout布局管理器FlowLayout是簡(jiǎn)單常BorderLayout布局管理器

BorderLayout是頂層容器中內(nèi)容窗格的默認(rèn)布局管理器。每個(gè)由BorderLayout管理的容器被劃分成北(North)、南(South)、西(West)、東(East)、中(Center)五個(gè)區(qū)域,分別代表容器的上、下、左、右和中部,用常量BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.EAST和BorderLayout.CENTER表示,在容器的每個(gè)區(qū)域可以加入一個(gè)組件。對(duì)East、South、West和North這四個(gè)邊界區(qū)域,如果其中的某個(gè)區(qū)域沒(méi)有使用,那么它的大小將變?yōu)榱?,此時(shí)Center區(qū)域?qū)?huì)擴(kuò)展并占據(jù)這個(gè)未用區(qū)域的位置。2023/9/1131BorderLayout布局管理器BorderLayoutGridLayout布局管理器GridLayout是一種網(wǎng)格式的多行多列的布局管理器,它的形式象是一個(gè)矩陣,組件依次放入其中,每個(gè)組件占據(jù)一格。GridLayout的構(gòu)造方法中可以指定組件排列的行數(shù)和列數(shù),也可以指定它們之間的間距。指定的行數(shù)或是列數(shù)可以為零,表明組件占用的行數(shù)或列數(shù)不受限制,依組件的具體個(gè)數(shù)來(lái)定。但不能指定行數(shù)和列數(shù)都為零。2023/9/1132GridLayout布局管理器GridLayout是一種網(wǎng)CardLayout布局管理器CardLayout是一種卡片式的布局管理器,它將容器中的組件處理為一系列卡片,卡片是一張張地添加到容器中的,每一時(shí)刻只顯示出卡片中的一張。首次運(yùn)行時(shí)顯示的是第一個(gè)添加進(jìn)去的卡片。程序員可以按卡片的內(nèi)部次序一張張地顯示卡片,也可以顯示指定的卡片。在javax.swing包中定義了JTabbedPane類(lèi),它的使用效果與CardLayout類(lèi)似,但更為簡(jiǎn)單。2023/9/1133CardLayout布局管理器CardLayout是一種卡BoxLayout布局管理器BoxLayout是定義在javax.swing包中的布局管理器,它將組件按垂直或水平方式排列在一列或一行中。使用這種布局管理器時(shí),可以指定組件排列的次序,如從左到右橫向排列,或是從上到下縱向排列。對(duì)組件的寬度和高度也做了規(guī)定。橫向排列時(shí),各組件的寬度按各自的首選值來(lái)定,而取各組件中最高的高度為高度值。縱向排列時(shí),取各組件的首選高度為各自的高度值,以最寬的寬度值為各組件的寬度值。2023/9/1134BoxLayout布局管理器BoxLayout是定義在ja控制組件外觀邊界每個(gè)Swing組件都可以帶有邊界。邊界本身不是組件,它只是定義如何來(lái)畫(huà)一個(gè)組件的邊。下表列出了Java標(biāo)準(zhǔn)類(lèi)庫(kù)中預(yù)定義的所有邊界。2023/9/1135控制組件外觀邊界2023/8/335控制組件外觀顏色組件可以有前景色和背景色,在JComponent類(lèi)中定義了設(shè)置組件的前景色和背景色的兩個(gè)方法,分別是:publicvoidsetForeground(Colorc)——設(shè)置前景色publicvoidsetBackground(Colorc)——設(shè)置背景色在這兩個(gè)方法中都需要java.awt.Color類(lèi)的一個(gè)實(shí)例作參數(shù),程序員可以使用Color類(lèi)中預(yù)定義的顏色常量。2023/9/1136控制組件外觀顏色2023/8/336控制組件外觀字體在Java中并沒(méi)有預(yù)定義的字體常量,因此需要通過(guò)給定字體名稱(chēng)、風(fēng)格和大小自己創(chuàng)建Font對(duì)象,例如:Fontf=newFont(“Dialog”,Font.PLAIN,14);Font構(gòu)造方法的第一個(gè)參數(shù)是字體名稱(chēng),第二個(gè)參數(shù)是字體的風(fēng)格,第三個(gè)參數(shù)是字體的大小。2023/9/1137控制組件外觀字體2023/8/337提示工具任何一個(gè)Swing組件都可以指定一個(gè)提示工具,它是一短行文本,當(dāng)光標(biāo)停在某個(gè)組件上時(shí)可以立刻顯示它。提示工具常用來(lái)告訴用戶(hù)這個(gè)組件的相關(guān)信息。使用組件的setToolTipText方法可以設(shè)置提示工具。例如:JButtonbutton=newJButton(“Compute”);button.setToolTipText(“Calculatestheareaunderthecurve.”);當(dāng)將按鈕添加到容器中并顯示時(shí),這個(gè)提示工具就可以起作用了。當(dāng)用戶(hù)的鼠標(biāo)指針越過(guò)按鈕、停留在上面時(shí),將彈出提示工具。當(dāng)用戶(hù)從按鈕上移開(kāi)鼠標(biāo)時(shí),提示工具也會(huì)消失。2023/9/1138提示工具任何一個(gè)Swing組件都可以指定一個(gè)提示工具,它是助記符助記符是一個(gè)字符,它允許用戶(hù)除使用鼠標(biāo)之外,還可以用鍵盤(pán)來(lái)按按鈕或從菜單中進(jìn)行選擇。例如,當(dāng)為一個(gè)按鈕定義了助記符后,用戶(hù)可以按住Alt鍵并按下助記符來(lái)激活那個(gè)按鈕。用助記符激活按鈕的結(jié)果,與用戶(hù)用鼠標(biāo)點(diǎn)擊按鈕的效果是一樣的。設(shè)置助記符的示例如下:JButtonbutton=newJButton(“Calculate”);button.setMnemonic(‘C’);當(dāng)顯示按鈕時(shí),按鈕標(biāo)簽Calculate中的字符C會(huì)加下劃線(xiàn)。當(dāng)用戶(hù)按Alt-C時(shí),激活按鈕,好象用戶(hù)用鼠標(biāo)點(diǎn)擊它一樣。2023/9/1139助記符助記符是一個(gè)字符,它允許用戶(hù)除使用鼠標(biāo)之外,還可以用鍵事件簡(jiǎn)述用戶(hù)在程序界面內(nèi)通過(guò)鍵盤(pán)或是鼠標(biāo)進(jìn)行的操作稱(chēng)為用戶(hù)事件(Event),這是引發(fā)程序做出反饋的源頭。當(dāng)某類(lèi)事件發(fā)生時(shí),會(huì)生成一個(gè)該事件類(lèi)對(duì)象。例如,用戶(hù)用鼠標(biāo)點(diǎn)擊按鈕,事件處理系統(tǒng)便會(huì)生成一個(gè)代表此事件的ActionEvent事件類(lèi)對(duì)象。用戶(hù)的操作不同,事件類(lèi)對(duì)象也會(huì)不同。2023/9/1140事件簡(jiǎn)述用戶(hù)在程序界面內(nèi)通過(guò)鍵盤(pán)或是鼠標(biāo)進(jìn)行的操作稱(chēng)為用戶(hù)監(jiān)聽(tīng)程序?yàn)榱私邮詹⑻幚砟愁?lèi)用戶(hù)事件,組件必須注冊(cè)相應(yīng)的事件處理程序,這種事件處理程序稱(chēng)為事件的監(jiān)聽(tīng)程序(Listener),它是實(shí)現(xiàn)了對(duì)應(yīng)監(jiān)聽(tīng)程序接口的一個(gè)類(lèi)。例如,為了處理按鈕上的ActionEvent事件,需要定義一個(gè)實(shí)現(xiàn)ActionListener接口的監(jiān)聽(tīng)程序類(lèi)。每個(gè)組件都有若干個(gè)形如addXXXListener(XXXListener)的方法,通過(guò)這類(lèi)方法,可以為組件注冊(cè)事件監(jiān)聽(tīng)程序。例如在JButton類(lèi)中有如下方法:

publicvoidaddActionListener(ActionListenerl)該方法可為JButton組件注冊(cè)ActionEvent事件監(jiān)聽(tīng)程序,方法的參數(shù)應(yīng)該是一個(gè)實(shí)現(xiàn)了ActionListener接口的類(lèi)的實(shí)例。2023/9/1141監(jiān)聽(tīng)程序?yàn)榱私邮詹⑻幚砟愁?lèi)用戶(hù)事件,組件必須注冊(cè)相應(yīng)的事件處對(duì)按鈕添加事件處理JToggleButton、JCheckBox和JRadioButton等具有兩種狀態(tài)的按鈕可以注冊(cè)兩類(lèi)事件監(jiān)聽(tīng)程序,分別是ActionEvent和ItemEvent事件監(jiān)聽(tīng)程序。當(dāng)窗口中有多個(gè)按鈕時(shí),需要為每個(gè)按鈕都注冊(cè)事件監(jiān)聽(tīng)程序。如何區(qū)分是哪個(gè)按鈕引發(fā)的事件呢?有兩個(gè)方法,一是使用事件類(lèi)中提供的getSource()方法,獲取事件源。二是使用ItemEvent類(lèi)中提供的getItem()方法,它的作用與getSource()方法相同。使用getSource()方法時(shí)需要根據(jù)按鈕的實(shí)際類(lèi)型進(jìn)行類(lèi)型轉(zhuǎn)換,如下所示:JRadioButtonrb=(JRadioButton)e.getSource();在事件處理程序中,通過(guò)isSelected()方法可以獲取按鈕的當(dāng)前狀態(tài),例如:ta.append("\nJCheckBoxButton1"+cb1.isSelected());2023/9/1142對(duì)按鈕添加事件處理JToggleButton、JCheck對(duì)組合框添加事件處理為組合框添加事件監(jiān)聽(tīng)程序后,可以實(shí)現(xiàn)對(duì)組合框中內(nèi)容的控制功能??捎糜诮M合框的方法。例如下面的命令可以將選中的選項(xiàng)插入到組合框jcb2中的第一個(gè)位置:jcb2.insertItemAt(jcb1.getSelectedItem(),0);其中g(shù)etSelectedItem()方法可獲得用戶(hù)的當(dāng)前選項(xiàng),在插入選項(xiàng)時(shí),選項(xiàng)的序號(hào)是從0開(kāi)始的。組合框上的用戶(hù)事件既可以通過(guò)ActionListener處理,也可以通過(guò)ItemListener處理,但是用戶(hù)的一次選擇操作,會(huì)引發(fā)兩個(gè)ItemEvent事件,因此通常是使用ActionListener處理。2023/9/1143對(duì)組合框添加事件處理為組合框添加事件監(jiān)聽(tīng)程序后,可以實(shí)現(xiàn)對(duì)對(duì)文本域和文本區(qū)添加事件處理在文本域中只允許輸入一行文本內(nèi)容,當(dāng)用戶(hù)按“Enter”或“Return”鍵時(shí),即表示輸入結(jié)束,此時(shí)引發(fā)ActionEvent事件,可為文本域注冊(cè)ActionListener對(duì)事件進(jìn)行處理。除此之外,也可根據(jù)需要為文本域注冊(cè)其他事件監(jiān)聽(tīng)程序。由于文本區(qū)中可輸入的文本是多行的,用戶(hù)按“Enter”或“Return”鍵的結(jié)果只是向緩沖區(qū)輸入一個(gè)字符,并不能表示輸入結(jié)束,因此,當(dāng)需要識(shí)別用戶(hù)“輸入完成”時(shí),通常要在文本區(qū)旁放置一個(gè)“Apply”或“Commit”之類(lèi)的按鈕。通過(guò)文本組件的getText()方法可以獲取文本域中的內(nèi)容,通過(guò)JTextArea的append(Stringstr)方法可以將相關(guān)信息添加在文本區(qū)的最后。2023/9/1144對(duì)文本域和文本區(qū)添加事件處理在文本域中只允許輸入一行文本內(nèi)對(duì)菜單添加事件處理當(dāng)菜單中的菜單項(xiàng)被選中時(shí),將會(huì)引發(fā)一個(gè)ActionEvent事件,因此通常需要為菜單項(xiàng)注冊(cè)ActionListener以便對(duì)事件作出反應(yīng)。當(dāng)菜單項(xiàng)的檢驗(yàn)狀態(tài)發(fā)生改變時(shí),會(huì)引發(fā)ItemEvent事件,可以使用ItemListener中的itemStateChanged()對(duì)此事件進(jìn)行響應(yīng)。通常在建立菜單系統(tǒng)時(shí),可以先創(chuàng)建一個(gè)菜單欄并通過(guò)setMenuBar()方法將其放入某個(gè)框架;然后創(chuàng)建若干個(gè)菜單,通過(guò)add()方法將它們加入菜單欄;最后創(chuàng)建各個(gè)菜單項(xiàng),通過(guò)add()方法將它們加入不同菜單。2023/9/1145對(duì)菜單添加事

溫馨提示

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

評(píng)論

0/150

提交評(píng)論