




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java程序設(shè)計(jì)第16章用戶界面開發(fā)學(xué)習(xí)目標(biāo)利用JFrame創(chuàng)建可定制的應(yīng)用程序主窗口理解組件和容器的差異,區(qū)別頂級(jí)容器和中間容器的作用能夠靈活應(yīng)用布局管理器組織界面如何向容器中添加和布局組件理解事件機(jī)制,掌握各類監(jiān)聽(tīng)器的創(chuàng)建、注冊(cè)和處理掌握基本的圖形處理程序開發(fā)16.1.1從AWT到Swing抽象窗口工具包AWT(AbstractWindowToolkit)是Java類庫(kù)程序提供的建立圖形用戶界面GUI(GraphicsUserInterface)工具集,Swing類提供了GUI編程較為通用的部分,被統(tǒng)稱為JavaFoundationClasses(Java語(yǔ)言基礎(chǔ)類,簡(jiǎn)稱JFC)。Swing采用了一種MVC的設(shè)計(jì)范式,即"模型-視圖-控制"(Model-View-Controller),其中模型用來(lái)保存內(nèi)容,視圖用來(lái)顯示內(nèi)容,控制器用來(lái)控制用戶輸入。16.1.2模型-視圖-控制體系
Swing勝過(guò)AWT的主要優(yōu)勢(shì)在于MVC體系結(jié)構(gòu)的普遍使用。在一個(gè)MVC用戶界面中,存在三個(gè)相互通信的對(duì)象:模型、視圖和控件。模型是指定的邏輯表示法視圖是模型的可視化表示法控件則指定了如何處理用戶輸入。當(dāng)模型發(fā)生改變時(shí),它會(huì)通知所有依賴它的視圖,視圖使用控件指定其響應(yīng)機(jī)制。16.1.3創(chuàng)建第一個(gè)Swing窗口
publicclassFirstSwingApp{publicstaticvoidmain(String[]args){//創(chuàng)建一個(gè)頂層容器并設(shè)置其標(biāo)題為FirstSwingApp。JFrameframe=newJFrame("FirstSwingApp");frame.add(newJButton(“OK”));//向窗口中增加一個(gè)按鈕//設(shè)置窗口中右上角的關(guān)閉按鈕圖標(biāo)的缺省操作事件是關(guān)閉程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(600,400);//設(shè)置窗口對(duì)象的尺寸/讓窗口對(duì)象自行決定以最合適的方式顯示窗口,并不依賴前面的定義尺寸frame.pack();frame.setVisible(true);//最后,讓窗口對(duì)象可見(jiàn)}}圖16-1JFrame的繼承層次16.2容器和基本組件
組件(Component)代表一種可以顯示在屏幕上的圖形元素,也是一種能與用戶進(jìn)行交互的Java對(duì)象,例如一個(gè)按鈕,一個(gè)標(biāo)簽等。組件不能獨(dú)立地顯示出來(lái),必須將組件放在一定的容器中才可以顯示出來(lái)。容器(Container)容器類繼承于Component類,其本身及其子類可以容納其他組件對(duì)象Swing應(yīng)用程序的容器層次設(shè)計(jì)GUI時(shí),都有用于放置可視化組件的主窗口。Container對(duì)象可用于將組件組合在一起。容器中的組件根據(jù)特定布局排列。Swing中的容器有兩類:-頂級(jí)容器-中間容器頂級(jí)容器JFrame:用于框架窗口的類,此窗口帶有邊框、標(biāo)題、用于關(guān)閉和最小化窗口的圖標(biāo)等。帶GUI的應(yīng)用程序通常至少使用一個(gè)框架窗口。JDialog:用于對(duì)話框的類。JApplet:用于使用Swing組件的JavaApplet的類。中間容器JPanel:最靈活、最常用的中間容器。JScrollPane:與JPanel類似,但還可在大的組件或可擴(kuò)展組件周圍提供滾動(dòng)條。JTabbedPane:包含多個(gè)組件,但一次只顯示一個(gè)組件。用戶可在組件之間方便地切換。JToolBar:按行或列排列一組組件(通常是按鈕)。Swing類結(jié)構(gòu)圖Swing有很多組件,這些組件從功能上分為以下幾類。頂層容器:JFrame,JApplet,JDialog,JWindow共4個(gè)。中間容器:JPanel,Box,JScrollPane,JSplitPane,JToolBar。特殊容器:在GUI上起特殊作用的中間層,如JInternalFrame,JLayeredPane,JRootPane。基本控件:實(shí)現(xiàn)人機(jī)交互的組件,如JButton,JComboBox,JList,JMenu,JSlider,
JTextField等。不可編輯信息的顯示:向用戶顯示不可編輯信息的組件,例如JLabel,JProgressBar,JToolTip等。可編輯信息的顯示:向用戶顯示能被編輯的格式化信息的組件,如JColorChooser,JFileChoose,
JFileChooser,
JTable,
JTextArea等。16.2.1設(shè)計(jì)主窗口
可以作為容器的類很多,但是能夠作為頂級(jí)容器控制整個(gè)界面的只有JFrame等四個(gè),而這4個(gè)頂級(jí)容器中,JApplet類主要開發(fā)用于在瀏覽器中的applet小程序JWindow它沒(méi)有標(biāo)題欄、窗口管理按鈕或者其他與JFrame關(guān)聯(lián)的修飾,并不適合做主窗口JFrame對(duì)象是用來(lái)代表應(yīng)用程序的主窗口的最佳選擇JDialog通常需要一個(gè)JFrame對(duì)象來(lái)構(gòu)造。16.1.3創(chuàng)建第一個(gè)Swing窗口
importjavax.swing.JFrame;publicclassMyFirstSwingAppextendsJFrame{publicMyFirstSwingApp(Stringtitle,intwidth,intheight){ super(title);//調(diào)用父類構(gòu)造方法,同時(shí)設(shè)置窗口標(biāo)題
//設(shè)置窗口的顯示尺寸
this.setSize(width,height); //設(shè)置窗口的關(guān)閉動(dòng)作為關(guān)閉整個(gè)程序
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //一般在構(gòu)造方法中組織自己的主界面顯示}
SwingGUI框架你好,世界菜單欄頂級(jí)容器GUI組件GUI組件內(nèi)容窗格16.2.2添加組件到窗口
JFrame對(duì)象的getContentPane()方法返回一個(gè)對(duì)contentPane的引用JFrameJFrame組件用于在Swing程序中創(chuàng)建窗體,是放置其他Swing組件的頂級(jí)容器,它的構(gòu)造函數(shù):JFrame()JFrame(StringTitle)缺省的布局管理器是BoderLayout添加組件到內(nèi)容窗格,兩種方法,示例:frame.getContentPane().add(newJButton(“button”));frame.add(newJButton(“button”));JFrame包含一個(gè)JRootPane作為其惟一的子容器,用來(lái)管理其所有內(nèi)容,包括:內(nèi)容窗格菜單分層窗格玻璃窗格大部分情況下,我們只使用內(nèi)容窗格關(guān)閉FramesetDefaultCloseOperation(int
operation)設(shè)置用戶在此窗體上發(fā)起"close"時(shí)默認(rèn)執(zhí)行的操作。必須指定以下選項(xiàng)之一:DO_NOTHING_ON_CLOSE(在WindowConstants中定義):不執(zhí)行任何操作;要求程序在已注冊(cè)的WindowListener對(duì)象的windowClosing方法中處理該操作。HIDE_ON_CLOSE(在WindowConstants中定義):調(diào)用任意已注冊(cè)的WindowListener對(duì)象后自動(dòng)隱藏該窗體。DISPOSE_ON_CLOSE(在WindowConstants中定義):調(diào)用任意已注冊(cè)WindowListener的對(duì)象后自動(dòng)隱藏并釋放該窗體。EXIT_ON_CLOSE(在JFrame中定義):使用Systemexit方法退出應(yīng)用程序。僅在應(yīng)用程序中使用。默認(rèn)情況下,該值被設(shè)置為HIDE_ON_CLOSE。常用的JFrame方法voidadd(Componentc)voidsetJMenuBar(JMenuBarMenu)voidpack()voidremove(Componentc)voidsetIconImage(Iconimage)voidsetLayout(LayoutManagerlayout)voidsetSize(intwidth,intheight)16.2.3組件的基本功能顏色設(shè)置可以使用setBackground()方法和setForeground()來(lái)設(shè)置組件的背景色和前景色btnOK.setBackground(Color.BLUE);邊框設(shè)置使用setBorder()方法可以設(shè)置組件外圍的邊框btnOK.setBorder(BorderFactory.createLineBorder(Color.RED));雙緩沖區(qū)使用雙緩沖技術(shù)能改進(jìn)頻繁變化的組件的顯示效果,如果想關(guān)閉雙緩沖區(qū),可以在組件上施加setDoubleBuffered(false)方法提示信息:使用setTooltipText()方法,為組件設(shè)置對(duì)用戶有幫助的提示信息btnOK.setToolTipText("Hi,這是一個(gè)按鈕");鍵盤導(dǎo)航:用setMnemonic()方法指定一個(gè)字符,通過(guò)這個(gè)字符和一個(gè)當(dāng)前L&F(LookandFeel,觀感)的無(wú)鼠標(biāo)修飾符(通常是Alt)共同激活按鈕動(dòng)作btnOK.setMnemonic(KeyEvent.VK_O);可插入L&F:每個(gè)JComponent對(duì)象有一個(gè)相應(yīng)的ComponentUI對(duì)象,為它完成所有的繪畫、事件處理、決定尺寸大小等工作。ComponentUI對(duì)象依賴當(dāng)前使用的L&F,用UIManager.setLookAndFeel()方法可以設(shè)置需要的L&F。支持布局:通過(guò)設(shè)置組件最大、最小、推薦尺寸的方法和設(shè)置X、Y對(duì)齊參數(shù)值的方法能指定布局管理器的約束條件,為布局提供支持。16.2.4按鈕JButton
JButton類允許用圖標(biāo)、字符串或兩者同時(shí)構(gòu)造一個(gè)按鈕JButton()//創(chuàng)建不帶有設(shè)置文本或圖標(biāo)的按鈕。JButton(Iconicon)//創(chuàng)建一個(gè)帶圖標(biāo)的按鈕。JButton(Stringtext)//創(chuàng)建一個(gè)帶文本的按鈕。JButton(Stringtext,Iconicon)//創(chuàng)建一個(gè)帶初始文本和圖標(biāo)的按鈕。ImageIconbuttonIcon=newImageIcon("on.gif");JButtonbtnLogin=newJButton("登陸(L)",buttonIcon);btnLogin.setMnemonic(KeyEvent.VK_L);16.2.5標(biāo)簽JLabelJLabel對(duì)象可以顯示文本、圖像或同時(shí)顯示二者JLabelJLabel(IconimageJLabel(Iconimage,inthorizontalAlignment)JLabel(Stringtext)
JLabel(Stringtext,Iconicon,inthorizontalAlignment)JLabel(Stringtext,inthorizontalAlignment)aImageIconicon=newImageIcon("on.gif");JLabellblUser=newJLabel("用戶名",icon,SwingConstants.LEFT);SwingConstants中定義的以下常量:LEFT、CENTER、RIGHT、LEADING或TRAILING,定義了組件的對(duì)齊方式16.2.6文本組件單行文本輸入框JTextFieldJTextField()JTextField(Documentdoc,Stringtext,intcolumns)JTextField(intcolumns)JTextField(Stringtext)JTextField(Stringtext,intcolumns)其他主要方法publicStringgetText()//獲取組件包含的文本publicStringgetText(intoffs,intlen)//獲取組件包含的文本部分(有偏移量和長(zhǎng)度決定)publicStringgetSelectedText()//返回此TextComponent中包含的選定文本多行純文本編輯框JTextAreaJTextArea()JTextArea(introws,intcolumns)JTextArea(Stringtext)JTextArea(Stringtext,introws,intcolumns)密碼輸入框JPasswordFieldJPasswordField()JPasswordField(intcolumns)JPasswordField(Stringtext)JPasswordField(Stringtext,intcolumns)設(shè)置輸入字符的回顯字符的方法是:publicvoidsetEchoChar(char
c)16.2.7選擇性輸入組件JCheckBox復(fù)選框是一個(gè)可以被選定和取消選定的項(xiàng),它將其選擇狀態(tài)顯示給用戶。JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)判斷一個(gè)復(fù)選框是否被選中的方法是publicbooleanisSelected()JRadioButtonRadioButton實(shí)現(xiàn)一個(gè)單選按鈕,一般和ButtonGroup對(duì)象結(jié)合,實(shí)現(xiàn)多中選一的目標(biāo)。JRadioButtonrdb1=newJRadioButton("rdb1");JRadioButtonrdb2=newJRadioButton("rdb2");JRadioButtonrdb3=newJRadioButton("rdb3");//下面將三個(gè)按鈕加入到一個(gè)組中,而剩余兩個(gè)沒(méi)有加入ButtonGroupbg=newButtonGroup();bg.add(rdb1);bg.add(rdb2);bg.add(rdb3);JRadioButtonrdb4=newJRadioButton("rdb4");ButtonGroup只是對(duì)JRadioButton進(jìn)行了邏輯分組,本身不是一個(gè)組件類16.2.8列表JListJList用來(lái)顯示對(duì)象列表并且允許用戶選擇一個(gè)或多個(gè)項(xiàng)的組件。單獨(dú)的模型ListModel維護(hù)列表的內(nèi)容。JList()JList(ListModeldataModel)JList(Object[]listData)JList(Vector<?>listData)String[]data={"one","two","three","four"};JListmyList=newJList(data);myList.setBorder(BorderFactory.createEtchedBorder());//設(shè)置myList的邊框設(shè)置選擇模式一個(gè)JList的默認(rèn)選擇模式是任意選擇,通過(guò)調(diào)用對(duì)象的setSelectionMode方法可以修改選擇模式ListSelectionModel.SINGLE_INTERVAL_SELECTION:一次只能選擇一個(gè)連續(xù)間隔ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:在此模式中,不存在對(duì)選擇的限制。此模式是默認(rèn)設(shè)置。myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);獲得選擇的數(shù)據(jù)publicintgetSelectedIndex();返回最小的選擇單元索引;選擇了多項(xiàng)時(shí),則只返回最小的選擇索引。如果什么也沒(méi)有選擇,則返回
-1publicObjectgetSelectedValue();可以獲得所選的對(duì)象publicint[]getSelectedIndices();所選的全部索引(按升序排列);如果什么也沒(méi)有選擇,則返回一個(gè)空數(shù)組。publicObject[]getSelectedValues();返回所有選擇值的數(shù)組。利用ListSelectionModel管理選擇數(shù)據(jù)可以利用一個(gè)獨(dú)立的ListSelectionModel對(duì)象管理JList組件的當(dāng)前選擇狀態(tài),該對(duì)象顯示一個(gè)具有穩(wěn)定索引的值列表。可以用下面的方法得到這個(gè)選擇模型。publicListSelectionModelgetSelectionModel()利用ListModel設(shè)置和獲取JList對(duì)象的值ListModel接口定義了方法組件(如JList),這些組件用于獲取列表中每個(gè)單元格的值以及列表的長(zhǎng)度publicvoidaddElement(Objectobj)//將指定組件添加到此類表的末尾publicvoidremoveElementAt(int
index)//刪除指定索引處的組件16.2.9表格JTableJTable用來(lái)顯示和編輯常規(guī)二維單元表,其構(gòu)造過(guò)程和基本功能類似于JList。16.2.10添加菜單到窗口菜單欄并不被添加到內(nèi)容窗格中,而是有自己的固定位置,因此,添加菜單到窗口有自己的方法。首先,創(chuàng)建一個(gè)JMenuBar菜單欄對(duì)象將創(chuàng)建的菜單JMenu對(duì)象按順序追加到JMenuBar對(duì)象中,而菜單項(xiàng)JMenuItem則一個(gè)個(gè)按順序追加到對(duì)應(yīng)的JMenu對(duì)象中,最后將JMenuBar對(duì)象設(shè)置為當(dāng)前窗口的菜單欄。JMenuBarmnubar=newJMenuBar();JMenumnuFirst=newJMenu("文件");
mnubar.add(mnuFirst);JMenuItemitmAdd=newJMenuItem("添加");
mnuFirst.add(itmAdd);mnuFirst.addSeparator();//增加菜單分隔符JMenuItemitmExit=newJMenuItem("退出(E)");mnuFirst.add(itmExit);itmExit.setMnemonic(KeyEvent.VK_E);itmExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_DOWN_MASK));JMenumnuSecpmd=newJMenu("Help");mnubar.add(mnuSecpmd);//將mnuBar設(shè)置為當(dāng)前窗口的菜單欄對(duì)象this.setJMenuBar(mnubar);16.3布局管理器
程序16-1和前述其他程序運(yùn)行的界面效果差別很大,16-1界面中的按鈕占滿了窗口,而其他程序則沒(méi)有,主要差別是其他程序在構(gòu)造方法中均有這么一行語(yǔ)句:this.setContentPane(newJPanel());決定組件在容器中排列方式的對(duì)象稱為布局管理器(LayoutManager)Swing程序采用布局管理器來(lái)管理組件的排放、位置、大小等布置任務(wù),能實(shí)現(xiàn)平臺(tái)無(wú)關(guān)的自動(dòng)合理排列。Java提供了多種類型的布局管理器,如BorderLayout、FlowLayout、GridLayout、GridBagLayout、CardLayout等等,每種管理器都有著特殊的組件布局管理方式。16.3.1BorderLayout
邊界布局管理器BorderLayout將管理的容器分為東西南北中五個(gè)位置,并通過(guò)BorderLayout類中相應(yīng)的類常量進(jìn)行標(biāo)識(shí):NORTH、SOUTH、EAST、WEST、CENTER,可以重復(fù)添加組件到相同的位置,但前面的組件將被移走。16.3.2FlowLayout
FlowLayout布局方式是將組件一排一排地依次放置,它自動(dòng)調(diào)用組件的getPreferredSize()方法,使用組件的最佳尺寸來(lái)顯示組件。當(dāng)容器被重新設(shè)置大小后,則布局也會(huì)隨之發(fā)生改變:各組件的大小不變,但相對(duì)位置會(huì)發(fā)生變化。它是JPanel的默認(rèn)布局。構(gòu)造方法FlowLayout()//居中對(duì)齊,默認(rèn)的水平和垂直間隙是5個(gè)單位。FlowLayout(intalign)//它具有指定的對(duì)齊方式(FlowLayout類聲明的三個(gè)類常量LEFT,RIGHT,CENTER),默認(rèn)的水平和垂直間隙是5個(gè)單位。FlowLayout(intalign,inthgap,intvgap)//創(chuàng)建一個(gè)新的流布局管理器,它具有指定的對(duì)齊方式以及指定的水平和垂直間隙。16.3.3BoxLayout
BoxLayout允許垂直或水平布置多個(gè)組件的布局管理器。構(gòu)造方法:publicBoxLayout(Containertarget,intaxis)//創(chuàng)建一個(gè)水平排列組件的Box容器Boxhbox=Box.createHorizontalBox();//創(chuàng)建一個(gè)垂直排列組件的Box容器Boxvbox=Box.createVerticalBox();//將組件加入Box的容器中的方法如下面的語(yǔ)句:hbox.add(newJButton("button1"));hbox.add(newJButton("button2"));調(diào)整Box內(nèi)部組件間的間隔
用Box的類方法createRigidArea()在組件間添加空白hbox.add(newJButton("button1"));//追加一個(gè)按鈕到Box容器中hbox.add(Box.createRigidArea(newDimension(20,0)));hbox.add(newJButton("button2"));Box還可以用類方法createHorizontalGlue()創(chuàng)建自動(dòng)占據(jù)剩余空間的水平透明組件(同樣還有垂直組件),如果有多個(gè)Glue組件,則它們平分一個(gè)方向上的剩余空間定義自己的尺寸。Box提供的第三類透明組件是Strut,它定義了在一個(gè)方向上具有固定尺寸的Strut16.3.4GridLayout
GridLayout布局方式可以使容器中的各組件呈網(wǎng)格狀分布。容器中各組件的高度和寬度相同,當(dāng)容器的尺寸發(fā)生變化時(shí),各組件的相對(duì)位置不變,但各自的尺寸會(huì)發(fā)生變化。GridLayout的構(gòu)造方法如下:GridLayout()//創(chuàng)建具有默認(rèn)值的網(wǎng)格布局,即每個(gè)組件占據(jù)一行一列。
GridLayout(introws,intcols)//創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局。
GridLayout(introws,intcols,inthgap,intvgap)//創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局,此外,將水平和垂直間距設(shè)置為指定值。16.4用中間容器組織界面元素
JFrame是用來(lái)創(chuàng)建主窗口的頂級(jí)容器,很多程序中,組件并不直接添加到JFrame容器中,而是通過(guò)用中間容器組織好界面的布局,最后再根據(jù)要求將不同的中間容器對(duì)象加入到主窗口中,從而可以實(shí)現(xiàn)復(fù)雜的界面變換。常用的中間容器有:JPanel:最靈活、最常用的中間容器,其默認(rèn)的布局管理器是FlowLayout。Box:綜合利用其水平和垂直Box,可以方便的布局一個(gè)規(guī)整的組件顯示。JScrollPane:與JPanel類似,但還可在大的組件或可擴(kuò)展組件周圍提供滾動(dòng)條。常用構(gòu)造方法:JScrollPane(Componentc);16.4用中間容器組織界面元素
常用的中間容器有:JPanel:最靈活、最常用的中間容器,其默認(rèn)的布局管理器是FlowLayout。Box:綜合利用其水平和垂直Box,可以方便的布局一個(gè)規(guī)整的組件顯示。JScrollPane:與JPanel類似,但還可在大的組件或可擴(kuò)展組件周圍提供滾動(dòng)條。常用構(gòu)造方法:JScrollPane(Componentc);JTabbedPane:包含多個(gè)組件,但一次只顯示一個(gè)組件。用戶可在組件之間方便地切換。JToolBar:按行或列排列一組組件(通常是按鈕)。JSplitPane:用于拆分窗口;16.5事件機(jī)制
開發(fā)Swing程序一般遵循這樣的步驟:根據(jù)需要?jiǎng)?chuàng)建不同的界面類添加合適的組件到對(duì)應(yīng)的界面類中為界面和界面中的組件添加必要的事件監(jiān)聽(tīng)器,對(duì)諸如菜單選擇、點(diǎn)擊按鈕以及文本輸入之類的事件進(jìn)行響應(yīng)。16.5.1事件處理過(guò)程
16.6.2主要事件類型
表16-2部分事件及監(jiān)聽(tīng)器事件類型事件源組件類型監(jiān)聽(tīng)器接口必須實(shí)現(xiàn)的方法ActionEventJButton,JCheckBox,JMenuIte,JMenu,JCheckBoxMenuItem,JTextField等ActionListenervoidactionPerformed(ActionEvente)ItemEventJButton,JCheckBox,JMenuItem,JMenu,JCheckBoxMenuItem,JTextField等ItemListenervoiditemStateChanged(ItemEvente)MouseEventJFrame,JPanel,JButton等容器類MouseListenerMouseMotionListenerMouseWheelListenervoidmouseClicked(MouseEvente)mousePressedmouseReleasedmouseDraggedmouseMovedmouseWheelMoved定義監(jiān)聽(tīng)器importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassButtonListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ //添加事件發(fā)生時(shí)的代碼
}}將監(jiān)聽(tīng)器和事件源綁定JButtonbtnLogin=newJButton(“登錄”);ButtonListenerloginListener=newButtonListener();btnLogin.addActionListener(loginListener);//將監(jiān)聽(tīng)器注冊(cè)到按鈕對(duì)象上16.6對(duì)話框
和利用中間容器組織界面不同,Java提供了一類特殊的窗口編程,就是對(duì)話框編程。對(duì)話框可以顯示在另一個(gè)窗口即父窗口的范圍內(nèi),使用對(duì)話框可以在不切換原有視圖內(nèi)容的情況下和用戶交互,例如簡(jiǎn)單的輸入、操作確認(rèn)等。16.7.1選項(xiàng)對(duì)話框
JOptionPane彈出要求用戶提供輸入值或向其發(fā)出通知的標(biāo)準(zhǔn)對(duì)話框。publicvoidactionPerformed(ActionEvente){ JOptionPane.showConfirmDialog(null, "您確認(rèn)刪除這條信息嗎?","操作提示",JOptionPane.YES_NO_OPTION);}JOptionPane確認(rèn)對(duì)話框showConfirmDialog信息告知對(duì)話框showMessageDialog選項(xiàng)對(duì)話框showOptionDialog只能在指定窗口內(nèi)移動(dòng)的對(duì)話框showInternalXxxxDialog16.6.2文件對(duì)話框JFileChooser為用戶選擇文件提供了一種簡(jiǎn)單的機(jī)制,通過(guò)它可以獲得用戶選擇的文件信息,如位置和文件名等,進(jìn)而可以利用前面介紹的I/O編程的知識(shí)實(shí)現(xiàn)文件的處理。publicvoidactionPerformed(ActionEvente){JFileChooserchooser=newJFileChooser();//創(chuàng)建了一個(gè)文件名過(guò)濾器,文件類型參數(shù)是一個(gè)變長(zhǎng)的參數(shù)類型FileNameExtensionFilterfilter=newFileNameExtensionFilter( "JPG&GIFImages","jpg","gif");chooser.setFileFilter(filter);//return保存了用戶選擇按鈕的情況intreturnVal=chooser.showOpenDialog(this);//利用getSelectedFile方法返回一個(gè)File對(duì)象表示用戶選中的文件if(returnVal==JFileChooser.APPROVE_OPTION){ System.out.println("被選擇的文件是:“ +chooser.getSelectedFile().getName());}}16.7.3自定義對(duì)話框
可以通過(guò)繼承JDialog創(chuàng)建一個(gè)自定義的對(duì)話框,滿足程序特定的需要。創(chuàng)建一個(gè)對(duì)話框重點(diǎn)需要確定以下幾個(gè)問(wèn)題:滿足應(yīng)用需要的組件搭配和屏幕布局,這個(gè)過(guò)程和前面講述的窗口和容器的處理一致。如何向使用者返回必要的信息,包括用戶所需的結(jié)果和關(guān)閉對(duì)話框的方式等等。16.8圖形編程基礎(chǔ)
組件的顯示每個(gè)組件知道應(yīng)該如何顯示自己,這是因?yàn)槊總€(gè)組件都有一個(gè)paint的方法,當(dāng)組件需要顯示時(shí),運(yùn)行時(shí)環(huán)境
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 櫥柜購(gòu)銷與安裝工程合同
- 招聘服務(wù)合同
- 內(nèi)部施工合同協(xié)議
- 城市規(guī)劃咨詢顧問(wèn)合同
- 家裝使用裝修合同
- 工業(yè)自動(dòng)化設(shè)備采購(gòu)及安裝服務(wù)合同
- 電子商務(wù)平臺(tái)運(yùn)營(yíng)合作合同
- Unit 2More than fun Presenting ideas教學(xué)設(shè)計(jì)2024-2025學(xué)年外研版英語(yǔ)七年級(jí)上冊(cè)
- 江海職業(yè)技術(shù)學(xué)院《現(xiàn)代文學(xué)與新女性》2023-2024學(xué)年第二學(xué)期期末試卷
- 興義民族師范學(xué)院《攝影測(cè)量學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 川教版2024-2025學(xué)年六年級(jí)下冊(cè)信息技術(shù)全冊(cè)教案
- 《人文關(guān)懷與優(yōu)質(zhì)護(hù)理》醫(yī)院培訓(xùn)課件
- 世界文明與世界宗教課件
- 50097馬工程-國(guó)際組織(第二版)全套課件
- 北師大版二年級(jí)數(shù)學(xué)下冊(cè)導(dǎo)學(xué)案全冊(cè)
- 《愛(ài)國(guó)主義教育》開學(xué)第一課課件
- 小學(xué)六年級(jí)綜合實(shí)踐有趣的魔方世界課件
- 龍門吊重點(diǎn)技術(shù)規(guī)格書
- JJG(交通)054-2009 加速磨光機(jī)檢定規(guī)程-(高清現(xiàn)行)
- H.248協(xié)議正常呼叫流程解析
- 玻璃水鉆行業(yè)需求分析及生產(chǎn)工藝流程
評(píng)論
0/150
提交評(píng)論