Java核心技術(shù)上Swing用戶界面組件_第1頁(yè)
Java核心技術(shù)上Swing用戶界面組件_第2頁(yè)
Java核心技術(shù)上Swing用戶界面組件_第3頁(yè)
Java核心技術(shù)上Swing用戶界面組件_第4頁(yè)
Java核心技術(shù)上Swing用戶界面組件_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1Java核心技術(shù)(上)醫(yī)藥信息工程學(xué)院陳偉廣東藥學(xué)院11.Swing與MVC設(shè)計(jì)模式2.布局管理器概述3.

常用組件介紹文本輸入選擇組件和單選按鈕菜單工具欄4.

對(duì)話框?qū)υ捒蚝?jiǎn)介選項(xiàng)對(duì)話框文件對(duì)話框顏色對(duì)話框Swing用戶界面組件2設(shè)計(jì)模式,--借鑒經(jīng)驗(yàn)DesignPatterns的書籍中總結(jié)了很多設(shè)計(jì)模式組合模式裝飾器模式策略模式MVC模式3MVC設(shè)計(jì)模式模型-視圖-控制器模式模型:存儲(chǔ)內(nèi)容視圖:顯示內(nèi)容控制器:處理用戶輸入4布局管理器當(dāng)往窗口中放置組件時(shí),首先要指定組件的放置策略。布局管理器:解決如何將組件安排在一個(gè)框架或面板內(nèi)的問(wèn)題。三種最簡(jiǎn)單的布局管理器:流布局管理器(flowlayoutmanager)-默認(rèn)布局管理器邊框布局管理器(borderlayoutmanager)網(wǎng)格布局管理器(gridlayoutmanger)5voidSetLayout(LayoutManagerm)為容器設(shè)置布局管理器Componentadd(Componentc);Componentadd(Componentc,Objectconstraints)將組件添加到容器,并返回組件的引用。61.流布局管理器流布局管理器(flowlayoutmanager)將組件按加入的先后次序從左至右排列在面板中。在JavaAPI庫(kù)中,流布局管理器對(duì)應(yīng)的類是FlowLayout,它有3個(gè)構(gòu)造器:FlowLayout():居中對(duì)齊,水平間距和垂直間距都是5個(gè)像素。FlowLayout(intalign):指定對(duì)齊方式align,水平間距和垂直間距都是5個(gè)像素。FlowLayout(intalign,inthGap,intvGap):指定對(duì)齊方式align、水平間距和垂直像素。對(duì)于對(duì)齊方式,可以用FlowLayout類中的以下屬性指定:LEFT/CENTER/RIGHT:左對(duì)齊/居中對(duì)齊/右對(duì)齊7流布局管理器的使用效果演示FlowLayoutTest.java8邊框布局管理器邊框布局管理器(borderlayoutmanager)把一個(gè)容器(例如panel)分成North、West、Center、East、South五部分,對(duì)應(yīng)的類是BorderLayout。例:使用邊界布局管理器,將一個(gè)Button放在South位置。panel.setLayout(newBorderLayout());panel.add(aButton,BorderLayout.SOUTH);BorderLayout是Window、Frame和Dialog缺省的布局管理器。

9效果舉例僅使用BorderLayout來(lái)定位組件往往不能準(zhǔn)確定位組件。下圖顯示了上一個(gè)頁(yè)面中代碼的執(zhí)行結(jié)果:按鈕自動(dòng)擴(kuò)展到填滿框架的整個(gè)South區(qū)域;而且如果再往South區(qū)域添加一個(gè)新按鈕時(shí),舊按鈕就會(huì)被替換掉。panel.setLayout(newBorderLayout());panel.add(aButton,BorderLayout.SOUTH);10面板嵌套可以通過(guò)面板嵌套來(lái)解決這個(gè)問(wèn)題:1.創(chuàng)建一個(gè)新panel,命名為southPanel。2.在southPanel中設(shè)置按鈕的布局方式,向southPanel中添加按鈕。3.添加southPanel至South區(qū)域。JPanelsouthPanel=newsouthPanel();southPanel.add(yBt);southPanel.add(bBt);southPanel.add(rBt);panel.setLayout(newBorderLayout());panel.add(southPanel,BorderLayout.SOUTH);演示BorderLayoutTest.java11網(wǎng)格布局管理器網(wǎng)格布局管理器(gridlayoutmanger):這種布局是將容器分成單元格,每個(gè)單元格的大小都一樣。例如:panel.setLayout(newGridLayout(2,3));將面板分成2行和3列,然后將組件添加到單元格中:panel.add(newJButton(“1”));panel.add(newJButton(“2”));組件的添加順序是從第一行第一列開(kāi)始,接著是第一行第二列……網(wǎng)格布局布局管理器總是忽略組件的最佳大小。所有單元的寬度和高度是相同的,是根據(jù)單元數(shù)對(duì)可用寬度和高度進(jìn)行平分而定。12舉例:計(jì)算器程序制作一個(gè)如圖所示的計(jì)算器程序。使用面板嵌套技術(shù):一個(gè)子面板,置于根面板的CENTER,該子面板內(nèi)使用GridLayout布局。一個(gè)用于顯示計(jì)算結(jié)果的按鈕,使用BorderLayout放置于North13布局管理器小結(jié)布局管理器主要應(yīng)用于容器類中。其一般使用步驟如下:1.獲得容器類對(duì)象。例如:JPanelparentPanel=newJPanel();2.對(duì)該容器類對(duì)象設(shè)置布局管理器。例如:panel.setLayout(newGridLayout(2,3));3.根據(jù)布局管理器的特性,將組件放置于適當(dāng)?shù)奈恢?。例如:panel.add(newJButton(“1”));4.如果需要獲得更加精確的布局,可以使用容器類的嵌套。14復(fù)雜的布局管理器除了這些簡(jiǎn)單的布局管理器,Java還提供了一系列功能更加強(qiáng)大,使用起來(lái)也更加復(fù)雜的管理器:1.箱式布局管理器(BoxLayout)2.網(wǎng)格組布局管理器(GridbagLayout)3.彈簧布局管理器(SpringLayout)另外,用戶還可以自定義布局管理器。詳細(xì)介紹參考《java2核心技術(shù)卷I》P37015借用工具進(jìn)行布局。如:Netbeans、WindowsBuilder.........16文本輸入文本域(JTextField)和文本區(qū)(JTextArea):用于獲取文本輸入。

JTextField:接收單行文本輸入。

JTextArea:接收多行文本輸入。

JPasswordField:特殊的文本域,用戶的輸入不直接顯示出來(lái),而用其它字符代替,常用于輸入密碼。(自學(xué))文本域的使用方法:JPanelpanel=newJPanel();JTextFieldtextField=newJTextField("Defaultinput",20);panel.add(textField);第一個(gè)參數(shù)“Defaultinput”:將文本域的缺省顯示值為Defaultinput第二個(gè)參數(shù)20:列數(shù),是指文本域顯示的寬度為20列(并非可以輸入的字符的個(gè)數(shù))。17文本域JTextField的常用方法Java.swing.JTextFieldJTextField(intcols)構(gòu)造一個(gè)指定列數(shù)的cols的JTextFieldJTextField(Stringtext,intcols)構(gòu)造一個(gè)指定列數(shù),指定初始字符串的JTextFieldvoidsetColumns(intcols)

設(shè)置文本域使用的列數(shù)18文本區(qū)(JTextArea)文本區(qū)JTextArea組件可以讓用戶輸入多行文本。在JTextArea組件中,可以指定文本區(qū)的行數(shù)和列數(shù):textArea=newJTextArea(8,40);//8行40列一行的結(jié)尾為’\n’(回車)符如果文本區(qū)的文本超出顯示范圍,則其余的文本會(huì)被剪裁??梢允褂脫Q行來(lái)避免行過(guò)長(zhǎng):textArea.setLineWrap(true);

在Swing中,文本區(qū)沒(méi)有滾動(dòng)條,需要手動(dòng)安裝:JScrollPanescrollPane=newJScrollPane(textArea)演示TextAreaTest.java19文本域JTextArea的常用方法Java.swing.JTextAreaJTextArea(introws,intcols)構(gòu)造一個(gè)rows行cols列的新的文本區(qū)JTextArea(Stringtext,introws,intcols)用初始文本構(gòu)造一個(gè)新的文本區(qū)voidsetRows(introws)

設(shè)置文本域使用的行數(shù)voidappend(StringnewText)將給定文本附加到文本區(qū)中已有文本的后面voidsetLineWrap(booleanwrap)打開(kāi)或關(guān)閉換行Java.swing.JScrollPaneJScrollPane(Componentc)在組件c上添加滾動(dòng)條,返回添加后的組件20文本域與文本區(qū)的常用方法Java.swing.text.JTextComponentvoidsetText(Stringt)用新文本改變文本組件中的文本StringgetText()

返回文本組件中的文本voidsetEditable(booleanb)

確定用戶是否可以編輯JTextComponent中的內(nèi)容Java.swing.JComponentvoidrevalidate()重新計(jì)算容器內(nèi)所有組件的大小和位置,并對(duì)它們重新布局如panel.revalidate()21標(biāo)簽組件(JLabel)標(biāo)簽是容納文本的組件。它們沒(méi)有任何修飾(例如沒(méi)有邊界),也不響應(yīng)用戶輸入。標(biāo)簽的常用用途之一就是標(biāo)識(shí)組件,例如標(biāo)識(shí)文本域。其使用步驟如下:1.創(chuàng)建一個(gè)JLabel組件例:

JLabellabel=newJLabel(“hours”,SwingConstants.RIGHT);或者JLabellabel=newJLabel(“hours”,JLabel.RIGHT);上面的代碼創(chuàng)建了一個(gè)label,并指定label的對(duì)齊方式為右對(duì)齊。2.將標(biāo)簽組件放置在離標(biāo)識(shí)的組件足夠近的地方。22選擇組件常見(jiàn)的選擇組件有:復(fù)選框、單選按鈕、選項(xiàng)列表以及滑塊等。1).復(fù)選框JCheckBox如果想要接收的輸入只有“是”或“非”兩者的話,可以使用復(fù)選框組件。這種組件缺省帶有標(biāo)識(shí)標(biāo)簽。在構(gòu)造器中可以指定該標(biāo)簽的文本:bold=new

JCheckBox(“Bold”);

用戶點(diǎn)擊復(fù)選框的動(dòng)作監(jiān)聽(tīng)器為實(shí)現(xiàn)ActionListener接口。(actionPerformed方法)23復(fù)選框?qū)嵗罕O(jiān)聽(tīng)器使用實(shí)例:使用選中的字型顯示字符串。……bold=newJCheckBox(“Bold”);italic=newJCheckBox(“Italic”);…….classCheckBoxListenerimplementActionListener{publicactionPerformed(ActionEventevent){}}……CheckBoxListenerlistener=newCheckBoxListerner();bold.addActionListener(listener);italic.addActionListener(listener)演示CheckBoxTest.java24復(fù)選框JCheckBox的常用函數(shù)Java.swing.JCheckBoxJCheckBox(Stringlabel)用給定的標(biāo)簽構(gòu)造一個(gè)復(fù)選框JCheckBox(Stringlabel,booleastate)用給定的標(biāo)簽和初始化狀態(tài)構(gòu)造一個(gè)復(fù)選框booleanisSelected()

返回復(fù)選框狀態(tài)voidsetSelected(booleanstate)為復(fù)選框設(shè)置狀態(tài)252).單選按鈕單選按鈕(radiobuttongroup):提供一組選擇項(xiàng),用戶在任何時(shí)刻只能選擇一個(gè)選擇項(xiàng),每個(gè)選項(xiàng)都帶有一個(gè)標(biāo)簽。在Swing中實(shí)現(xiàn)單選按鈕對(duì)象的步驟:1.創(chuàng)建一個(gè)ButtonGroup對(duì)象ButtonGroup

group=newButtonGroup();2.將JRadioButton對(duì)象添加到按鈕組中,ButtonGroup對(duì)象負(fù)責(zé)當(dāng)新按鈕被按下時(shí),取消前一個(gè)按下的操作。JRadioButtonsmallButton=newJRadioButton("Small",false);group.add(smallButton);JRadioButtonmediumButton=newJRadioButton("Medium",true);group.add(mediumButton);3.將多個(gè)單選按鈕添加到面板時(shí)要一個(gè)個(gè)添加panel.add(smallButton);panel.Add(mediumButton);26單選按鈕實(shí)例:監(jiān)聽(tīng)器使用策略用戶點(diǎn)擊單選按鈕的動(dòng)作監(jiān)聽(tīng)器為實(shí)現(xiàn)ActionListener接口(actionPerformed方法)的類對(duì)象。方法一:如果各個(gè)單選按鈕中的按鈕的行為相似,可以讓它們共享一個(gè)監(jiān)聽(tīng)器。(需要在動(dòng)作監(jiān)聽(tīng)器中判斷哪一個(gè)按鈕被選中,然后才能作出響應(yīng))方法二:?jiǎn)芜x按鈕的每個(gè)按鈕對(duì)象設(shè)置其獨(dú)有的監(jiān)聽(tīng)器。(推薦)27單選按鈕實(shí)例:監(jiān)聽(tīng)器使用實(shí)例:當(dāng)選中不同的按鈕時(shí),使用不同的字體顯示字符串。演示RadioButtonTest.java28請(qǐng)自學(xué)邊界(Border)密碼框(JPasswordField)組合框(JComboBox)滑塊(JSlider)微調(diào)控制器(JSpinner)294.菜單菜單的創(chuàng)建可以遵循以下步驟:1.創(chuàng)建一個(gè)菜單欄JMenuBarmenuBar=newJMenuBar();2.將菜單欄放置在frame的頂部。frame.setMenuBar(menuBar);3.為每個(gè)菜單建立一個(gè)菜單對(duì)象JMenueditMenu=newJMenu(“Edit”);4.將頂層菜單添加到菜單欄中menuBar.add(editMenu);菜單欄菜單菜單項(xiàng)子菜單項(xiàng)30菜單的創(chuàng)建可以遵循以下步驟(續(xù)):5.往菜單對(duì)象中添加菜單項(xiàng)、分隔符和子菜單JMenuItempasteItem=newJMenuItem("Paste");editMenu.add(pasteItem)等價(jià)于使用JMenu.add(String)方法將菜單項(xiàng)插入到菜單的末尾JMenuItempasteItem=editMenu.add("Paste");editMenu.addSeparator();JMenuoptionsMenu=newJMenu(“Options”)...;//一個(gè)子菜單

editMenu.add(optionsMenu);6.用戶點(diǎn)擊菜單項(xiàng)的動(dòng)作監(jiān)聽(tīng)器為實(shí)現(xiàn)ActionListener接口(actionPerformed方法)的類對(duì)象或關(guān)聯(lián)一個(gè)動(dòng)作事件:ActionListenerlistener=...;pasteItem.addActionListener(listener);或?qū)⒁粋€(gè)動(dòng)作直接與菜單項(xiàng)關(guān)聯(lián)ActionListenerpasteAction=…;JMenuItemcutItem=newJMenuItem(cutAction);editMenu.add(pasteAction);31菜單中的圖標(biāo)JMenuItem類擴(kuò)展自AbstractButton類,故菜單項(xiàng)與按鈕很相似。有3種方法為菜單項(xiàng)指定一個(gè)圖標(biāo):1.構(gòu)造器方法JMenuItemcutItem=newJMenuItem(“Cut”,newImageIcon(“cut.gif”);//默認(rèn)圖形在名稱的左側(cè)2.setIcon方法cutItem.setIcon(newImageIcon(“cut.gif”);3.把一個(gè)圖標(biāo)添加到一個(gè)動(dòng)作上,再用該動(dòng)作構(gòu)造菜單項(xiàng)cutAction.putValue(Action.SMALL_ICON,newImageIcon(“cut.gif”));JMenuItemcutItem=newJMenuItem(cutAction);使用動(dòng)作構(gòu)造菜單項(xiàng)時(shí),Action.NAME將會(huì)成為菜單項(xiàng)的文本,而Action.SMALL_ICON成為圖標(biāo)。32彈出菜單彈出菜單(pop-upmenu):即單擊鼠標(biāo)右鍵可彈出的快捷菜單。建立彈出菜單的方法與一般菜單相似:(1)創(chuàng)建一個(gè)彈出式菜單JPopupMenupopup=newJPopupMenu();(2)在菜單中添加菜單項(xiàng):JMenuItemitem=newJMenuItem("Cut");item.addActionListener(listener);popup.add(item);33彈出式觸發(fā)器彈出式觸發(fā)器(pop-uptrigger):用戶點(diǎn)擊鼠標(biāo)某個(gè)鍵時(shí),彈出菜單。在Windows或者Linux中,彈出式觸發(fā)器是右鍵。要想在用戶點(diǎn)擊某一個(gè)組件的時(shí)候彈出菜單,就要使用彈出式觸發(fā)器:component.setComponentPopupMenu(popup);34快捷鍵可以為菜單項(xiàng)設(shè)置快捷鍵。在當(dāng)前菜單打開(kāi)的情況下,可以按下某菜單項(xiàng)的快捷鍵,相當(dāng)于鼠標(biāo)單擊了該菜單項(xiàng)。

JMenuItemCutItem=newJMenuItem(“Index”);CutItem.setMnemonic(“I”);

快捷鍵就會(huì)自動(dòng)顯示在菜單項(xiàng)中,快捷鍵下面有一條下劃線。35加速器加速器可以在不打開(kāi)菜單的情況下選中菜單項(xiàng)的快捷鍵。例如,很多程序把CTRL+O和CTRL+S關(guān)聯(lián)到菜單中的Open和Save項(xiàng)。使用SetAccelerator方法可以將加速器關(guān)聯(lián)到一個(gè)菜單項(xiàng)。該方法使用KeyStroke類型的對(duì)象作為參數(shù)。例如:openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));當(dāng)用戶按下加速器組合鍵時(shí),就自動(dòng)選擇了相應(yīng)的菜單項(xiàng),同時(shí)激活一個(gè)動(dòng)作事件。注意:加速器實(shí)際上并不打開(kāi)菜單,而是直接激活菜單關(guān)聯(lián)的動(dòng)作事件。36啟用和禁用菜單項(xiàng)在程序運(yùn)行過(guò)程中,經(jīng)常需要屏蔽某些暫時(shí)不適用的命令,待到條件允許時(shí)再使之重新可用。屏蔽/啟用菜單項(xiàng)的方法:aMenuItem.setEnabled(boolean)當(dāng)參數(shù)值為false時(shí),屏蔽該菜單項(xiàng);當(dāng)參數(shù)值為true時(shí),啟用該菜單項(xiàng);如果需要?jiǎng)討B(tài)啟用/屏蔽某菜單項(xiàng),則需要為“menuselected”事件注冊(cè)監(jiān)聽(tīng)器。javax.swing.event包定義了MenuListener接口,它有三個(gè)方法:voidmenuSelected(MenuEventevent)voidmenuDeselected(MenuEventevent)voidmenuCanceled(MenuEventevent)37監(jiān)聽(tīng)“menuselected”事件只需要監(jiān)聽(tīng)“menuselected”事件,當(dāng)一個(gè)菜單被選中時(shí),將菜單中包含的需要被屏蔽的菜單項(xiàng)屏蔽掉即可。例如下列代碼可屏蔽/打開(kāi)Save按鈕和SaveAs按鈕。publicvoidmenuSelected(MenuEventevent){saveAction.setEnabled(!readonlyItem.isSelected());saveAsAction.setEnabled(!readonlyItem.isSelected());}注意:此處不使用僅用Save和SaveAs菜單項(xiàng)是因?yàn)閷?duì)于擁有加速鍵的菜單項(xiàng),即使菜單項(xiàng)被屏蔽,也可以使用加速鍵直接激發(fā)菜單項(xiàng)關(guān)聯(lián)的動(dòng)作事件。385.工具欄工具欄是在程序中提供快速訪問(wèn)常用命令的按鈕欄。工具欄的特別之處在于可以移動(dòng),脫離工具欄或拖拽到框架其他地方,如圖所示。39工具欄的創(chuàng)建創(chuàng)建工具欄時(shí),直接將組件添加到工具欄中,再將工具欄放入框架中:JToolBarbar=newJToolBar();bar.add(blueButton);frame.add(bar,BorderLayout.NORTH);

也可以使用添加Action對(duì)象的方法來(lái)填充工具欄:bar.add(blueAction);可以設(shè)置工具提示:setToolTipText(String);如果使用Action對(duì)象,則可使用putValue方法putValue(Action.SHORT_DESCRIPTION,“…”)注意:按鈕是工具欄中最常見(jiàn)的組件類型。但其它組件也可以放置在工具欄中,例如復(fù)選框等。40工具欄相關(guān)的常用方法Java.swing.JToolBarJToolBar()JToolBar(StringtitleString)

JToolBar(intorientation)//orientation:SwingConstants.HORIZONTAL或SwingConstants.VERTICALJButtonadd(Actiona)在工具欄添加與動(dòng)作a關(guān)聯(lián)的按鈕voidaddSeparator()

在工具欄末尾添加一個(gè)分隔符Java.swing.JToolBarvoidsetToolTipText(Stringtext)設(shè)置當(dāng)鼠標(biāo)停留在組件上時(shí)顯示的工具提示的文本41對(duì)話框的種類對(duì)話框分為模式對(duì)話框和無(wú)模式對(duì)話框。1.模式對(duì)話框在用戶結(jié)束對(duì)它的操作之前,不允許用戶與應(yīng)用程序其它窗口的交互。模式對(duì)話框的作用:在程序繼續(xù)運(yùn)行之前,必須獲得用戶提供的信息。例如:用戶希望讀取某個(gè)文件,則可以使用模式對(duì)話框請(qǐng)求用戶提供文件名以及路徑。42無(wú)模式對(duì)話框無(wú)模式對(duì)話框運(yùn)行用戶同時(shí)在對(duì)話框和應(yīng)用程序的其它窗口中輸入信息。例如:工具欄。工具欄可以??吭谌魏蔚胤剑⑶矣脩艨梢栽谛枰獣r(shí)與應(yīng)用程序窗口和工具欄進(jìn)行交互。下面將會(huì)介紹一些常用的對(duì)話框:選項(xiàng)對(duì)話框、文件對(duì)話框、顏色對(duì)話框431).選項(xiàng)對(duì)話框Swing提供了一組簡(jiǎn)單的對(duì)話框,用于收集用戶提供的簡(jiǎn)單信息。JOptionPane有四個(gè)用于顯示這些簡(jiǎn)單對(duì)話框的靜態(tài)方法:showMessageDialog:顯示一條消息,并等待用戶點(diǎn)擊OKshowConfirmDialog:顯示一條消息,并等待用戶點(diǎn)擊確認(rèn)(與OK/Cancel按鈕類似)showOptionDialog:顯示一條消息,并等待用戶作出某一種選擇showInputDialog:顯示一條消息,并等待用戶輸入一行信息44選項(xiàng)對(duì)話框假設(shè)需要顯示一個(gè)如圖所示的對(duì)話框,要求用戶確認(rèn)或者取消,它是一個(gè)確認(rèn)對(duì)話框:intselection=JOptionPane.showConfirmDialog(parent,“Message”,“Title”,//設(shè)置要顯示的字符串和標(biāo)題JOptionPane.OK_CANCEL_OPTION,//設(shè)置OK和Cancel按鈕JOptionPane.QUESTION_MESSAGE);//設(shè)置圖標(biāo)為問(wèn)題圖標(biāo)//selection的值指示了用戶單擊了哪一個(gè)按鈕if(selection==JOptionPane.OK_OPTION)...

具體的參數(shù)選擇可以參照J(rèn)AVAAPI:DEFAULT_OPTIONYES_NO_OPTIONYES_NO_CANCEL_OPTIONOK_CANCEL_OPTION

圖標(biāo)設(shè)置參數(shù):ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGEQUESTION_MESSAGEPLAIN_MESSAGE45示例不同類型模式對(duì)話框示例OptionDialogTest.java46創(chuàng)建對(duì)話框如何創(chuàng)建一個(gè)對(duì)話框?可遵循以下幾個(gè)步驟:1.創(chuàng)建一個(gè)派生自JDialog類的子類。2.在子類的構(gòu)造器中,需要進(jìn)行以下工作:(1)調(diào)用超類的構(gòu)造器,用于指定對(duì)話框的擁有者(ownerframe),(也可以設(shè)置為null,但這樣對(duì)話框有可能被隱藏在其它窗口后面),對(duì)話框的標(biāo)題以及是否模式對(duì)話框(2)添加對(duì)話框的用戶界面組件(3)添加相應(yīng)的事件處理器(5)設(shè)置對(duì)話框的大小47舉例:創(chuàng)建一個(gè)About對(duì)話框public

AboutDialog

extends

JDialog{publicAboutDialog(JFrameowner){

//調(diào)用超類構(gòu)造器super(owner,“AboutDialogTest”,true);

//添加組件和事件監(jiān)聽(tīng)器,true參數(shù)表示該對(duì)話框?yàn)槟J綄?duì)話框add(newJLabel(“…"),BorderLayout.CENTER);JPanelpanel=newJPanel();JButtonok=newJButton("Ok");ok.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){setVisible(false);}});

panel.add(ok);add(panel,BorderLayout.SOUTH);setSize(250,150);//設(shè)置對(duì)話框大小}}

演示DialogTest.java48練習(xí):自定義數(shù)據(jù)交換對(duì)話框使用對(duì)話框的一個(gè)重要目的是獲取用戶的輸入信息。舉例:定義一個(gè)包含菜單欄的框架,菜單欄中包含一個(gè)菜單項(xiàng)File-connect,點(diǎn)擊connect菜單項(xiàng)將彈出一個(gè)要求輸入用戶名和用戶密碼的對(duì)話框,該對(duì)話框有OK和Cancel兩個(gè)按鈕,如果用戶點(diǎn)擊OK按鈕,則關(guān)閉對(duì)話框并將用戶名和密碼記入一個(gè)文本域組件中。

實(shí)驗(yàn)題492.文件對(duì)話框文件對(duì)話框用于幫助用戶打開(kāi)或者保存文件。下面是建立文件對(duì)話框并且獲取用戶選擇信息的步驟:1.建立一個(gè)JFileChooser對(duì)象。與JDialog類構(gòu)造器不同,這種對(duì)象不需要指定父組件,因而允許在多個(gè)框架中重用一個(gè)文件選擇器:JFileChooserchooser=newJFileChooser();2.調(diào)用setCurrentDirectory方法設(shè)置當(dāng)前目錄chooser.setCurrentDirectory(newFile("."));3.如果要指定一個(gè)默認(rèn)的文件名,可以使用setSelectedFile方法:chooser.setSelectedFile(newFile(filename));504.如果要允許用戶能同時(shí)選中多個(gè)文件,可以使用setMultiSelectionEnabled方法:chooser.setMultiSelectionEnabled(true);5.如果希望在對(duì)話框中只顯示某一類型的文件(如所有.gif文件),則需要文件過(guò)濾器。(后面討論)6.默認(rèn)情況下只能選中文件,如果希望允許用戶選擇目錄,則需要使用setFileSelectionMode方法,相關(guān)參數(shù)值為:JFileChooser.FILES_ONLY/JFileChooser.DIRECTORIES_ONLY/JFileChooser.FILES_AND_DIRECTORIES例如:chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);517.調(diào)用showOpenDialog或者showSaveDialog方法顯示對(duì)話框。必須為這些調(diào)用指定父組件:intresult=chooser.showOpenDialog(parent);

intresult=chooser.showSaveDialog(parent);//result的值可以為:JFileChooser.APPROVE_OPTION或JFileChooser.CANCEL_OPTION或JFileChooser.ERROR_OPTION8.使用getSelectedFile或者getSelectedFiles來(lái)獲得選中的一個(gè)或多個(gè)文件。這些方法返回一個(gè)File對(duì)象或者一組File對(duì)象。如果需要文件對(duì)象名字時(shí),可以調(diào)用getPath方法:Stringfilename=choo

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論