swing用戶界面組件.ppt
《swing用戶界面組件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《swing用戶界面組件.ppt(66頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第十四講 Swing用戶界面組件 2 目標(biāo) 了解Swing的結(jié)構(gòu)了解SwingGUI的容器掌握J(rèn)frame和Jpanel的使用掌握用戶界面組件的使用方法掌握常用Swing布局管理器的使用 3 Swing結(jié)構(gòu) Object Component JFrame Container Window Frame Dialog JDialog JText JComboBox JLabel JList JMenuBar JOptionPane JPanel JScrollBar AbstractButton JToggleButton JMenuItem JButton JCheckBox JRadioButton JComponent JMenu 4 文本組件 JtextComponent是所有Swing文本組件的根類 Javax swing text JtextComponent類的常用方法 voidsetText Stringt 改變一個(gè)文本組件中的文本StringgetText 返回一個(gè)文本組件中的文本voidsetEditable booleanb 決定用戶能否編輯文本組件的內(nèi)容 5 文本框JTextField 1 JTextField組件允許輸入或編輯單行文本此類的構(gòu)造函數(shù)包括 JTextField JTextField Documentdoc Stringtext intcolumns JTextField intcolumns 建立一個(gè)指定列寬度的空白文本框JTextField Stringtext 建立一個(gè)帶有初始文本的文本框JTextField Stringtext intcolumns 把文本框添加到窗口的通常辦法是把它先添加到面板或者其它容器中 示例 Containercon getContentPane con setLayout newFlowLayout JLabeljl newJLabel 文本域 con add jl JTextFieldtf newJTextField 20 con add tf 6 文本框JTextField 2 在實(shí)踐中 應(yīng)該把文本框的最大列寬多設(shè)1到2個(gè)字符 輸入文本的長(zhǎng)度可以超過(guò)最大列寬 這時(shí)文本框就會(huì)卷動(dòng) 如果你需要在運(yùn)行時(shí)重新設(shè)置列寬 應(yīng)聯(lián)合使用setColumns方法和包含該文本框的容器的validate方法 textFiled setColumns 10 panel validate 布局管理器重新繪制容器可以在任何時(shí)候改變文本框的內(nèi)容 textFiled setText hello 獲取文本框中的內(nèi)容并去掉前后空格 textFiled getText trim intadd1 Integer parseInt textFiled getText trim 7 文本框JTextField 3 所有文本組件的模型都由Document接口說(shuō)明 這既包括無(wú)格式的文本 也包括格式化的文本 如html 當(dāng)數(shù)據(jù)改變后 可以要求文檔 而非文本組件 通知你 這需要安裝一個(gè)文檔監(jiān)聽(tīng)器 新建文檔監(jiān)聽(tīng)器DocumentListenerresultListener newResultListener 為第一個(gè)文本域安裝一個(gè)文檔監(jiān)聽(tīng)器originText getDocument addDocumentListener resultListener 當(dāng)文本發(fā)生改變后 下面三個(gè)方法之一會(huì)被調(diào)用 voidinsertUpdate DocumentEvente voidremoveUpdate DocumentEvente voidchangedUpdate DocumentEvente 改變格式時(shí)你的文檔監(jiān)聽(tīng)器必須實(shí)現(xiàn)這三個(gè)方法如果你使用一個(gè)動(dòng)作監(jiān)聽(tīng)器的話 只有當(dāng)用戶按下ENTER鍵時(shí) 該動(dòng)作監(jiān)聽(tīng)器才會(huì)得到通知 8 文本框使用示例 獲取兩個(gè)文本框的輸入并求和 然后顯示在第三個(gè)文本框中 程序代碼見(jiàn)TextFieldTest java 運(yùn)行結(jié)果如下 初始狀態(tài) 改變輸入 9 密碼框JPasswordField 特殊的文本框 在密碼框中輸入時(shí) 用戶的輸入并不會(huì)真正顯示出來(lái) 而是顯示回顯字符 如 以防止被他人看見(jiàn)用戶輸入的密碼 構(gòu)造函數(shù) JPasswordField Stringtext intcolumns 參數(shù) text顯示的文本 如果沒(méi)有則為nullcolumns列大小其它方法voidsetEchoChar charecho 設(shè)置密碼框的回顯字符 0表示設(shè)置為默認(rèn)回顯字符char getPassword 返回包含在密碼框中的文本 10 密碼框使用示例 將密碼框的輸入顯示在文本框中程序代碼見(jiàn)PasswordFieldTest java 運(yùn)行結(jié)果如下 11 文本區(qū)JTextArea3 1 在一個(gè)文本區(qū)里 用戶可以輸入多行文本它可實(shí)現(xiàn)可滾動(dòng)界面JTextArea組件可使用下列構(gòu)造函數(shù)創(chuàng)建 JTextArea JTextArea introws intcols 建立一個(gè)指定行列的文本區(qū)JTextArea Stringtext 建立一個(gè)帶初始化文本的文本區(qū)JTextArea Stringtext introws intcols JTextArea Documentdoc JTextArea Documentdoc Stringtext introws intcols 例 JLabeljl newJLabel 文本區(qū) con add jl JTextAreata newJTextArea 5 10 con add ta 12 文本區(qū)JTextArea3 2 多行文本之間的換行可以采用兩種方式 1 手動(dòng)換行 即輸入ENTER鍵 這將在文本中插入換行符 n 2 通過(guò)設(shè)置換行屬性來(lái)避免手動(dòng)換行 由文本區(qū)組件自動(dòng)處理 textArea setLineWrap true 對(duì)長(zhǎng)的行換行設(shè)置為真但是這樣的設(shè)置并沒(méi)有真正在文本中插入換行符 n 在Swing中 文本區(qū)沒(méi)有滾動(dòng)條 要給文本區(qū)增加滾動(dòng)條 可以通過(guò)把文本區(qū)插入到一個(gè)滾動(dòng)窗格中 然后把該滾動(dòng)窗格插入進(jìn)內(nèi)容窗格中 textArea newJTextArea 8 40 JScrollPanescrollPane newJScrollPane textArea contentPane add scrollPane BorderLayout CENTER 在Swing中 給組件添加滾動(dòng)條的通用處理方法是 把組件添加進(jìn)一個(gè)滾動(dòng)窗格中 滾動(dòng)由滾動(dòng)窗格內(nèi)部處理 滾動(dòng)條會(huì)自動(dòng)出現(xiàn)或消失 13 文本區(qū)JTextArea3 3 Javax swing JTextArea類的常用方法 VoidsetColumns intcols 設(shè)置文本區(qū)的列數(shù)VoidsetRows introws設(shè)置文本區(qū)的行數(shù)Voidappend StringnewText 把指定文本追加到文本區(qū)文本的末尾VoidsetLineWrap打開(kāi)或關(guān)閉換行VoidsetTabSize intc 設(shè)置TAB鍵的列數(shù)為cJavax swing JScrollPane類的構(gòu)造函數(shù)JScrollPane Componentc 創(chuàng)建一個(gè)顯示指定組件c的滾動(dòng)窗格 當(dāng)組件內(nèi)容超過(guò)顯示范圍時(shí) 滾動(dòng)條會(huì)自動(dòng)出現(xiàn) 14 文本區(qū)使用示例 文本區(qū)的三種顯示方式程序代碼見(jiàn)TextAreaTest java 運(yùn)行結(jié)果如下 15 標(biāo)簽JLabel3 1 標(biāo)簽是容納文本的組件 這種組件沒(méi)有修飾 例如 沒(méi)有邊界 它們也不響應(yīng)用戶輸入 標(biāo)簽常用來(lái)標(biāo)識(shí)組件 如文本組件 給組件設(shè)置標(biāo)簽的方法如下 使用正確的文本構(gòu)造一個(gè)JLable組件把該標(biāo)簽組件放置到同需要標(biāo)識(shí)的組件足夠的地方 這樣用戶能夠看到該標(biāo)簽標(biāo)識(shí)了哪個(gè)組件標(biāo)簽同任何其它組件一樣 可以定位在一個(gè)容器中 你可以把它放在你需要的地方 16 標(biāo)簽JLabel3 2 它既可以顯示文本也可以顯示圖像構(gòu)造函數(shù)如下 JLabel Iconicon 使用左對(duì)齊圖標(biāo)來(lái)構(gòu)造一個(gè)標(biāo)簽JLabel Stringtext 使用左對(duì)齊字符串來(lái)構(gòu)造一個(gè)標(biāo)簽JLabel Stringtext intalign 使用字符串及指定的對(duì)齊方式來(lái)構(gòu)造一個(gè)標(biāo)簽JLabel Stringtext Iconicon intalign 同時(shí)使用字符串和圖標(biāo)及指定的對(duì)齊方式來(lái)構(gòu)造一個(gè)標(biāo)簽參數(shù) text表示使用的字符串 icon表示使用的圖標(biāo) align表示水平對(duì)齊方式 其值可以為 SwingConstants LEFT SwingConstants RIGHT SwingConstants CENTER SwingConstants NORTH SwingConstants EAST等說(shuō)明 JLable實(shí)現(xiàn)了SwingConstants接口 該接口定義了很多有用的常量 SwingConstants LEFT也可以寫成JLable LEFT 17 標(biāo)簽JLabel3 3 SetText和SetIcon方法可以在運(yùn)行時(shí)設(shè)定標(biāo)簽的文本和圖標(biāo)VoidsetText Stringtext VoidsetIcon Iconicon 例 JLablelable newJLable text SwingConstants RIGHT 或JLablelable newJLable text JLable RIGHT 18 按鈕JButton2 1 JButton類允許用圖標(biāo) 字符串或兩者同時(shí)構(gòu)造一個(gè)按鈕 構(gòu)造函數(shù)如下 JButton Iconicon icon表示使用的圖標(biāo)JButton Stringtext text表示使用的字符串JButton Stringtext Iconicon 例 loginButton newJButton 登錄 newImageIcon login gif 19 按鈕JButton2 2 當(dāng)希望按鈕對(duì)單擊動(dòng)作有所反應(yīng)時(shí) 我們需要為按鈕注冊(cè)一個(gè)事件監(jiān)聽(tīng)器 并且實(shí)現(xiàn)這個(gè)事件監(jiān)聽(tīng)器 就可以完成所需要的按鈕功能 注冊(cè)事件監(jiān)聽(tīng)器loginButton addActionListener newLoginAction 實(shí)現(xiàn)事件監(jiān)聽(tīng)器privateclassLoginActionimplementsActionListener 20 按鈕使用示例 密碼驗(yàn)證示例當(dāng)用戶輸入密碼后 按下 登錄 按鈕 然后我們將密碼輸入是否正確的結(jié)果顯示在文本域中 程序代碼見(jiàn)Login java 運(yùn)行結(jié)果如下 21 選擇性輸入組件 為了簡(jiǎn)化表單填寫過(guò)程 通常為用戶提供多種可供選擇的選項(xiàng) 而無(wú)需用戶寫出他們的響應(yīng) 常用于選擇性輸入的組件有 復(fù)選框單選按鈕列表框組合框 22 單選按鈕JRadioButton2 1 單選按鈕組件是一組互斥按鈕 即我們一次只能選擇其中的一個(gè)選項(xiàng) 選項(xiàng)的選取只需要單擊即可 ButtonGroup用于創(chuàng)建按鈕組JRadioButton對(duì)象可使用下列構(gòu)造函數(shù)創(chuàng)建 JRadioButton JRadioButton Iconicon JRadioButton Icon booleanselected JRadioButton Stringtext JRadioButton Stringtext booleanselected JRadioButton Stringtext Iconicon JRadioButton Stringtext Iconicon booleanselected 23 單選按鈕JRadioButton2 2 例 使用按鈕組ButtonGroupgroup newButtonGroup JRadioButtonbutton1 newJRadioButton EAST true JRadioButtonbutton4 newJRadioButton NORTH false 為了指定單選按鈕的初始選項(xiàng) 我們?cè)谛陆↗RadioButton對(duì)象時(shí) 將其構(gòu)造函數(shù)的第二個(gè)參數(shù)設(shè)置為 true 同時(shí) 其他按鈕對(duì)象的第二個(gè)參數(shù)被設(shè)置為 false 24 單選按鈕使用示例 通過(guò)選擇單選按鈕中的選項(xiàng)來(lái)設(shè)置標(biāo)簽組件的內(nèi)容 由標(biāo)簽組件顯示我們的選擇 程序代碼見(jiàn)RadioButtonExample java 運(yùn)行結(jié)果如下 25 復(fù)選框JCheckBox2 1 復(fù)選框組件可以進(jìn)行多重選擇 即我們能夠選擇其中的多個(gè)選項(xiàng) 如果要取消或選取某選項(xiàng) 可以單擊此選項(xiàng) 和單選按鈕不同 復(fù)選框允許用戶選擇多個(gè)選項(xiàng) 我們通過(guò)單擊復(fù)選框來(lái)選取該選項(xiàng) 再單擊一下 則取消選取 建立復(fù)選框組件對(duì)象需要使用標(biāo)簽來(lái)表明該復(fù)選框的含義 標(biāo)簽在復(fù)選框構(gòu)造器里進(jìn)行設(shè)置 對(duì)復(fù)選框是否被選取可以通過(guò)isSelected方法進(jìn)行狀態(tài)判斷 例 boldCheck newJCheckBox Bold 新建復(fù)選框 italicCheck newJCheckBox Italic 新建復(fù)選框 boldCheck isSelected 判斷 mathCheck 復(fù)選框是否被選定 26 復(fù)選框JCheckBox2 2 當(dāng)用戶點(diǎn)擊一個(gè)復(fù)選框時(shí) 就會(huì)觸發(fā)一個(gè)動(dòng)作事件 你可以設(shè)置動(dòng)作監(jiān)聽(tīng)器 例如 兩個(gè)按鈕共享同一個(gè)動(dòng)作監(jiān)聽(tīng)器 ActionListenerlistener Bold addActionListener listener italic addActionListener listener 監(jiān)聽(tīng)器的actionperformed方法 publicvoidactionperformed ActionEventevent intmode 0 if bold isSelected mode Font BOLDif italic isSelected mode Font ITALIClabel setFont newFont Serif mode FONTSIZE 27 復(fù)選框使用示例 選擇字體風(fēng)格 程序代碼見(jiàn)CheckBoxExample java 運(yùn)行結(jié)果如下 28 列表框組件JList3 1 列表框組件允許用戶從一個(gè)列表中選擇一個(gè)或多個(gè)條目 選擇列表框中的多個(gè)條目有兩種方式 續(xù)條目選擇和間斷條目選擇 JList類既可顯示字符串 也可顯示圖標(biāo)JList不支持雙擊 MouseListener可用于解決雙擊問(wèn)題構(gòu)造函數(shù) publicJList 使用空模型構(gòu)造JListpublicJList ListModeldataModel 構(gòu)造一個(gè)列表 用它顯示指定模型中的元素 publicJList Object listData 構(gòu)造一個(gè)列表以顯示指定數(shù)組listData的元素 29 列表框組件JList3 2 建立列表框前 需要指定所顯示的列表?xiàng)l目 String courses Math English Physics Chemic Biology Politics JListcourseList newJList courses JList本身不支持滾動(dòng) 如果列表框比較長(zhǎng) 而顯示屏幕比較小 可以設(shè)置列表中顯示的行數(shù) 同時(shí)使用滾動(dòng)條 courseList setVisibleRowCount 4 JScrollPanelistScrollPane newJScrollPane courseList 30 列表框組件JList3 3 用戶選擇列表框條目時(shí) 列表框就會(huì)產(chǎn)生選擇事件 將列表選擇監(jiān)聽(tīng)器ListSelectionListener添加給列表組件 并在該監(jiān)聽(tīng)器中實(shí)現(xiàn)valueChanged方法 courseList addListSelectionListener newcourseListener privateclasscourseListenerimplementsListSelectionListener publicvoidvalueChanged ListSelectionEventevent 獲得用戶所選擇的列表框條目以及條目所在的索引號(hào)需要使用getSelectedValues方法和getSelectedIndices方法 Object selectedCourses courseList getSelectedValues int selectedIndexCourses courseList getSelectedIndices 31 列表框組件使用示例 在給定的科目中選擇多門課程 程序代碼見(jiàn)ListExample java 運(yùn)行結(jié)果如下 32 組合框JComboBox3 1 組合框?qū)⑽谋究蚝拖吕斜砜蚪Y(jié)合起來(lái) 使得用戶可以在一組預(yù)定義的選項(xiàng)中選擇一個(gè)條目 而且能夠修改選項(xiàng)內(nèi)容 構(gòu)造函數(shù)如下 publicJComboBox 此構(gòu)造函數(shù)使用缺省數(shù)據(jù)模型創(chuàng)建JComboBoxpublicJComboBox ComboBoxModelasModel 使用現(xiàn)有ComboBoxModel中的項(xiàng)目創(chuàng)建組合框publicJComboBox Object items 用指定數(shù)組元素創(chuàng)建組合框新建一個(gè)有內(nèi)容的組合框既可以象列表框那樣指定數(shù)組 也可以采用向組合框?qū)ο罄锛尤霔l目的方法 對(duì)組合框是否能夠被編輯也可以進(jìn)行設(shè)置 新建組合框 jobsBox newJComboBox jobsBox setEditable true 設(shè)置組合框是否能夠被編輯 jobsBox addItem job1 jobsBox addItem job2 33 組合框JComboBox3 2 組合框的內(nèi)容是可以動(dòng)態(tài)變化的 addItem Objectitem 方法能夠把條目添加到列表的末尾 insertItermAt Objectitem intindex 方法將把新條目添加到列表的任何位置 removeItem Objectitem 方法和removeItemAt intindex 方法將能夠刪除指定條目 removeAllItems 方法將刪除所有條目 getSelectedItem 方法返回當(dāng)前被選擇的條目jobsBox insertItermAt job7 6 在第7個(gè)位置增加 job7 條目 jobsBox removeItem job7 刪除 job7 條目 jobsBox removeItemAt 5 刪除第6個(gè)條目 即 job6 jobsBox removeAllItems 刪除所有條目 34 組合框JComboBox3 3 當(dāng)選擇一個(gè)條目時(shí) 組合框就產(chǎn)生一個(gè)事件 對(duì)事件的監(jiān)聽(tīng)需要添加事件監(jiān)聽(tīng)器 并實(shí)現(xiàn)actionPerformed方法 增加事件監(jiān)聽(tīng)器 jobsBox addActionListener newjobsListener privateclassjobsListenerimplementsActionListener publicvoidactionPerformed ActionEventevent 當(dāng)組合框的選擇事件發(fā)生時(shí) 可以通過(guò)getSelectedItem方法來(lái)獲取當(dāng)前被選擇的條目 ObjectselectedJob jobsBox getSelectedItem 35 組合框使用示例 應(yīng)用組合框來(lái)進(jìn)行選擇職業(yè) 程序代碼見(jiàn)ComboBoxExample java 運(yùn)行結(jié)果如下 36 滑塊JSlider3 1 滑塊組件一般有一個(gè)連續(xù)區(qū)間和可拖動(dòng)的滑塊 用戶可以通過(guò)拖動(dòng)滑塊在一個(gè)區(qū)間范圍里進(jìn)行選擇 構(gòu)造函數(shù)如下 JSlider JSlider intdirection JSlider intmin intmax JSlider intmin intmax intinitialValue JSlider intmin intmax intinitialValue JSlider intdirection intmin intmax intinitialValue 使用給定方向 最小值 最大值和初始值來(lái)構(gòu)造一個(gè)水平滑塊參數(shù) direction下面幾個(gè)常量之一 SwingConstants HORIZONTAL或者SwingConstants VERTICAL 默認(rèn)為前者M(jìn)in max滑塊的最小值和最大值 默認(rèn)分別為0和100initialValue滑塊的初始值 默認(rèn)為50JSliderageSlider newJSlider ageSlider newJSlider SwingConstants VERTICAL 0 120 20 37 滑塊JSlider3 2 可以為滑塊增加標(biāo)尺 setMajorTickSpacing intunits 為滑塊設(shè)置一個(gè)大標(biāo)尺setMinorTickSpacing intunits 為滑塊設(shè)置一個(gè)小標(biāo)尺大標(biāo)尺和小標(biāo)尺是獨(dú)立的 Units指滑塊值而非像素值顯示標(biāo)尺 setPaintTicks booleanb b為true時(shí)顯示強(qiáng)制滑塊對(duì)齊標(biāo)尺 setSnapToTicks booleanb b為true時(shí)強(qiáng)制對(duì)齊 38 滑塊JSlider3 3 當(dāng)滑塊被拖動(dòng)時(shí) 滑塊的值將發(fā)生變化 觸發(fā)ChangeEvent事件 滑塊組件的事件監(jiān)聽(tīng)器要實(shí)現(xiàn)ChangeListener接口 并實(shí)現(xiàn)此接口中的stateChanged方法 AgeListenermyAgeListener newAgeListener ageSlider addChangeListener myAgeListener privateclassAgeListenerimplementsChangeListener publicvoidstateChanged ChangeEventevent 滑塊值發(fā)生變化時(shí) 使用getValue方法來(lái)獲得滑塊值 myTextField setText sourceSlider getValue 39 滑塊使用示例 在進(jìn)行年齡輸入時(shí) 使用滑塊進(jìn)行直觀的選擇 程序代碼見(jiàn)SliderExample java 運(yùn)行結(jié)果如下 40 邊界Border 當(dāng)界面中的組件比較多時(shí) 需要從視覺(jué)上將組件分隔 通用的辦法是為面板設(shè)置邊界 并將需要分隔的組件添加到該面板中 可選的邊界風(fēng)格包括 低斜面 凸斜面 蝕刻 直線 不光滑 空 只是在組件周圍創(chuàng)建一些空白地方 創(chuàng)建邊界需要調(diào)用BorderFactory類的靜態(tài)方法 當(dāng)需要給邊界增加標(biāo)題以提示時(shí) 可以使用BorderFactory的createTitledBorder方法 初始化帶標(biāo)題的空邊界 Borderborder BorderFactory createEmptyBorder Bordertitled BorderFactory createTitledBorder border Bordertypes 當(dāng)創(chuàng)建好需要的邊界后 就可以把邊界對(duì)象添加到組件中 buttonPanel setBorder titled 41 邊界使用示例 各種邊界的不同效果 程序代碼見(jiàn)BorderExample java 運(yùn)行結(jié)果如下 42 菜單 菜單顯示項(xiàng)目列表 指明各種任務(wù) 選擇或單擊某個(gè)選項(xiàng)時(shí)會(huì)打開(kāi)另一個(gè)列表或子菜單 Swing菜單由菜單欄 菜單和菜單項(xiàng)構(gòu)成 菜單欄 位于窗口頂部 是所有菜單和菜單項(xiàng)的根 43 典型的菜單 44 Swing菜單組件 45 菜單欄JMenuBar JMenuBar是可通過(guò)JFrame JWindow或JInternalFrame的根窗格添加到容器中的組件 由多個(gè)菜單JMenu組成 每個(gè)JMenu在JMenubar中都表示為字符串 JMenuBar需要兩個(gè)附加類 SingleSelectionModel類 跟蹤當(dāng)前選定的菜單LookAndFeel類 負(fù)責(zé)繪制菜單欄以及對(duì)在其中發(fā)生的事件作出響應(yīng)構(gòu)造函數(shù)只有一個(gè) JMenuBar add JMenuc 將菜單添加到菜單欄中 46 菜單JMenu2 1 JMenu在JMenuBar下以文本字符串形式顯示 而在用戶單擊它時(shí) 則以彈出式菜單顯示 JMenu具有兩個(gè)附加類 JPopupMenu 用于顯示JMenu的菜單項(xiàng)LookAndFeel 負(fù)責(zé)繪制菜單欄中的菜單以及對(duì)在其中發(fā)生的所有事件作出響應(yīng)構(gòu)造函數(shù) JMenu JMenu Actiona JMenu Strings 以給定的字符串構(gòu)造一個(gè)菜單對(duì)象JMenu Strings booleanb 47 菜單JMenu2 2 JMenu類的常用方法 add JMenuItemitem 添加一個(gè)菜單項(xiàng) 或菜單 add Stringlabel 添加一個(gè)菜單項(xiàng)到菜單中add Actiona 添加一個(gè)菜單項(xiàng)并且為其關(guān)聯(lián)一個(gè)動(dòng)作addSeparator 添加一個(gè)分割符到菜單中inset JMenuItemmenu intindex 把一個(gè)菜單項(xiàng) 或子菜單 添加到菜單的指定位置處insertSeparator intindex 添加一個(gè)分割符到菜單中的指定位置上remove intindex 從菜單中刪除指定的菜單項(xiàng)remove JMenuItemitem 從菜單中刪除指定的菜單項(xiàng) 48 彈出式菜單JPopupMenu2 1 是一種不固定在菜單欄中 可以隨處浮動(dòng)的菜單構(gòu)造函數(shù)JPopupMenu JPopupMenu Stringlabel 指定標(biāo)題創(chuàng)建必須明確調(diào)用show方法來(lái)顯示彈出式菜單show Componentinvoker intx inty 參數(shù) invoker彈出式菜單在其內(nèi)顯示的組件x y左上角的坐標(biāo) 使用invoker的坐標(biāo) popup show panel x y 49 彈出式菜單JPopupMenu2 2 通常當(dāng)用戶點(diǎn)擊某個(gè)鼠標(biāo)鍵時(shí) 彈出菜單就會(huì)出現(xiàn) 這就是所謂的彈出觸發(fā)器 在WINDOWS中 彈出觸發(fā)器通常是鼠標(biāo)右鍵 建立彈出觸發(fā)器的步驟 安裝一個(gè)鼠標(biāo)監(jiān)聽(tīng)器在鼠標(biāo)監(jiān)聽(tīng)器中添加如下代碼 PublicvoidmousePressed MouseEventevent If event isPopupTrigger popup show event getComponet event getx event gety 當(dāng)用戶點(diǎn)擊鼠標(biāo)右鍵時(shí) 會(huì)在鼠標(biāo)位置處顯示彈出菜單 50 菜單項(xiàng)JMenuItem 菜單項(xiàng)JMenuItem是JMenu或JPopupMenu中的一個(gè)組件 以文本字符串形式顯示 可以具有圖標(biāo) 它同按鈕非常相似JMenuItem的外觀可以修改 如字體 顏色 背景 邊框等構(gòu)造函數(shù) JMenuItem JMenuItem Actiona JMenuItem Iconicon JMenuItem Stringtext JMenuItem Stringtext Iconicon JMenuItem Stringtext intmnemonic 例 JMenuItemcutItem newJMenuItem Cut newImageIcon cut gif 51 復(fù)選框菜單項(xiàng)JCheckBoxMenuItem2 1 這種菜單項(xiàng)在文本旁邊顯示一個(gè)復(fù)選框 當(dāng)用戶選擇該菜單項(xiàng)時(shí) 該菜單項(xiàng)會(huì)自動(dòng)在選擇和未選擇之間切換構(gòu)造函數(shù) JCheckBoxMenuItem JCheckBoxMenuItem Iconicon JCheckBoxMenuItem Stringtext JCheckBoxMenuItem Stringtext booleanb JCheckBoxMenuItem Stringtext Iconicon JCheckBoxMenuItem Stringtext Iconicon booleanb JCheckBoxMenuItem Actiona 例 JCheckBoxMenuItemmyitem newJCheckBoxMenuItem read only menu add myitem 52 復(fù)選框菜單項(xiàng)JCheckBoxMenuItem2 2 使用這種菜單項(xiàng) 你應(yīng)該使用isSelected方法來(lái)測(cè)試菜單項(xiàng)的當(dāng)前狀態(tài) 這意味著你應(yīng)該保留一個(gè)實(shí)例變量保存該菜單項(xiàng)的引用 設(shè)置狀態(tài)的方法是setSelectedbooleanisSelected 返回該條項(xiàng)的選擇狀態(tài) true為被選定 voidsetSelected booleanstate 設(shè)置該條項(xiàng)的選擇狀態(tài) 53 單選按鈕菜單項(xiàng)JRadioButtonMenuItem2 1 這種菜單項(xiàng)在文本旁邊顯示一個(gè)單選按鈕構(gòu)造函數(shù) JRadioButtonMenuItem JRadioButtonMenuItem Iconicon JRadioButtonMenuItem Stringtext JRadioButtonMenuItem Stringtext booleanb JRadioButtonMenuItem Stringtext Iconicon JRadioButtonMenuItem Stringtext Iconicon booleanb 你必須把它們添加到一個(gè)按鈕組中 當(dāng)組中的一個(gè)按鈕被選擇以后 所有的其它按鈕都自動(dòng)成為未選擇項(xiàng)例 ButtonGroupgroup newButtonGroup JRadioButtonMenuIteminsitem newJRadioButtonMenuItem Insert Insitem setSelected true JRadioButtonMenuItemovrtype newJRadioButtonMenuItem Overtype group add insitem group add ovrtype menu add insitem menu add ovrtype 54 單選按鈕菜單項(xiàng)JRadioButtonMenuItem2 2 使用這種菜單項(xiàng) 你應(yīng)該使用isSelected方法來(lái)測(cè)試菜單項(xiàng)的當(dāng)前狀態(tài) 這意味著你應(yīng)該保留一個(gè)實(shí)例變量保存該菜單項(xiàng)的引用 設(shè)置狀態(tài)的方法是setSelectedbooleanisSelected 返回該條項(xiàng)的選擇狀態(tài) true為被選定 voidsetSelected booleanstate 設(shè)置該條項(xiàng)的選擇狀態(tài) 55 創(chuàng)建菜單2 1 四個(gè)步驟 創(chuàng)建菜單欄 創(chuàng)建菜單以及子菜單 創(chuàng)建菜單項(xiàng) 并將菜單項(xiàng)加入到子菜單或菜單中 將子菜單加入到菜單中 將菜單加入到菜單欄中 a 創(chuàng)建菜單欄 并將菜單欄加入到框架中 JMenuBarmenuBar newJMenuBar Frame setJMenuBar menuBar b 創(chuàng)建 File 菜單 Edit 菜單和 View 菜單 JMenufileMenu newJMenu File JMenueditMenu newJMenu Edit JMenuviewMenu newJMenu View b 創(chuàng)建子菜單 JMenuoptionMenu newJMenu Option 56 創(chuàng)建菜單2 2 c 通過(guò)Action對(duì)象新建 New 菜單項(xiàng) 并添加事件監(jiān)聽(tīng)器 newItem fileMenu add newShowAction New c 通過(guò)指定菜單項(xiàng)對(duì)象新建 Paste 菜單項(xiàng) pasteItem newJMenuItem Paste P d 將菜單項(xiàng)加入到子菜單或菜單中 將子菜單加入到菜單中 將菜單加入到菜單欄中 fileMenu add newItem editMenu add pasteItem viewMenu add optionMenu menuBar add fileMenu menuBar add editMenu menuBar add viewMenu 57 創(chuàng)建復(fù)選框和單選按鈕菜單項(xiàng) 和創(chuàng)建一般的菜單項(xiàng)幾乎一樣 只需要注意一下復(fù)選框和單選按鈕的不同構(gòu)造函數(shù)以及單選按鈕組的構(gòu)建 創(chuàng)建單選按鈕菜單項(xiàng) Forward 并將 Forward 菜單項(xiàng)加入到 Search 菜單中 ButtonGroupgroup newButtonGroup forwardItem newJRadioButtonMenuItem Forward group add forwardItem searchMenu add forwardItem 創(chuàng)建復(fù)選框菜單項(xiàng) ToolBar 并加入到子菜單中 JCheckBoxMenuItemtoolItem newJCheckBoxMenuItem ToolBar optionMenu add toolItem 58 快捷鍵和加速器 快捷鍵顯示為帶有下劃線的字母 加速器則顯示為菜單項(xiàng)旁邊的組合鍵 快捷鍵用來(lái)從當(dāng)前打開(kāi)的菜單中選擇一個(gè)子菜單或菜單項(xiàng) 而加速器是在不打開(kāi)菜單的情況下選擇菜單項(xiàng)的快捷鍵 例 設(shè)置菜單的快捷鍵 fileMenu setMnemonic F 設(shè)置 Exit 菜單項(xiàng)的快捷鍵為 T JMenuItemexitItem newJMenuItem Exit T 設(shè)置 Exit 菜單項(xiàng)的加速器為 Ctrl T exitItem setAccelerator KeyStroke getKeyStroke KeyEvent VK T InputEvent CTRL MASK 加速器只能關(guān)聯(lián)到菜單項(xiàng) 而不是菜單 加速器鍵實(shí)際上只是直接激活同菜單項(xiàng)關(guān)聯(lián)的事件而已 59 啟用和禁用菜單項(xiàng) 一個(gè)菜單項(xiàng)能否被選取取決于菜單項(xiàng)的啟用或禁用狀態(tài)啟用或禁用菜單項(xiàng)需要使用setEnabled方法 saveItem setEnabled false 啟用或禁用菜單項(xiàng)用兩種策略 第一種是每當(dāng)環(huán)境發(fā)生改變 你就對(duì)相關(guān)的菜單項(xiàng)和動(dòng)作調(diào)用setEnabled方法 例如 只要一個(gè)文檔以只讀形式打開(kāi) 你就要禁用Save和Saveas菜單項(xiàng)另外一種方法是 你可以在顯示菜單之前為它們進(jìn)行設(shè)置 你必須為 menuselected 事件注冊(cè)一個(gè)監(jiān)聽(tīng)器 javax swing event包定義了一個(gè)MenuListener接口 它有如下3個(gè)方法 voidmenuSelected MenuEvente 在菜單被選擇但尚未打開(kāi)之前被調(diào)用voidmenuDeselected MenuEvente 在菜單被取消選擇并且已被關(guān)閉之后被調(diào)用voidmenuCanceled MenuEvente 在菜單被取消時(shí)被調(diào)用 如點(diǎn)擊菜單以外的區(qū)域時(shí) 60 彈出式菜單 彈出式菜單的創(chuàng)建和菜單的創(chuàng)建基本相同 也需要新建一個(gè)彈出式菜單后再加入菜單項(xiàng) 例 創(chuàng)建彈出式菜單 popup newJPopupMenu 新建彈出式菜單中的 Cut 菜單項(xiàng)和監(jiān)聽(tīng)器 cutItemPop newJMenuItem Cut C popup add cutItemPop 61 菜單使用示例 菜單的用法 程序代碼見(jiàn)MenuExample java 運(yùn)行結(jié)果如下 62 對(duì)話框2 1 對(duì)話框用于顯示信息或從用戶收集信息對(duì)話框分為模式對(duì)話框和無(wú)模式對(duì)話框模式對(duì)話框必須在用戶處理完后才允許用戶與主窗口繼續(xù)進(jìn)行交互 無(wú)模式對(duì)話框允許用戶同時(shí)在對(duì)話框和程序剩余部分中輸入信息 Swing有一個(gè)方便的類JOptionPane 該類能夠讓你在不編寫任何專門對(duì)話框代碼的情況下彈出一個(gè)簡(jiǎn)單的對(duì)話框 JOptionPane有以下4種靜態(tài)方法來(lái)顯示這些簡(jiǎn)單的對(duì)話框 showMessageDialog 顯示一條消息等待用戶點(diǎn)擊OK showConfirmDialog 顯示一條消息并等待確認(rèn) showOptionDialog 顯示一條消息并等待用戶在一組自定義選項(xiàng)中的選擇 showInputDialog 顯示一條消息并等待用戶的輸入 63 對(duì)話框2 2 以showConfirmDialog為例 intselection JOptionPane showConfirmDialog DialogFrame this 父窗口 Areyousure Logout 消息以及對(duì)話框標(biāo)題JOptionPane OK CANCEL OPTION 底部按鈕類型JOptionPane WARNING MESSAGE 消息類型底部按鈕的類型和對(duì)話框有密切的關(guān)系 對(duì)于showMessageDialog和showInputDialog對(duì)話框來(lái)說(shuō) 只能有一組標(biāo)準(zhǔn)按鈕 分別是OK和OK CANCEL 對(duì)于showConfirmDialog 按鈕可以包括四種 DEFAULT OPTIONYES NO OPTIONYES NO CANCEL OPTIONOK CANCEL OPTION 64 對(duì)話框使用示例 對(duì)話框的使用 當(dāng)單擊 退出 按鈕時(shí) 將彈出對(duì)話框 同時(shí)原先的框架窗口將不能被激活 必須選擇對(duì)話框中的一個(gè)選項(xiàng)才能夠退出對(duì)話框 程序代碼見(jiàn)DialogExample java 運(yùn)行結(jié)果如下 65 創(chuàng)建自己的對(duì)話框 步驟 寫一個(gè)類繼承JDialog類 在你的對(duì)話框類的構(gòu)造函數(shù)中 調(diào)用基類JDialog的構(gòu)造函數(shù) 你需要告訴它擁有者框架 對(duì)話框顯示在其上的一個(gè)框架窗口 對(duì)話框的標(biāo)題 以及一個(gè)指明對(duì)話框是模式的還是無(wú)模式的布爾標(biāo)志 如果你不在乎對(duì)話框的顯示位置 那么擁有者框架的值可設(shè)為null 典型的窗口系統(tǒng)都要求每個(gè)彈出窗口都為另一個(gè)框架所擁有 因此 Swing構(gòu)造了一個(gè)公用的隱藏框架作為所有擁有者為null的對(duì)話框的擁有者 添加該對(duì)話框的用戶界面組件 添加事件處理器 設(shè)置對(duì)話框的大小 66 總結(jié)- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- swing 用戶界面 組件
鏈接地址:http://www.820124.com/p-6314819.html