程序啟動界面與樹形結構_第1頁
程序啟動界面與樹形結構_第2頁
程序啟動界面與樹形結構_第3頁
程序啟動界面與樹形結構_第4頁
程序啟動界面與樹形結構_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 第2講 程序啟動界面與樹形結構目標:了解Java程序啟動界面的原理掌握Java Swing中樹類JTree的使用學會樹結點事件處理方法重點: 啟動界面的實現 JTree類的創(chuàng)建 樹選擇事件處理 樹結點文本編輯 定制樹的顯示難點: 動態(tài)添加、移除樹結點 2.1 Java程序啟動界面的原理問題: 當一個應用程序啟動需要較長時間時,往往在等待過程中讓人明顯感到速度慢,難免產生厭煩的心理,怎樣可以緩解這種心情呢?方案: 在應用程序啟動耗費時間較長的情況下,通常引用一個表示歡迎使用本程序的啟動界面Splash Window,在應用程序初始化完成后該畫面自動消失,在等待的這段時間里用戶可通過欣賞畫面來打

2、磨時間。2.1.1 Splash Window(1)Splash Window使用的是JWindow類 在Swing中提供了四個頂層容器類:JFrame、JDialog、 JApplet 和JWindow.由于JFrame、JDialog有標題欄,不適合作為啟動界面,而JApplet是Applet的容器,用于在瀏覽器中顯示Applet,也只有JWindow能夠實現所需要的功能。(2)顯示Splash Window時,需考慮的幾個問題:當顯示Splash Window時,后臺的初始化應用程序不能停止運行;在一定時間后,Splash Window必須自動消失,進入正常的交互運行界面;在JWindo

3、w上必須放置提示圖片,并且顯示速度不能太慢,要注意的是圖片要先加載到JLabel、JButton組件上;Splash Window必須總在應用程序的其他窗口之上,不能被遮蔽掉。故使用JWindow.tofront()方法將當前窗口放置最上面顯示,當應用程序初始化完成時,使用方法JWindow.dispose()關閉啟動界面。由線程調用sleep()來設置啟動界面顯示的時間以及啟動線程時將Splash Window放置在應用程序多個窗口中的最前面。2.1.2 啟動界面程序應用示例分析 (見教材P9) 設置啟動界面的基本步驟: (1)加載圖片 URL url=getClass().getResou

4、rce(“/images/win.jpg”); /獲取圖片所在的文件路徑 ImageIcon icon=new ImageIcon(url); /使用ImageIcon()創(chuàng)建圖片 JLabel jlb=new JLabel(icon); /圖片先添加到標簽或按鈕上 panel.add(jlb); setContentPane(panel); /再將標簽或按鈕添加到面板上,最后把面板添加到容器里(2)應用線程啟動設置畫面停留的時間 public void start() this.toFront(); /將啟動界面設置在其他窗口的最上面 splashThread=new Thread(this

5、); splashThread.start(); public void run() try show(); Thread.sleep(3000); /延時3秒 catch(Exception ex)ex.printStackTrace(); this.dispose(); /關閉窗口 (3)主窗口的設置 static void showFrame(String title) JFrame frame=new JFrame(title); frame.setSize(400,300); frame.setVisible(true); /窗口居中顯示 frame.getContentPane()

6、.add(new Label(“進入應用系統(tǒng)”); (4)主函數 功能:顯示主窗口和啟動界面 2.2 樹類JTree的創(chuàng)建在Java中,要構造一個由用戶定義枝結點的樹,JTree還必須同樹枝結點類TreePath與TreeNode共同完成。常見樹的創(chuàng)建方式: JTree() /建立一個系統(tǒng)默認的樹 JTree(TreeNode root) /應用結點TreeNode建立樹 JTree(Hashtable value) /應用Hashtable表來建立樹樹結點使用DefaultMutableTreeNode類來創(chuàng)建 應用結點TreeNode 構造樹的步驟:(1)定義結點 DefaultMutab

7、leTreeNode n1=new DefaultMutableTreeNode(“結點1”);DefaultMutableTreeNode n2=new DefaultMutableTreeNode(“結點2”);DefaultMutableTreeNode n3=new DefaultMutableTreeNode(“結點3”);(2)定義樹,確定根結點 JTree tree=new JTree(n1);(3)添加子結點 n1.add(n2); n1.add(n3);2.3 樹的選擇事件處理 import javax.swing.tree.*; import javax.swing.eve

8、nt.*;class Apptree extends Frame Apptree() /主界面的布局 /樹的創(chuàng)建 JTree tree=new JTree(root); tree.addTreeSeclectionListener(this); /構造方法結束注冊樹選擇事件監(jiān)聽器implements TreeSelectionListener實現樹選擇事件監(jiān)聽接口引入包/定義結點樹選擇事件處理方法 if(e.getSource()=tree) DefaultMutableTreeNode node=new (DefaultMutableTreeNode)tree.getLastSelected

9、PathComponent(); if(node.isLeaf() String str=node.toString(); /獲取結點的文本信息 if(str.equals(“考勤管理”) text.setText(str+ “:n在這里顯示”); else if(.) public void valueChanged(TreeSelectionEvent e)2.4 樹結點文本編輯默認情況下樹結點是不可編輯的。通過setEditable(boolean b)方法來設置可編輯與否, 當b為true時,樹結點成為可編輯,反之,為不可編輯。功能:在運行界面中,直接通過鼠標的操作將結點的字符 串“出

10、勤管理”改為“考勤管理”。操作:可以在結點單元上連擊三次鼠標,或者中間加一暫停的雙擊鼠標激活結點的文本字段編輯操作。完成編輯后,按回車確認。2.5 定制樹的顯示功能:用自制的圖標和字體來顯示一個樹。一個樹對象對應一個用于描述結點顯示形式的DefaultTreeCellRenderer類,使用該類的setXXX等方法,可以方便地定制樹的顯示。比如將樹葉結點的圖標由文件leaf.gif指定,代碼如下: DefaultTreeCellRenderer render=new DefaultTreeCellRenderer(); render.setLeafIcon(new ImageIcon(“l(fā)ea

11、f.gif ); tree.setCellReaderer(render);DefaultTreeCellRenderer類的一些常用的方法:setLeafIcon(Icon icon); /設置樹葉結點的圖標setBackground(Color c); /設置結點文本的底色setClosedIcon(Icon icon); /設置結點折疊時的圖標setOpenIcon(Icon icon); /設置結點展開時的圖標setTextSelectionColor(Color c); / 設置結點選中時文本的顏色setTextNonSelectionColor(Color c); /設置結點不選中

12、時文本的顏色setFont(Font f); /設置字體效果圖如下:2.6 動態(tài)添加、移除結點功能簡介:通過按鈕動態(tài)地進行以下操作: “添加”一個新結點 “移除”所選中的結點 清除除了根結點以外的所有結點(1)動態(tài)添加一個新結點的主代碼如下: public DefaultMutableTreeNode addNewNode(Object child) DefaultMutableTreeNode parentNode = null; TreePath parentPath = tree.getSelectionPath(); if (parentPath = null) parentNode

13、= root; else parentNode = (DefaultMutableTreeNode) (parentPath.getLastPathComponent(); DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child); treeModel.insertNodeInto(childNode, parentNode, parentNode.getChildCount(); /在父節(jié)點parent的子結點中的最后一個子結點的位置插入 childNode tree.scrollPathToVisible(ne

14、w TreePath(childNode.getPath(); return childNode; (2)動態(tài)刪除結點的主代碼如下:public void removeCurrentNode() TreePath currentSelection = tree.getSelectionPath(); if (currentSelection != null) DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) (currentSelection.getLastPathComponent(); / 返回此路徑的最后一個組件 MutableTreeNode parent = (MutableTreeNode)(currentNode.getParent(); if (parent != null) treeModel.removeNodeFromParent(currentNode); /從其父節(jié)點中移除節(jié)點 return; (3)清除除了根結點以外的所有結點 public void clear() rootNode.removeAllChildren(); treeModel.reload();/該模型將通知其所有偵聽器,節(jié)點 (掛起)下面的模型已更改 注意: treeMod

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論