




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章圖形用戶界面設(shè)計(jì)
任務(wù)一:了解與圖形處理相關(guān)的包
任務(wù)三:掌握使用Swing組件進(jìn)行常用圖形界面設(shè)計(jì)
任務(wù)二:掌握J(rèn)avaApplet程序結(jié)構(gòu)及運(yùn)行
任務(wù)四:掌握掌握?qǐng)D形的繪制
任務(wù)五:實(shí)訓(xùn)九圖形界面編程綜合實(shí)訓(xùn)9.1任務(wù)一了解與圖形處理相關(guān)包
9.1.1java.awt包
圖9-1JavaAWT包Menu-PopupMenuCheckboxMenuItemjava.lang.ObjectBorderLayoutCardLayoutCheckboxGroupColorComponentDimensionEventFontFlowLayoutFontMetricsGraphicsGridBagConstraintsGridBagLayoutGridLayoutMenuComponentImageInsetsPointPolygonRectangleToolkitButtonCanvasCheckboxChoiceContainerLabelListScrollbarTextComponentPanelWindowScrollPaneAppletDialogFrameMenuBarMenuItemTextAreaTextField【例9-1】創(chuàng)建一個(gè)AWT窗體。import
java.awt.*;public
class
exa9_1
{
public
static
void
main(String
args[])
{
Frame
f=new
Frame("This
is
a
window!");
f.setLocation(100,200);
f.setSize(200,400);
f.setBackground(Color.red);
FlowLayout
fl=new
FlowLayout();
f.setLayout(fl);
Button
b1=new
Button("Ok!");
f.add(b1);
Button
b2=new
Button("Cancle!");
f.add(b2);
f.setVisible(true);
}}說明:(1)、任何基于AWT包的傳統(tǒng)窗體程序都必須導(dǎo)入相應(yīng)的AWT包以方便編程。(2)、對(duì)于默認(rèn)的新建窗體,其左上角總是對(duì)齊屏幕的左上角,大小只能顯示出標(biāo)題欄,所以,必須設(shè)置常見的用于顯示的屬性。(3)、對(duì)于默認(rèn)的新建窗體,并不直接顯示,要想使窗體顯示出來,必須設(shè)置visible屬性為真。(4)、構(gòu)造函數(shù)中的參數(shù)可以用于設(shè)置窗體的標(biāo)題,也可以使用setTitle()方法后設(shè)置。(5)、添加組件的方法add(Component),如:add(button1)。9.1.2java.swing包
圖9-2Swing包結(jié)構(gòu)圖【例9-2】創(chuàng)建一個(gè)Swing窗體。import
javax.swing.*;import
java.awt.*;public
class
exa9_2{
public
static
void
main(String
args[])
{
JFrame
f=new
JFrame("This
is
a
window!");
f.setLocation(100,200);
f.setSize(200,400);
FlowLayout
fl=new
FlowLayout();
f.getContentPane().setLayout(fl);
JButton[]
jb=new
JButton[10];
for(int
i=0;i<jb.length;i++)
{
jb[i]=new
JButton();
jb[i].setText(String.valueOf(i));
f.getContentPane().add(jb[i]);
}
f.setVisible(true);
}}請(qǐng)注意和上述awt窗體的異同點(diǎn):(1)、導(dǎo)入的包和AWT不一樣。(2)、swing組件類名稱和awt組件類名稱相比,往往都是多個(gè)大寫的“J”開頭。(3)、不再直接向窗體添加組件,而是通過內(nèi)容面板間接添加組件,所以,在添加組件的時(shí)候,需要取得當(dāng)前窗體的內(nèi)容面板。(4)、傳統(tǒng)AWT組件的一些方法不再鼓勵(lì)使用,相反,可以使用具有相似功能的新的方法,如按鈕的setLabel()方法被setText()取代,當(dāng)然,傳統(tǒng)方法仍然可以使用。(5)、在Swing引入setDefaultCloseOperation()之前,AWT關(guān)閉窗口必須使用程序監(jiān)視窗口,獲得相關(guān)操作并處理和做出響應(yīng)。9.1.3java.awt.event包
設(shè)計(jì)圖形用戶界面的目的是為了方便用戶與計(jì)算機(jī)進(jìn)行交流,比如當(dāng)用戶單擊命令按鈕時(shí),希望系統(tǒng)能完成一個(gè)動(dòng)作,實(shí)現(xiàn)某種功能,這些交互的功能是由后臺(tái)的事件處理接口來完成的,java.awt.event包就提供處理由AWT組件所激發(fā)的各類事件的接口和類。有關(guān)AWT事件模型的細(xì)節(jié),請(qǐng)參見java.awt.AWTEvent類。事件由事件源所激發(fā),向事件源注冊(cè)的事件偵聽器可接收有關(guān)特定事件類的通知,此包定義了事件和事件偵聽器,以及事件偵聽器適配器,它是讓事件偵聽器的編寫過程更為輕松的便捷類。
9.2任務(wù)二掌握javaApplet程序結(jié)構(gòu)及運(yùn)行
9.3.1Applet類及相關(guān)方法
1.Applet程序的工作原理網(wǎng)絡(luò)瀏覽器HTML文件:……………...嵌入Applet………………………………..網(wǎng)絡(luò)服務(wù)器瀏覽網(wǎng)頁下載Applet字節(jié)碼圖9-4Applet工作原理
2.Applet類中的主要方法:
(1)、publicvoidinit()
(2)、publicvoidstart()(3)、publicvoidstop()
(4)、publicvoiddestroy()(5)、publicvoidpaint(Graphicsg)9.2.2Applet程序建立及運(yùn)行過程
1.源程序的編輯與編譯2.代碼嵌入3.Applet的運(yùn)行
9.3任務(wù)三掌握使用Swing組件進(jìn)行常用圖形界面設(shè)計(jì)Swing組件類型很多,按功能分類如下:(1)、頂層容器:有JFrame(框架),JWindow(窗體),JDialog(對(duì)話框)和JApplet(小應(yīng)用程序)。它們屬于swing中的四個(gè)重量級(jí)組件。頂層容器的重要性在于,除了Menubar所有的GUI組件都需要被包含在頂層容器的一個(gè)默認(rèn)容器ContentPane中。(2)、中間容器(又叫簡單容器):有JPanel(面板),JSplitPane(拆分面板),JToolBar(工具欄),JScrollPane(滾動(dòng)面板)和JTabbedPane(頁簽式面板)等。中間容器介于頂層容器與一般組件之間,是用來裝別的組件用的,它是要被添加在頂層容器中的,能夠使被它承載的組件能合適地、有組織地呈現(xiàn)出來。(3)、特殊容器:有JLayeredPanel、JRootPaneInternalFrame等,它們也是中間容器,但有著特殊的作用。(4)、基本組件:組件是一個(gè)可以以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的對(duì)象,例如JButton,JLabel,JList等,是最基本圖形用戶界面的組成部分。9.3.1窗口容器類JFrame使用
1.窗口類容器Swing提供了四個(gè)在屏幕上顯示窗口的組件:JWindow、JFrame、JApplet和JDialog。這四個(gè)組件統(tǒng)稱為頂層組件,它們相互之間的區(qū)別不明顯,因?yàn)槠溆嗟膕wing組件都必須依附在此四組件之一上才能顯示出來,又稱之為窗體類容器。2.JFrame(窗體)類窗體類JFrame還叫框架類,是一種帶有標(biāo)題欄、菜單和邊界的窗口,而且允許調(diào)整大小,是最重要的頂層容器之一,而且是應(yīng)用程序構(gòu)建框架時(shí)必須使用的頂層容器。JFrame類是AWT中Frame類的子類,它還加入了一些Swing所獨(dú)有的特性。(1)、構(gòu)造方法:JFrame():構(gòu)造一個(gè)新的不可見的窗體對(duì)象JFrame(Stringtitle):構(gòu)造一個(gè)新的、不可見的、具有指定標(biāo)題的窗體對(duì)象(2)、常用方法:publicvoidsetBound(intx,inty,intw,inth):設(shè)置窗口左上角位置和窗口大小publicvoidsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):設(shè)定窗口響應(yīng)用戶的關(guān)閉操作publicvoidsetTitle(Stringtitle):設(shè)置窗口標(biāo)題publicvoidsetResizable(Boolenboolean):設(shè)置窗口是否可調(diào)大小publicvoidsetLocation(intx,inty):設(shè)置窗口左上角位置publicvoidpack():用緊湊方式自動(dòng)設(shè)定窗口大小【例9-4】創(chuàng)建一個(gè)帶組件的窗體實(shí)例。importjavax.swing.*;publicclassexa9_4{publicstaticvoidmain(String[]args){//創(chuàng)建一個(gè)帶標(biāo)題的窗體
JFramejf1=newJFrame("這是窗體JFrame");JLabeljb1=newJLabel("歡迎你");f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSEjf1.setLocation(300,200);//設(shè)置窗體的顯示位置
jf1.setSize(320,240);//設(shè)置窗體的尺寸
jf1.getContentPane().add(jb1);jf1.setVisible(true);//設(shè)置窗體的可見性
}}9.3.2容器的布局
Java常用的幾種布局管理器有:FlowLayout——流式布局BorderLayout——邊界布局GridLayout——網(wǎng)格布局(GridLayout)CardLayout——卡片布局GridBagLayout——網(wǎng)格包布局1.FlowLayout流式布局FlowLayout類的構(gòu)造函數(shù):FlowLayout():使用居中方式構(gòu)造流式布局,并且組件間默認(rèn)的水平和垂直間隔是5FlowLayout(intalign):使用給定的對(duì)齊方式構(gòu)造流式布局,并且組件間默認(rèn)的水平和垂直間隔是5FlowLayout(intalign,inthgap,intvgap):使用給定的對(duì)齊方式構(gòu)造流式布局,并且指定組件間垂直和水平間隔FlowLayout類的常用函數(shù):intgetAlignment():獲得對(duì)齊方式voidsetAlignment(intalign):設(shè)置對(duì)齊方式intgetHgap():獲得組件間的水平間隔voidsetHgap(intvgap):設(shè)置組件間的水平間隔intgetVgap():獲得組件間的垂直間隔voidsetVgap(intvgap):設(shè)置組件間的垂直間隔voidremoveLayoutComponentcomp):從布局中移除指定的組件【例9-5】FlowLayout流式布局管理器舉例。import
javax.swing.*;import
java.awt.*;public
class
exa9_5
{
public
static
void
main(String
[]
args)
{
JFrame
f=new
JFrame("Hello!");
f.setLocation(10,100);
f.setSize(600,400);
f.getContentPane().setLayout(new
FlowLayout());
JButton
jb1=new
JButton("Click
1");
JButton
jb2=new
JButton("Click
2");
JButton
jb3=new
JButton("Click
3");
f.getContentPane().add(jb1);
f.getContentPane().add(jb2);
f.getContentPane().add(jb3);
f.setVisible(true);
}
}【程序分析】(1)、改變窗口的大小,那么組件的排列方式也會(huì)跟著變化。(2)、組件的順序和組件的尺寸是確定的,不隨窗口而改變。(3)、當(dāng)然,流式布局管理器類也可以定義很多布局屬性,從而進(jìn)行必要的一些樣式調(diào)整,如:將上例的A行改成f.getContentPane().setLayout(new
FlowLayout(1,10,100))。2.BorderLayout邊界布局BorderLayout類的構(gòu)造函數(shù):publicBorderlayout():構(gòu)造一個(gè)邊界布局管理器publicBorderlayout(inthgap,intvgap):構(gòu)造一個(gè)邊界布局管理器,并且指定組件之間的垂直和水平間隔構(gòu)造函數(shù)的參數(shù)hgap代表水平間距;vgap代表垂直間距。BorderLayout類的常用函數(shù):intgetHgap():獲得組件間的水平間隔voidsetHgap(intvgap):設(shè)置組件間的水平間隔intgetVgap():獲得組件間的垂直間隔voidsetVgap(intvgap):設(shè)置組件間的垂直間隔voidremoveLayoutComponentcomp):從布局中移除指定的組件【例9-6】BorderLayout布局管理器應(yīng)用舉例。import
javax.swing.*;import
java.awt.*;public
classexa9_6{
public
static
void
main(String
[]
args)
{
JFrame
f=new
JFrame("Hello!");
f.setLocation(20,200);
f.setSize(200,200);
f.getContentPane().setLayout(new
BorderLayout(5,5));
JButton
jb1=new
JButton("1");
JButton
jb2=new
JButton("2");
JButton
jb3=new
JButton("3");
JButton
jb4=new
JButton("4");
JButton
jb5=new
JButton("5");
f.getContentPane().add(jb1,BorderLayout.NORTH);
f.getContentPane().add(jb2,BorderLayout.SOUTH);
f.getContentPane().add(jb3,BorderLayout.EAST);
f.getContentPane().add(jb4,BorderLayout.WEST);
f.getContentPane().add(jb5,BorderLayout.CENTER);
f.setVisible(true);
}
}【程序分析】
程序中定義了五個(gè)按鈕,分別放置在BorderLayout布局的5個(gè)區(qū)域內(nèi),各個(gè)區(qū)域的間距為5,每個(gè)按鈕大小自動(dòng)調(diào)整到各個(gè)區(qū)域的大小,此窗口有以下特點(diǎn):(1)改變窗口的大小,組件的排列方式保持不變(2)組件的大小會(huì)隨窗口而改變(3)NORTH與SOUTH有確定的高度,WEST與EAST有確定的寬度,實(shí)際編程時(shí),不一定所有的區(qū)域都有組件,如果四周的區(qū)域(West、East、North、South區(qū)域)沒有組件,則由Center區(qū)域去補(bǔ)充,但是如果Center區(qū)域沒有組件,則保持空白,請(qǐng)?jiān)囍薷某绦蛴^察效果。3.GridLayout網(wǎng)格布局GridLayout類的構(gòu)造函數(shù):publicGridLayout():構(gòu)造一行一列的網(wǎng)格布局publicGridLayout(introw,intcolumns):構(gòu)造具有指定行數(shù)和列數(shù)的網(wǎng)格布局publicGridLayout(introw,intcolumns,inthgap,intvgap):構(gòu)造具有指定行數(shù)和列數(shù)的網(wǎng)格布局,并指定組件間的水平垂直間隔GridLayout類的常用函數(shù):initgetRows():獲得此布局的行數(shù)voidsetRows(introws):設(shè)置此布局的行數(shù)initgetColumns():獲得此布局的列數(shù)voidsetColumns(intcols):設(shè)置此布局的列數(shù)intgetHgap():獲得組件間的水平間隔voidsetHgap(intvgap):設(shè)置組件間的水平間隔intgetVgap():獲得組件間的垂直間隔voidsetVgap(intvgap):設(shè)置組件間的垂直間隔voidremoveLayoutComponentcomp):從布局中移除指定的組件4.CardLayout卡片布局CardLayout類的構(gòu)造函數(shù):publicCardLayout():構(gòu)造一個(gè)CardLayout布局publicCardLayout(inthgap,intvgap):構(gòu)造個(gè)CardLayout布局,且指定各個(gè)組件間的水平和垂直間隔CardLayout類的常用函數(shù):voidfirst(Containerc):顯示第一個(gè)容器中的組件voidlast(Containerc):顯示最后一個(gè)容器中的組件voidnext(Containerc):顯示下一個(gè)容器中的組件voidprevious(Containerc):顯示上一個(gè)容器中的組件9.3.3字體與顏色的使用
Font字體類的使用Font類的構(gòu)造函數(shù)如下:publicFont(Stringname,intstye,intsize);其中:name是字體的名稱,style是字體的風(fēng)格,size是字體的大小。style的取值為Font.BOLD—粗體,Font.ITALIC—斜體,Font.PLAIN—無格式,Font.ITALIC+Font.BOLD—粗斜體四者之一。2.Color顏色類的使用要為字體設(shè)置顏色可以使用Color類。每個(gè)Color對(duì)象代表一種顏色,使用方法有兩種:(1)、直接使用Color類中已提供的顏色常量,如Color.black,Color.BLUE,Color.green,Color.yellow等.(2)、也可以通過調(diào)配三原色——紅、綠、藍(lán)三色的比例來創(chuàng)建自己想要的顏色,如RGB。在RGB中,通過設(shè)定紅黃藍(lán)三種顏色的取值來獲得自己想要的顏色,三種顏色的取值范圍都是在0-255之間9.3.4按鈕按鈕類JButton的構(gòu)造方法:JButton():創(chuàng)建空文本的按鈕JButton(Stringc):創(chuàng)建帶指定文本的按鈕JButton(Iconimage):創(chuàng)建帶指定圖標(biāo)的按鈕JButton(Stringc,Iconimage):創(chuàng)建帶指定文本和圖標(biāo)的按鈕9.3.5文本框、文本區(qū)和標(biāo)簽1.文本框(JTextField)文本框JTextField的構(gòu)造方法:JTextField():創(chuàng)建空白文本的文本框JTextField(intcolumns):創(chuàng)建指定寬度的空白文本域JTextField(Stringtext):創(chuàng)建指定文本的文本框JTextField(Stringtext,intcolumns):指定寬度并初始化文本文本框其它常用方法:publicvoidsetText(Stringc):設(shè)置顯示文本publicStringgetText():取得顯示文本publicvoidsetFont(Fontf):字體設(shè)置publicvoidsetForeground(Colorc):前景色設(shè)置
publicvoid setEditable(booleanb):是否可編輯
publicString getSelectedText():獲得選擇的文本publicvoidsetEchoChar(charc):設(shè)置回顯字符另外常用一種用于輸入密碼的文本框類JPasswordField是文本框的一個(gè)子類,通常要用它的setEchoChar(char)方法設(shè)置回顯字符。例如:JPasswordFielduserpwd=newJPasswordField();userpwd.setEchoChar(‘*’);2.文本區(qū)(JTextArea)文本區(qū)是可以完成多行輸入的可編輯文本框(JTextArea)。文本區(qū)JTextArea的構(gòu)造方法:JTextArea():創(chuàng)建一個(gè)新的文本區(qū)組件JTextArea(introws,intcolumns):創(chuàng)建指定行數(shù)r列數(shù)cJTextArea(Stringc):創(chuàng)建指定初始化文本JTextArea(Stringc,introws,intcolumns):創(chuàng)建指定初始化文本及文本的行數(shù)和列數(shù)
常用設(shè)置方法:publicvoidsetLineWrap(booleanwrap):設(shè)置是否自動(dòng)換行publicvoidsetRows(introws):設(shè)置行數(shù)publicvoidsetColumns(intcolumns):設(shè)置列數(shù)publicvoidappend(Stringc):將指定文本追加到該組件結(jié)尾publicvoidinsert(Stringc,inti):將指定文本插入文本區(qū)的指定行publicvoidsetWrapStyleWord(Booleanb):設(shè)置換行方式3.標(biāo)簽(JLabel)用來顯示文字、圖標(biāo),還可以文字與圖標(biāo)同時(shí)顯示。標(biāo)簽JLabel的構(gòu)造方法:JLabel():創(chuàng)建一個(gè)空標(biāo)簽JLabel(Stringc):創(chuàng)建指定文本的標(biāo)簽JLabel(Stringc,Inti):創(chuàng)建指定文本的標(biāo)簽,并且指定對(duì)齊方式(取值為LEFT、CENTER、RIGHT)JLabel(Stringc,Iconimage,Inti):創(chuàng)建指定文本、圖標(biāo)和對(duì)齊方式的標(biāo)簽標(biāo)簽常用設(shè)置方法:設(shè)置標(biāo)簽顯示文本:publicvoidsetText(Stringc)取得標(biāo)簽顯示文本:publicStringgetText()字體設(shè)置:publicvoidsetFont(Fontf)前景色設(shè)置:publicvoidsetForeground(Colorc)9.3.6事件處理模式與事件包
1.事件處理模式這個(gè)模式涉及的主要概念:(1)、事件(Event)——它描述在用戶界面的用戶交互行為所產(chǎn)生的一種效果,以類的形式出現(xiàn),例如:鼠標(biāo)操作對(duì)應(yīng)的事件類是MouseEvent.(2)、事件源(EventSource)——產(chǎn)生事件的場(chǎng)所,是一種組件對(duì)象。(3)、事件處理方法(Eventhandler)——接收、解析和處理事件類對(duì)象,實(shí)現(xiàn)和用戶交互的方法。(4)、事件監(jiān)聽器(EventListener)——調(diào)用事件處理方法的對(duì)象。2.事件處理的實(shí)現(xiàn)原理事件源(如按鈕)事件監(jiān)聽器A事件監(jiān)聽器B事件監(jiān)聽器X事件處理者1事件處理者2事件處理者N①②③④
使用授權(quán)處理模式進(jìn)行事件處理主要有如圖9-17所示幾步::事件源(如按鈕)事件監(jiān)聽器A事件監(jiān)聽器B事件監(jiān)聽器X事件處理者1事件處理者2事件處理者N①②③④圖9-17事件處理原理3.事件包ActionEventAdjustmentEventComponentEventItemEventTextEventFocusEventInputEventContainerEventWindowEventKeyEventMouseEventjava.util.EventObjectjava.awt.AWTEvent圖9-18AWTEvent類的相關(guān)事件9.3.7復(fù)選框與單選按鈕1.復(fù)選框復(fù)選框JCheckBox的構(gòu)造函數(shù):JCheckBox(Stringc):創(chuàng)建帶有文本標(biāo)簽的復(fù)選框JCheckBox(Stringc,Booleanstate):創(chuàng)建帶文本和初始狀態(tài)的復(fù)選框JCheckBox(Iconimage):創(chuàng)建帶圖標(biāo)的復(fù)選框JCheckBox(Iconimage,Booleanstate):創(chuàng)建帶圖標(biāo)和初始狀態(tài)的復(fù)選框JCheckBox(Stringc,Iconimage):創(chuàng)建帶文本和圖標(biāo)的復(fù)選框JCheckBox(Stringc,Iconimage,Booleanstate):創(chuàng)建帶文本、圖標(biāo)和初始狀態(tài)的復(fù)選框2.單選按鈕
JRadioButton類具有和JCheckBox相同參數(shù)和功能的構(gòu)造函數(shù)。
JRadioButton類和JCheckBox共同的方法有:
setSelected(Boolean):設(shè)置選中狀態(tài)
isSelected():返回是否選中狀態(tài)為了對(duì)復(fù)選框進(jìn)行分組,也可以使用使用ButtonGroup進(jìn)行分類.
注意初始化單選按鈕時(shí),一組中只能有一個(gè)狀態(tài)設(shè)為true。當(dāng)用戶單擊單選按鈕時(shí)既能產(chǎn)生一個(gè)動(dòng)作事件(ActionEvent),也能產(chǎn)生一個(gè)選項(xiàng)事件(ItemEvent),因此創(chuàng)建單選按鈕時(shí)既可以注冊(cè)動(dòng)作監(jiān)聽器還可以注冊(cè)選項(xiàng)監(jiān)聽器。9.3.8列表框和組合框1.列表框(JList)列表框JList的構(gòu)造函數(shù):publicJList():創(chuàng)建一個(gè)新的列表框publicJList(ListModeldataModel):創(chuàng)建一個(gè)列表框,用它顯示指定模型中的元素。publicJList(Object[]listData):創(chuàng)建一個(gè)列表框,以顯示指定數(shù)組listData的元素。JList不支持滾動(dòng),要啟用滾動(dòng),可使用下列代碼:
JScrollPanemyScrollPane=newJScrollPane(); myScrollPane.getViewport().setView(dataList);2.組合框(JComboBox)JComboBox具有和JList相同參數(shù)和功能的構(gòu)造函數(shù)。JComboBox的相關(guān)方法:addItem(int):向組合框內(nèi)添加選項(xiàng)getItemAt(int):返回int指定的索引位置的列表項(xiàng)目的文本(從0開始)。getItemCount():返回列表中的項(xiàng)目的數(shù)量getSelectedIndex():返回列表中的當(dāng)前選擇項(xiàng)目的索引位置getSelectedItem():返回當(dāng)前選擇項(xiàng)目的文本getSelectedIndex(int):選擇指定索引位置的項(xiàng)getSelectedIndex(Object):選擇列表中指定的對(duì)象setMaximumRowCount(int):設(shè)置在組合框中的一次顯示的行的數(shù)量9.3.9對(duì)話框和文件選擇對(duì)話框?qū)υ捒蚍譃槟J綄?duì)話框和無模式對(duì)話框。模式對(duì)話框必須在用戶處理完后才允許用戶與主窗口繼續(xù)進(jìn)行交互。無模式對(duì)話框允許用戶同時(shí)在對(duì)話框和程序剩余部分中輸入信息。
JavaSwing中創(chuàng)建對(duì)話框使用JOptionPane和JDialog兩個(gè)類,前者用來創(chuàng)建標(biāo)準(zhǔn)對(duì)話框,后者用于創(chuàng)建用戶自定義的對(duì)話框。標(biāo)準(zhǔn)對(duì)話框都是模態(tài)對(duì)話框,后者JDialog創(chuàng)建的對(duì)話框既可是模態(tài)的也可是非模態(tài)的對(duì)話框。1.JOptionPane對(duì)話框類在Swing中,JOptionPane提供了四種簡單的對(duì)話框:(1)、消息對(duì)話框(MessageDialog)。(2)、確認(rèn)對(duì)話框(ConfirmDialog)。(3)、選項(xiàng)對(duì)話框(OptionDialog)。(4)、輸入對(duì)話框(InputDialog)。這四個(gè)標(biāo)準(zhǔn)對(duì)話框分別用于提出問題,警告用戶,提供簡要的重要消息的小窗口2.JDialog對(duì)話框類JDialog類的構(gòu)造方法:JDialog():建立一個(gè)無模態(tài)的對(duì)話框,沒有title也不屬于任何事件窗口組件。JDialog(Dialogowner):建立一個(gè)屬于Dialog,non-modal形式,也沒有title的對(duì)話框。JDialog(Dialogowner,Booleanmodal):建立一個(gè)屬于Dialog的對(duì)話框,可決定modal形式,但沒有title。JDialog(Dialogowner,Stringtitle):建立一個(gè)屬于Dialog組件的對(duì)話框,為non-modal形式,對(duì)話框上有title。JDialog(Dialogowner,Stringtitle,Booleanmodal):建立一個(gè)屬于Dialog組件的對(duì)話框,可決定modal形式,且對(duì)話框上有title。JDialog(Frameowner):建立一個(gè)屬于Frame組件的對(duì)話框,為non-modal形式,也沒有title。JDialog(Frameowner,Booleanmodal):建立一個(gè)屬于Frame組件的對(duì)話框,可決定modal形式,但沒有title。JDialog(Frameowner,Stringtitle):建立一個(gè)屬于Frame組件的對(duì)話框,為non-modal形式,對(duì)話框上有title。JDialog(Frameowner,Stringtitle,Booleanmodal):建立一個(gè)屬于Frame組件的對(duì)話框,可決定modal形式,且對(duì)話框上有title。3.JFileChooser文件選擇對(duì)話框類:JFileChooser類的構(gòu)造函數(shù):JFileChooser():構(gòu)造一個(gè)指向用戶默認(rèn)目錄的JFileChooser,此默認(rèn)目錄通常取決于操作系統(tǒng),如win是我的文檔,unix上則是用戶主目錄。JFileChooser(StringcurrentDirectoryPath):構(gòu)造一個(gè)指向給定路徑的JFileChooser。JFileChooser(FilecurrentDirectory):給定的File作為路徑來構(gòu)造一個(gè)JFileChooser。常用方法如下:publicintshowDialog(Componentparent,Stringtext):顯示文件選擇對(duì)話框,用戶可自定義文本(默認(rèn)“打開”)。publicintshowSaveDialog(Componentparent):顯示文件保存對(duì)話框。publicFilegetSelectedFile():返回所選擇的文件。9.3.10菜單在GUI界面中,菜單一般位于窗口上方標(biāo)題欄下面的位置,它是一個(gè)圖形用戶界面不可缺少的組成部分。一個(gè)菜單由三部分組成:JMenuBar——菜單欄,在其中可以加入菜單(JMenu)JMenu——菜單,其中可加入菜單項(xiàng)(JMenuItem)和菜單(JMenu)JMenuItem——菜單項(xiàng),直接指向一個(gè)具體的操作菜單、菜單項(xiàng)和菜單欄的構(gòu)造方法:菜單欄:JMenuBar()菜單:JMenu(Strings)菜單項(xiàng):JMenuItem(Strings)1.菜單條(JMenuBar)一個(gè)菜單條組件是一個(gè)水平菜單。菜單條只能加入到一個(gè)框架中,一個(gè)菜單條由多個(gè)菜單(JMenu)組成,每個(gè)JMenu在JMenubar中都表示為字符串,如:JFramef=newJFrame("JMenuBar");JMenuBarmb=newJMenuBar();f.setJMenuBar(mb);在一個(gè)時(shí)刻,一個(gè)框架中可以顯示一個(gè)菜單條,菜單條不支持監(jiān)聽者。2.菜單(JMenu)提供了一個(gè)基本的下拉式菜單,它可以加入到一個(gè)菜單條或者另一個(gè)菜單中。它在菜單欄下以文本字符串形式顯示,而在用戶單擊它時(shí),則以彈出式菜單顯示.3.菜單項(xiàng)(JMenuItem)菜單項(xiàng)組件通常被加入到菜單中,以構(gòu)成一個(gè)完整的菜單,以文本字符串形式顯示。JMenuItem的外觀可以修改,如字體、顏色、背景、邊框等。除字符串外,在JMenuItem中還可以添加圖標(biāo)。通常我們將一個(gè)ActionListener加入到一個(gè)菜單項(xiàng)對(duì)象中,以提供菜單的行為。4.復(fù)選菜單項(xiàng)(JCheckboxMenuItem)一個(gè)可復(fù)選的菜單項(xiàng),可以在菜單上有選項(xiàng)(“開”或“關(guān)”)。應(yīng)當(dāng)用ItemListener接口來監(jiān)視復(fù)選菜單。當(dāng)復(fù)選框狀態(tài)發(fā)生改變時(shí),就會(huì)調(diào)用itemStateChanged()方法。JMenum1=newJMenu("File");JMenuItemmi1=newJMenuItem("Save");JCheckboxMenuItemmi2=newJCheckboxMenuItem("checkbox1");mi1.addItemListener(this);mi2.addItemListener(this);m1.add(mi1);m1.add(mi2);5.單選按鈕菜單項(xiàng)(JRadioButtonMenuItem)
它是屬于一組菜單項(xiàng)中的一個(gè)菜單項(xiàng),該組中只能選擇一個(gè)項(xiàng)。被選擇的項(xiàng)顯示其選擇狀態(tài)。選擇此項(xiàng)的同時(shí),其他任何以前被選擇的項(xiàng)都切換到未選擇狀態(tài)。要控制一組單選按鈕菜單項(xiàng)的選擇狀態(tài),請(qǐng)使用JButtonGroup對(duì)象。JButtonGroupgroup=newJButtonGroup();JRadioButtonMenuItemmi3=newJRadioButtonMenuItem("Forward");group.add(mi3);m1.add(mi3);6.彈出式菜單(JPopupMenu)彈出式菜單提供了一種獨(dú)立的菜單,它可以在任何組件上顯示??梢詫⒉藛雾?xiàng)和菜單加入到彈出式菜單中去。7.菜單項(xiàng)的使用狀態(tài)菜單項(xiàng)能夠被選取取決于菜單項(xiàng)的啟用和禁用狀態(tài):mi3.setEnabled(false);//初始設(shè)置“Save”菜單項(xiàng)為禁用狀態(tài)8.快捷鍵和加速器快捷鍵顯示為帶有下劃線的字母,加速器則顯示為菜單項(xiàng)旁邊的組合鍵。m1.setMnemonic('F');//設(shè)置菜單的快捷鍵JMenuItemexitItem=newJMenuItem("Exit",'T');//設(shè)置“Exit”菜單項(xiàng)的快捷鍵為“T”。exitItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_T,InputEvent.CTRL_MASK));//設(shè)置“Exit”菜單項(xiàng)的加速器為“Ctrl+T”。9.4任務(wù)四掌握?qǐng)D形的繪制9.4.1坐標(biāo)系統(tǒng)(0,0)X軸圖9-27Java窗口坐標(biāo)系9.4.2顯示字符串字符串繪制方法:publicvoiddrawString(Stringstr,intx,inty):在(x,y)點(diǎn)顯示字符串str。publicvoiddrawChars(charc[],ints,intn,intx,inty):在(x,y)點(diǎn)顯示字符數(shù)組c從位置s開始的n個(gè)內(nèi)容。publicvoiddrawBytes(byteb[],ints,intn,intx,inty):在(x,y)點(diǎn)顯示字節(jié)數(shù)組b從位置s開始的n個(gè)內(nèi)容。9.4.3畫直線與矩形Graphics類中用于繪制直線與矩形的方法如下:publicabstractvoiddrawLine(intx1,inty1,intx2,inty2):在點(diǎn)(x1,y1)和(x2,y2)之間用當(dāng)前顏色繪制線段。publicvoiddrawRect(intx,inty,intwidth,intheight):以點(diǎn)(x,y)為左上角坐標(biāo),width和height為寬度和高度,用當(dāng)前顏色畫矩形。publicabstactvoidfillRect(intx,inty,intwidth,intheight):以點(diǎn)(x,y)為左上角坐標(biāo),width和height為寬度和高度,用當(dāng)前顏色畫一個(gè)實(shí)心的矩形。publicabstactvoidclearRect(intx,inty,intwidth,intheight):以點(diǎn)(x,y)為左上角坐標(biāo),width和height為寬度和高度,用當(dāng)前背景顏色畫一個(gè)實(shí)心的矩形。此方法用于清除某個(gè)矩形顯示區(qū)域。publicabstactvoiddrawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight):以點(diǎn)(x,y)為左上角坐標(biāo),width和height為寬度和高度,用當(dāng)前顏色畫圓角矩形。publicabstactvoidfillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight):以點(diǎn)(x,y)為左上角坐標(biāo),width和height為寬度和高度,用當(dāng)前顏色畫一個(gè)實(shí)心的圓角矩形。publicvoiddraw3Drect(intx,inty,intwidth,inthei
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度股權(quán)轉(zhuǎn)讓及經(jīng)營權(quán)轉(zhuǎn)讓一體化協(xié)議
- 二零二五年度居民住房租賃合同租賃房屋租賃期限調(diào)整協(xié)議
- 二零二五年度保密信息處理保密合同
- 綠茶茶園承包經(jīng)營合同(2025年度)含茶樹病蟲害防治服務(wù)
- 二零二五年度農(nóng)村宅基地買賣合同協(xié)議書(農(nóng)村產(chǎn)權(quán)交易平臺(tái))
- 二零二五年度個(gè)人私下股權(quán)轉(zhuǎn)讓及投資風(fēng)險(xiǎn)分擔(dān)協(xié)議
- 代理銷售合同市場(chǎng)拓展策略約定事項(xiàng)說明
- 三字經(jīng)儒家經(jīng)典讀后感
- 歷史人物事件記憶題
- 企校合作辦學(xué)合同
- 餐飲業(yè)供應(yīng)鏈管理指南
- 2025高考數(shù)學(xué)專項(xiàng)復(fù)習(xí):導(dǎo)數(shù)的27個(gè)模塊專練(含答案)
- 涵洞工程專項(xiàng)施工方案
- DB32-T 4107-2021 民用建筑節(jié)能工程熱工性能現(xiàn)場(chǎng)檢測(cè)標(biāo)準(zhǔn)
- 七年級(jí)上冊(cè)生物2024-2025學(xué)年新人教版期末綜合試卷(含答案)
- 2024年國家電網(wǎng)招聘之電工類考試題庫附答案(滿分必刷)
- 晶體缺陷獲獎(jiǎng)?wù)n件
- 燃?xì)庥镁垡蚁┕艿篮附庸に囋u(píng)定DB41-T 1825-2019
- (人教PEP2024版)英語一年級(jí)上冊(cè)Unit 2 教學(xué)課件(新教材)
- 經(jīng)銷商轉(zhuǎn)戶證明范文
- DB23T 3761-2024 建設(shè)工程對(duì)水文監(jiān)測(cè)影響評(píng)價(jià)報(bào)告編制規(guī)程
評(píng)論
0/150
提交評(píng)論