版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、java swing 常用的9種組件核心提示:在Java1.0中,已經(jīng)有一個用于 GUI編程的類庫AWT(Abstract Window Toolkit),稱之為抽象窗口工具箱。遺憾的是,AWT中的組件(例如按鈕,類名為Button)在實現(xiàn)中使用了本地代碼(Native Code),這些組件的創(chuàng)建和行為是由應用程序所在平 臺上的本地GUI工具來處理的。因此,AWTA件要在不同的平臺上提供給用戶一致的行 為就受到了很大的限制。同時,AWTA件中還存在很多bug,這就使得使用AW1來開發(fā) 跨平臺的GUI應用程序困難重重。在Java1.0中,已經(jīng)有一個用于 GUI編程的類庫 AWT(Abstract
2、 WindowToolkit), 稱之為抽象窗口工具箱。遺憾的是,AWT中的組件(例如按鈕,類名為Button)在實現(xiàn)中使用了本地代碼(Native Code),這些組件的創(chuàng)建和行為是由應用程序所在平臺上的 本地GUI工具來處理的。因此,AWTA件要在不同的平臺上提供給用戶一致的行為就受 到了很大的限制。同時,AWffi件中還存在很多bug,這就使得使用AW侏開發(fā)跨平臺 的GUI應用程序困難重重。1996年,SUNSl和Netsacpe公司在一個稱為Swing的項目中合作完善了 Netsacpe 公司原來開發(fā)的一套 GUI庫,也就是現(xiàn)在所謂的Swing組件。Swing組件和原來的AWT 組件完
3、全不同,最大的區(qū)別就是 Swing組件的實現(xiàn)中沒有使用本地代碼,這樣對底層 平臺的依賴型就大為降低,并且可以給不同平臺的用戶一致的感覺。止匕外,和原來的 AWTf比,Swing中提供了內(nèi)容更多、使用更為方便的組件。在閱讀一些書籍時,常會遇到名詞 JFC(Java Foundation Class)。JFC的概念是 在1997年的JavaOne開發(fā)者大會上首次提出的,是指用于構(gòu)建 GUI的一組API。實際 上,Swing只是JFC的一部分,其它的還有二維圖形(Java 2D)API以及拖放(Drag and Drop)API 等等。Swing并不是完全取代了 AWT Swing只是使用更好的GU
4、I組件(如JButton)代替 AWT中相應的GUI組件(如Button),并且增加了一些AWT中原來所沒有的GUI組件。并 且,Swing仍使用AWT 1.1的事件處理模型。雖然現(xiàn)在AWT組件仍得到支持,但是建議在你的應用程序中盡量使用Swing組件和1.1的事件模型。.標簽(JLabel)標簽(JLabel)通常是用來標識另外一個組件的含義。以在標簽上顯示文字、圖象 或是文字圖象的組合。兒abel labText=new 兒abel(“文本標簽”);labText.setText(文本標簽);ImageIcon icon = new ImageIcon(image/greenflag20.
5、gif);JLabel labImage=new JLabel(icon);labImage.setIcon(icon);.密碼框(JPasswordField)密碼框?qū)嶋H上是一種特殊類型的文本框,用戶可以向其中輸入文本并加以編輯。 和文本框不同的是,向密碼框中輸入文本時,顯示的不是實際輸入的文本,而是特殊 的回顯字符(通常是*)??梢允褂胹etEchoChar(char c)方法來改變?nèi)笔〉幕仫@字符。需要注意的是,取得文本框中的文本時,使用方法getText(),該方法返回的是 個String類型的對象;而要取得密碼框中的文本,使用方法 getPassword(),該方法 返回的是一個cha
6、r數(shù)組。例如,創(chuàng)建了一個密碼框:JPasswordField txtPwd=new JPasswrodField(20);設定該密碼框的回顯字符為#:txtPwd.setEchoChar(#);取得密碼框中的內(nèi)容:char pwd=txtPwd.getPassword();也可以方便地將char數(shù)組轉(zhuǎn)化為String類型的對象:String pwdStr=new String(txtP.getPassword();.菜單(1)菜單也是一種常用的GUI組件,菜單采用的是一種層次結(jié)構(gòu),最頂層是菜單欄 (JMenuBar);在菜單欄中可以添加若干個菜單(JMenu),每個菜單中又可以添加若干個 菜單
7、選項(JMenuItem)、分隔線(Separator)或是菜單(稱之為子菜單)。(2)構(gòu)建應用程序的菜單時,先創(chuàng)建一個菜單欄:JMemuBar menuBar=new JMenuBar();通常使用框架的setJMenuBar(JMenuBar aMenuBar)方法將菜單欄置于框架中: frame.setJMenuBar(menuBar);隨后,創(chuàng)建所需要的各菜單并逐個添加到菜單欄中,例如:JMenu menuDBAccount=new JMenu電表出帳(C);.JMenu menuSysConfig=new JMenu(系統(tǒng)設置(X);menuBar.add(menuDBAccount
8、);.menuBar.add(menuSysConfig);最后,向各個菜單中添加菜單選項、分隔線或是子菜單,如圖所示的系統(tǒng)設置菜 單為例:/創(chuàng)建菜單選項或是子菜單JMenuItem sysConfigItem=new JMenuItem( 參數(shù)設置(S).);JMenu viewMenu=new JMenu(外觀設置);JRadioButtonMenuItem metalItem=new JRadioButtonMenuItem( 金屬外觀);JRadioButtonMenuItem classicItem=new JRadioButtonMenuItem(傳統(tǒng)外觀);JRadioButto
9、nMenuItem modernItem=new JRadioButtonMenuItem( 現(xiàn)代外觀);JMenuItem cascadeItem=new JMenuItem(層疊窗口 (C);JMenuItem iconifyItem=new JMenuItem( 排列圖標(I);/將三個單選按鈕添加到一個按鈕組ButtonGroup group=new ButtonGroup();group.add(metalItem);group.add(classicItem);group.add(modernItem);/構(gòu)建子菜單viewMenu.add(metalItem);viewMenu.
10、add(classicItem);viewMenu.add(modernltem);/添加到系統(tǒng)設置菜單menuSysConfig.add(sysConfigItem); 添加菜單選項menuSysConfig.add(viewMenu); / 添加子菜單menuSysCon巾g.add(cascadeItem); /添加菜單選項menuSysConfig.addSeaparator(); / 添加分隔線menuSysConfig.add(iconifyItem); /添加菜單選項(3)通常的菜單選項是JMenuItem,也可以使用復選框或是單選按鈕類型的菜單選 項,分別是 JCheckBox
11、MenuIten#口 JRadioButtonMenuItem。和 JRadioButton 樣,使 用JRadioButtonMenuItem時,需要將它們添加到同一個按鈕組中。(4)當點擊一個菜單選項時,會生成一個動作事件(ActionEvent)。為菜單選項添加事件偵聽器就可以偵聽其動作事件,例如: sysConfigItem.addActionListener(aListener);(5)為一個菜單或是菜單選項設置快捷鍵:menuSysConfig.setMnemonic(X);sysConfigItem.setMnemonic(S);(6)如果需要快速選擇未打開的菜單中的菜單選項或是
12、子菜單,可以使用加速鍵。 例如,當希望按下CTRL+叫就立亥ij選中l(wèi)ockItem 菜單選項,而不管lockItem所在的 菜單是否已經(jīng)打開,就可以使用下面的方法為lockItem設置加速鍵:KeyStroke ks=KeyStroke.getKeyStroke( KeyEvent.VK_L,InputEvent.CTRL_MASK);lockItem.setAccelerator(ks);.彈出式菜單(1)彈出式菜單(JPopupMenu)是一種特殊的菜單,和普通菜單的區(qū)別在于其不固定 在菜單欄中,而是可以四處浮動的。(2)下面的語句創(chuàng)建了一個彈出式菜單:JPopupMenu popup=
13、new JPopupMenu();與向菜單中添加菜單選項、分隔線或是子菜單一樣,使用同樣的方法向彈出式菜 單中添加內(nèi)容。用戶可以通過點擊某個特殊的鼠標鍵(稱為觸發(fā)器)來觸發(fā)彈出式菜單。例如,在 Windows操作系統(tǒng)上,一般是鼠標右鍵。為此,應用程序中應該監(jiān)聽彈出式菜單的父組件的鼠標事件:當有鼠標事件發(fā)生 時,使用isPopupTrigger()方法來判斷是否為彈出式菜單的觸發(fā)器;如果是,則在該 父組件上顯示出彈出式菜單。同樣以圖所示意的彈出式菜單為例,該菜單的父組件是 一個顯示公司徽標的標簽labLogo ,當用戶在該標簽上右擊鼠標時,彈出式菜單出現(xiàn)。 下面的代碼實現(xiàn)了上述功能:labLog
14、o.addMouseListener(new MouseAdapter()public void mouseReleased(MouseEvent e)if (e.isPopupTrigger()popup.show(labLogo,e.getX(), e.getY(););.工具條(1)有些菜單選項的使用頻率較高,每次使用都要打開菜單,效率較低。為此,可 以在工具條(JToo舊ar)中提供與這些菜單選項相對應快捷按鈕,以提高用戶的效率。 工具條中通常是一些帶有圖標的按鈕,當然也可以是其它類型的GUI組件,例如組合框等等。(2)通常,工具條所提供的操作是菜單所能提供操作的一個子集,目的是能夠快
15、速 訪問那些使用頻率高的操作。(3)工具條通常被置于布局為BorderLayout的容器中。工具條被置于布局為 BorderLayout的一個面板中。工具條還有一個特點:可以被拖動到所在容器其它邊界, 甚至脫離其所在的容器。(4)生成一個工具條對象,可以使用語句:JToolBar toolbar=new JToolBar();(5)還可以在生成工具條時,指明工具條的標題。這樣,當工具條脫離所在容器時, 可以在自己的標題欄顯示標題:JToolBar toolbar=new JToolBar(顏色工具條);(6)向工具條中添加組件,使用add方法:toolbar.add(btnBlue);tool
16、bar.add(btnYellow);(7)缺省情況下,組件是按照水平方式逐個添加入工具條的,也可以在生成工具條 時指明以垂直方式來添加組件:JToolBar toolbar=new JToolBar(SwingConstants.VERTICAL);(8)如果希望工具條不能移動,可以使用 setFloatable 方法來設置:toolbar.setFloatable(false);(9)當工具條中的按鈕上只顯示圖標時,用戶可能不能確切知道各個按鈕的具體含 義。可以使用工具提示解決這個問題:btnYellow.setToolTipText(面板置為黃色);.對話框(1)對話框是用戶和應用程序進
17、行交互(對話)的一個橋梁:對話框可以用于收集用 戶的輸入數(shù)據(jù)傳遞給應用程序,或是顯示應用程序的運行信息給用戶。(2)對話框分為模式(modal)和非模式兩種。模式對話框處于可見狀態(tài)時,用戶將 不能與應用程序的其它窗口進行交互,而非模式對話框則沒有此限制。Java中提供了一個類JOptionPane用于創(chuàng)建簡單的模式對話框,如果希望創(chuàng)建 非模式對話框或是自定義對話框可以使用JDialog。(4)JOptionPane類中提供了 4種靜態(tài)方法,用以顯示4種常用的對話框:showMessageDialog 消息對話框showInputDialog 輸入對話框showConfirmDialog 確認對
18、話框showOptionDialog 選項對話框(5)JOptionPane對話框主要由如下幾個部分構(gòu)成:圖標、消息以及按鈕。(6)類JOptionPane中定義了如下五個常量:JOptionPane.QUESTION_MESSAGEJOptionPane.INFORMATION_MESSAGEJOptionPane.WARNING_MESSAGEJOptionPane.ERROR_MESSAGEJOptionPane.PLAIN_MESSAGE / 不使用圖標前四個常量對應著四個圖標,第五個常量表示不使用圖標。開發(fā)人員可以使用這 些常量來指定對話框中顯示的圖標。當然,對話框也提供了方法使得開
19、發(fā)人員可以使 用自己的圖標。(7)JOptionPane對話框不僅僅可以顯示字符串類型的消息,還可以顯示其它類型 的消息。例如,可以是一副圖片、還可以是一個GUI組件。更廣泛地說,這里的消息可以是任何類型的對象或是對象數(shù)組。在書上的例子中,你可以看到不同類型消息的 應用。(8)JOptionPane對話框底部的按鈕取決于對話框類型和選項類型。例如,對于確 認對話框,可以使用如下的四種選項類型之一:DEFAULT_ OPTIONYES_NO_OPTIONYES_NO_CANCEL_OPTIONOK_CANCEL_OPTION(9)如果設計一個包括兩個標簽、一個文本輸入框、一個密碼輸入框和兩個按鈕
20、的 登錄對話框,這些GUI組件被添加到一個使用了網(wǎng)格袋布局的面板 panel中,面板panel 又被添加到LoginDialog 的內(nèi)容窗格。類LoginDialog 繼承了 JDialog ,先來看一下 LoginDialog的構(gòu)建器:public LoginDialog(Frame f,String s,boolean b)該構(gòu)建器中包含了 3個參數(shù),f和s分別是對話框的父窗口和標題,布爾類型的參 數(shù)b用來確定對話框的類型,當取值為true時,表示是模式對話框;取值為false時, 表示是非模式對話框。.表格(1)表格(JTable)也是一種常用的GUI組件,常用來顯示大量的數(shù)據(jù)。(2)表
21、格是模型-視圖-控制器設計模式的一個典型應用。表格本身并不存儲所顯 示的數(shù)據(jù),數(shù)據(jù)實際上是存儲在表模型中的,表格只是表模型的一種視圖.(3)JTable提供了如下兩種構(gòu)建器,可以方便地創(chuàng)建簡單表格:JTable(Object data, Object口 columnNames)JTable(Vector data, Vector columnNames)(4)采用上述方法可以發(fā)現(xiàn)存在不少缺點:例如,每一列的寬度都是一樣的;未能 正確顯示日期;數(shù)值未能按照我們的希望保留到小數(shù)點后面兩位,并靠右顯示;表格 中的數(shù)據(jù)必須預先存放在一個數(shù)組中或是向量 (Vector)中等等。在一個真正的應用程 序中,
22、使用這樣的表格是不能滿足實際應用的要求的。(5)在缺省情況下,表格中每列是等寬的,并且調(diào)整某列的寬度時,其它列的寬度 也會相應自動調(diào)整??梢允褂孟旅娴恼Z句關(guān)閉列寬自動調(diào)整特性:table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);之后,要設定某列的寬度,首先依據(jù)該列的列名取得列對象,以設定第一列寬度 為例:TableColumn col=table.getColumn(columnNames0);然后調(diào)用setPreferredWidth 方法設定該列寬度:col.setPreferredWidth(200);(6)前面已經(jīng)提到,表格有一個對應的表模型
23、,數(shù)據(jù)是存儲在表模型中,表格是表 模型的視圖。表格在建立視圖時總需要自動調(diào)用表模型中的一些方法,這些方法的返 回值決定了最終的視圖。部分常需要用到的方法的名稱和含義如下:public int getRowCount();/取得行數(shù)public int getColumnCount();/ 取得列數(shù)public Object getValueAt(int row, int column); /取得指定單元格的數(shù)據(jù)/指定單元格是否允許編輯public boolean isCellEditable(int row, int column);public String getColumnName(in
24、t column); /取得指定列的列名public Class getColumnClass(int column);缺省表模型DefaultTableModel提供了上述方法的缺省實現(xiàn)。例如, DefaultTableModel中的isCellEditable方法總是返回true ,表示所有的單元格都允許編輯;getColumnClass 方法總是返回 Object.class.(7)可以使用DefaultTableModel創(chuàng)建一個表模型對象,然后再使用表模型創(chuàng)建表 格,例如:DefaultTableModel model=new DefaultTableModel(0,5);/0 行
25、5 列的表模型JTable table=new JTable(model);然后,可以使用model的addRow removeRo岫法向表模型中添加或是刪除數(shù)據(jù), 對表模型增刪數(shù)據(jù)的結(jié)果會自動反映到表格視圖上來。但是,通常情況下,我們并不直接使用DefaultTableModel。更多的情形是繼承DefaultTableModel類,并覆蓋其中部分方法以達到特殊的要求.樹形控件(1)JTree構(gòu)造函數(shù):A.JTree():建立一棵系統(tǒng)默認的樹。B.JTree(Hashtable value):利用 Hashtable 建立樹,不顯示 root node(根節(jié)點).C.JTree(Object
26、口 value):利用 Object Array 建立樹,不顯示 root node.D.JTree(TreeModel newModel):禾用 TreeModel 建立樹。E.JTree(TreeNode root):禾用 TreeNode建立樹。F. JTree(TreeNode root,boolean asksAllowsChildren): 禾用 TreeNode建立樹, 并決定是否允許子節(jié)點的存在.G.JTree(Vector value): 利用 Vector 建立樹,不顯示 root node.(2)JTree上的每一個節(jié)點就代表一個 TreeNode對象,TreeNode本
27、身是一個Interface,里面定義了 7個有關(guān)節(jié)點的方法,例如判斷是否為樹葉節(jié)點、有幾個子節(jié) 點(getChildCount()、父節(jié)點為何(getparent() 等等、這些方法的定義你可以在 javax.swing.tree 的package 中找到,讀者可自行查閱 java api 文件。(3)在實際的應用上,一般我們不會直接實作此界面,而是采用java所提供的DefaultMutableTreeMode 類,此類是實作 MutableTreeNode界面而來,并提供了其他 許多實用的方法。MutableTreeNode本身也是一個Interface, 且繼承了 TreeNode界面此
28、類主要是定 義一些節(jié)點的處理方式,例如新增節(jié)點(insert()、刪除節(jié)點(remove()、設置節(jié)點 (setUserObject() 等。整個關(guān)系如下圖:TreeNode-extends-MutableTreeNode-implements-DefaultMutableTr eeNode(4)我們來看如何利 DefaultMutableTreeNode 來建立JTree,我們先來看 DefaultMutableTreeNode 的構(gòu)造函數(shù):DefaultMutableTreeNode構(gòu)造函數(shù):DefaultMutableTreeNode():建立空的 DefaultMutableTreeN
29、ode 對象。DefaultMutableTreeNode(Object userObject):建立 DefaultMutableTreeNode 對象,節(jié)點為userObject對象。DefaultMutableTreeNode(Object userObject,Boolean allowsChildren):建立DefaultMutableTreeNode 對象,節(jié)點為userObject對象并決定此節(jié)點是否允許具有子 節(jié)點。(5)除了以節(jié)點的觀念(TreeNode)建立樹之外,你可以用data model的模式建立 樹。樹的data model稱為TreeModel,用此模式的好處是
30、可以觸發(fā)相關(guān)的樹事件,來處 理樹可能產(chǎn)生的一些變動。TreeModel是一個interface,里面定義了 8種方法;如果你 是一個喜歡自己動手做的人,或是你想顯示的數(shù)據(jù)格式很復雜,你可以考慮直接實作 TreeModel界面中所定義的方法來構(gòu)造出 JTree.TreeModel界面的方法如下所示:TreeModel 方法:void addTreeModelListener(TreeModelListener l):增加一個TreeModelListener 來監(jiān)控 TreeModelEvent 事件。Object getChild(Object parent,int index):返回子節(jié)點。
31、int getChildCount(Object parent):返回子節(jié)點數(shù)量.int getIndexOfChild(Object parent,Object child):返回子節(jié)點的索引值。Object getRoot():返回根節(jié)點。boolean isLeaf(Object node):判斷是否為樹葉節(jié)點。void removeTreeModelListener(TreeModelListener l):刪除 TreeModelListener。void valueForPathChanged(TreePath path,Object newValue):當用戶改變 Tree上的值
32、時如何應你可以實作出這 8種方法,然后構(gòu)造出自己想要的 JTree,不過在大部 份的情況下我們通常不會這樣做,畢竟要實作出這8種方法不是件很輕松的事,而且java本身也提供了一個默認模式,叫做 DefaultTreeModel,這個類已經(jīng)實作了 TreeModel界面,也另外提供許多實用的方法。利用這個默認模式,我們便能很方便的 構(gòu)造出JTree出來了。下面為 DefaultTreeModel的構(gòu)造函數(shù)與范例:DefaultTreeModel 構(gòu)造函數(shù):DefaultTreeModel(TreeNode root):建立 DefaultTreeModel 對象,并定出根節(jié)點。DefaultTreeModel(TreeNode root,Boolean asksAllowsChildren):
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版學校球場施工合同模板(含場地通風與散熱)2篇
- 二零二五年度婚禮現(xiàn)場舞臺搭建與燈光音響租賃合同6篇
- 個性化家庭收養(yǎng)協(xié)議2024版版
- 二零二五年度履約保證金協(xié)議書范本:文化旅游項目2篇
- 醫(yī)療器械2025年度原材料供應與加工合作協(xié)議3篇
- 2025年度智慧農(nóng)業(yè)灌溉增壓泵供應與安裝服務合同3篇
- 二零二五年度城市更新項目存量房買賣合作框架協(xié)議2篇
- 二零二五版煤礦股權(quán)轉(zhuǎn)讓及礦山安全生產(chǎn)責任書4篇
- 2025版園藝用樹苗買賣合同規(guī)范范本3篇
- 二零二五年度市場分析預測專家顧問聘請書3篇
- 2024年供應鏈安全培訓:深入剖析與應用
- 飛鼠養(yǎng)殖技術(shù)指導
- 壞死性筋膜炎
- 整式的加減單元測試題6套
- 股權(quán)架構(gòu)完整
- 山東省泰安市2022年初中學業(yè)水平考試生物試題
- 注塑部質(zhì)量控制標準全套
- 人教A版高中數(shù)學選擇性必修第一冊第二章直線和圓的方程-經(jīng)典例題及配套練習題含答案解析
- 銀行網(wǎng)點服務禮儀標準培訓課件
- 二年級下冊數(shù)學教案 -《數(shù)一數(shù)(二)》 北師大版
- 晶體三極管資料
評論
0/150
提交評論