201711671235學習《java程式設計》第九周學習總結
教材學習內容總結
1.JavaSwing概述
java的java.awt包(Java抽象工具包)提供了許多設計GUI的元件類
Component類的子類或間接子類建立的物件 | 元件 |
Container的子類或間接子類建立的物件 | 容器 |
容器—呼叫—>public add()方法==》把元件(容器)—新增—>該容器(容器的巢狀)
容器—呼叫—>removeAll()| remove(Component 0c)==》移除容器中所有元件/引數c指定的元件
容器<==>元件
容器新增/移除元件時,讓容器呼叫validate()方法==》保證容器中的元件能正確實現
2.視窗
Component<-Container<-
JComponent
JPasswordFiled JcomDoBox JRadioButton JCheckBox JButton JTextField JTextArea JTree JTable Jpanel
密碼框 下拉列表 單選按鈕 複選框 文字按鈕 文字框 文字區 樹元件 標籤 面板
Window
Frame Dialog
JFrame/子類->建立物件==形成==>視窗<==放進= =元件(x視窗) JDialog->建立物件==形成==>對話方塊
2.1JFrame常用方法
JFrame(String s) | 建立標題為s的視窗 | |
public void setBound(int a,int b,int width,int height) | (a,b)設定視窗具體位置,即距螢幕左面a個畫素....,width為視窗寬,height為高 | |
public void setSize(int width,int height) | 設定視窗大小 | |
public void setLocation(int x,int y) | 設定視窗位置 | |
public void setVisible(boolean b) |
設定視窗是否可見,預設不可見 | |
public void setResizable(boolean b) | 設定視窗是否可調整大小,預設可以 | |
public void dispose() | 撤銷當前視窗,並釋放當前視窗所使用的資源 | |
public void setDefaultCloseOperation(int operation) | 設定右上角關閉圖示 | operation取值 DO_NOTHING_ON_CLOSE(什麼不做) HIDE_ON_CLOSE(隱藏當前視窗) DISPOSE_ON_CLOSE(隱藏當前視窗並釋放視窗使用的其他資源) EXIT_ON_CLOSE(結束視窗所在應用程式) |
2.2選單條、選單、選單項
選單條由JMenuBar類建立,選單由JMenu類建立、選單項由JMenuItem類建立,嵌入子選單由JMenu類(JMenuItem的子類)建立
選單條(選單(子選單(選單項)+選單項))
選單上的圖示:Icon icon=new Imagelcon(“a.gif”),Icon宣告一個圖示,使用其子類ImageIcon類建立一個圖示
3.1常用容器
3.1.1IPanel面板(預設FlowLayout佈局)
元件==新增==>面板==新增==>容器
JTabbedPane選項卡窗格 | 建立JTabbedPane容器:public JTabbedPane(int tabPlacement)(tabPlacement確定選項卡位置) | 一個選項卡對應一個元件 | add(String text,Component c)(把元件c1新增到JTabbedPane中,並指定和元件c對應的選項卡的文字提示是text) | |
滾動視窗JScrollPane | 只能新增一個元件,通過滾動條觀看元件 | JTextArea(文字框)不自帶滾動條,JScrollPane scroll=new JScrollPane(new JTextArea()) | ||
拆分視窗JSplitPane | JSplitPane(int a,Component b,Component c) JSplitPane(int a,boolean b,Component c,Component d) |
a:HORIZONTAL_SPLIT(水平)||VVERTICAL_SPLIT(垂直)
|
拆分成兩部分(左右||上下) | |
b決定當拆分線移動時,元件是否連續變化 | ||||
JLayeredPane分層視窗 | add(JComponent com,int layer)(layer指定元件com所在層) |
3.1.2常用佈局
設定佈局:setLayout(佈局物件)
FlowLayout佈局(FlowLayout()) | 從左到右排列居中對齊 | 元件呼叫public void setPreferredSize(Dimension preferredSize) |
BorderLayout佈局 | 分為東南西北中五個區域(中間的區域最大) 元件會被替換 |
容器.add(元件,BorderLayout.CENTER/NORTH/SOUTH/WEST/EAST) |
CardLayout佈局 | 先來在上,依次向下排序 | a.CardLayout card=new CardLayout()(建立CardLayout物件作為佈局) b.con.setLayout(card)(使用容器的setLayout()方法為容器設定佈局) c.con.add(String s,Component b)(將b加入容器,s是代號) d.card.show(con,s)(顯示容器con中元件代號為s的元件) |
GridLayout佈局 | 順序放在網格(網格大小相同,元件與其大小也相同),最多新增m*n個元件 | |
null佈局 | setBounds(int a,int b,int width,int height)(有絕對定位) |
位置不會隨對話方塊大小變化 |
BoxLayout佈局 | 盒式容器(行列形容器) |
4.處理事件
4.1事件處理模式
事件源 | 能夠產生事件的物件 |
監視器 | 對物件的事件源進行監視(addActionListener(監視器)) |
處理事件的介面 | 監視器物件的類宣告實現相應的介面,以便事件源出發監視器時監視器可以呼叫介面方法處理事件 |
4.2事件
ActionEvent事件 | ItemEvent事件 | DocumentEvent事件 | MouseEvent事件 | 焦點事件 | 鍵盤事件 | |
事件源 | 文字框、按鈕、選單項、密碼框、單選框 |
選項框、下拉列表 | 文字區 | 任何元件 | 元件 | 按下、釋放或敲擊鍵盤 |
註冊監視器 | addActionListener(ActionListener listener) | addItemListener(ItemListener listen) | addDocumentListener(DocumentListener listen) |
addMouseListener(MouseListener listener) | addFocusListener(FocusListener listener) | |
介面 | 在java.awt.event包中,事件被觸發,監視器.actionPerformed(ActionEvent e)處理事件 |
在java.awt.event包中,事件被觸發,監視器.itemStateChanged(ItemEvent e)處理事件 | 介面方法:a.public void changedUpdate(DocumentEvent e) b.public void removeUpdate(DocumentEvent e) c.public void insertUpdate(DocumentEvent e) |
處理的事件:(在事件源上)a.按下滑鼠 b.釋放滑鼠 c.單擊滑鼠 d.滑鼠進入(退出)事件源 |
介面方法:a.public void focusGained(FocusEvent e) b.public void focusLost(FocusEvent e) |
介面方法:a.public void keyPressed(KeyEvent e) b.public void keyTyped(KeyEvent e) c.public void KeyReleased(KeyEvent e) |
方法 | a.public Object getSourse() b.public String getActionCommand() |
ItemEvent事件物件.getSource()||getItemSelectable()返回ItemEvent事件的事件源 | a.getX/y()獲取滑鼠在事件源座標系中的x/y座標 b.getModiifiers()獲取滑鼠的左鍵或右鍵 c.getCilckCount()獲取滑鼠被單擊的次數 d.getSourse()獲取發生滑鼠事件的事件源 |
public boolean requestFocusInWindow()獲取輸入焦點 | public int getKeyCode()判斷哪個鍵被按下、釋放或敲擊 |
4.3事件總結
4.3.1授權模式
事件源呼叫方法將某個物件註冊為自己的監視器
4.3.2介面回撥
當事件源發生時介面立馬回撥被類實現的介面中的某個方法
4.3.3方法繫結
監視器必須繫結某個方法來處理事件
4.3.4保持鬆耦合
儘量讓事件源所在的類和監視器是組合關係
2.使用MVC結構
模型(M):儲存資料的物件
檢視(V):為模型提供數顯示的物件
控制器(C):處理使用者互動操作,對於使用者的操作作出響應,讓模型和檢視進行必要的互動,即通過檢視修改,獲取模型的資料;當模型中的資料變化時,讓檢視顯示。
6.對話方塊
有模式對話方塊:當對話方塊處於啟用狀態,只能讓程式響應對話方塊,且將阻塞其他執行緒執行,使用者不能啟用對話方塊所在程式的其他視窗,直到對話方塊消失不見
訊息對話方塊 | 輸入對話方塊 | 確認對話方塊 | 顏色對話方塊 | 自定義對話方塊 | |
有模式 | 有模式(有輸入文字的文字框、確認和取消按鈕) | 有模式 | |||
靜態方法 | public static void showMessageDialog(Component parentComponent,String message,String title,int messageType) | public static void showInputDialog(Component parentComponent,Object message,String title,int messageType) | public static void showConfirmtDialog(Component parentComponent,Object message,String title,int messageType) | public static Color showDialog(Component component,String title,Color initialColor) | a.JDialog() b.JDialog(JFrame owner) |
解釋 | parentComponent:可見對話方塊的位置 message:對話方塊顯示的資訊 title:對話方塊標題 messageType:外觀 |
parentComponent:指定對話方塊依賴的元件(parentComponent為null時,元件在螢幕正方顯示) message:對話方塊提示的資訊 title:對話方塊標題 messageType:外觀 |
parentComponent:指定對話方塊可見位置(parentComponent為null時,元件在螢幕方顯示) message:對話方塊提示的資訊 title:對話方塊標題 messageType:外觀 |
component:對話方塊可見位置 title:對話方塊標題 initialColor:顏色對話方塊返回的初始顏色 |
a.構造一個無標題的始終不可見的對話方塊 b.構造一個無標題的始終不可見的無模式的對話方塊(owmer是對話方塊依賴的視窗,owner為null時,對話方塊依賴一個預設不可見的視窗) |
7.樹元件和表格元件
JTree類的物件稱為樹元件
樹元件 | 表格元件 | |
DefaultMutableTreeNode類實現了MutableTreeNode介面 所以DefaultMutableTreeNode建立的物件可以成為樹上的結點 |
以行和列的形式顯示資料 | |
構造方法 | a.DefaultMutableTreeNode(object userObject) b.DefaultMutableTreeNode(object userObject,boolean allowChildren) |
a.JTable()建立預設的表格模型 b.JTable(int a,int b)建立a行b列的預設模式表格 c.JTable(Object data[][],Object columnName[])建立預設表格模式物件,並顯示由data指定的二維陣列的值,其列名由陣列colunmnName指定 d.重新整理表格顯示:表格.repaint() |
解釋 | a.預設有子節點,用add()新增其他結點作為它的子節點 一個結點可以使用setAllowsChildren(boolean b)設定是否允許有子節點 |
|
事件 | addTreeSelectionListener(TreeSelectionListener listener)獲得監視器 | |
介面方法:public void valueChanged(TreeSelectionEvent e) | ||
樹使用getLastSelectionPathComponent()獲取選中的結點 |
8.按鈕繫結到鍵盤
8.1AbstractAction類和特殊的監控器
按鈕繫結鍵盤操作:將按鈕繫結到敲擊某個鍵
監視器:建立監視器的類必須實現ActionListener介面的子介面Action
8.2指定監視器的步驟
獲取輸入對映 | 按鈕呼叫public final InputMap getInputMap(int condition)返回一個InputMap物件 |
繫結按鈕的鍵盤操作 | 返回的對映呼叫public void put(KeyStroke keystroke,Object actionMapKey)將敲擊鍵盤上的某鍵指定為按鈕的鍵盤操作 |
為按鈕的鍵盤操作指定監視器 | 按鈕呼叫public final ActionMap getActionMap()返回一個ActionMap物件 ActionMap actionMap=button.getActionMap(); actionMap.呼叫public void put(Object key,Action action)為按鈕的鍵盤操作指定監視器(實現敲擊鍵盤上的鍵通知監視器 |
9.列印元件
步驟:
獲取ToolKit物件 | 元件呼叫getToolkit()返回系統提供的Toolkit物件的引用 |
獲得PrintJob物件 | getPrintJob(Frame f,String s,null)獲取PrintJob物件 |
獲取Graphics物件 | PrintJob物件使用getGraphics()獲取Graphiics物件 |
列印元件 | 元件呼叫paintAll(Graphics物件)列印該元件及其子元件 |
列印位置 | 為避免列印覆蓋,Graphics物件可以使用(Graphics類中方法)translate(int x,int y)改變元件在列印頁的列印位置 |
教材學習中的問題和解決過程
選單條、選單、選單項之間使用add()方法時新增和被新增的物件分不清楚:通過讀例題分析操作的過程
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
目標 | 5000行 | 20篇 | 400小時 | 會用java語言獨立設計程式 |
第一週 | 13/13 | 1/1 | 5/5 | 學會使用jdk以及對java源程式語句的基本注意事項有所瞭解 |
第二週 | 140/143 | 1/2 | 10/15 | 學會java基本資料型別與陣列和c語言/c++在表達和用法上的相同/不同之處 |
第三週 | 276/419 | 1/3 | 20/35 | java中運算子,表示式和語句的表現形式,類的宣告,定義方法 |
第四周 | 600/1019 | 1/4 | 30/45 | 類和物件 |
第五週 | 150/1169 |
1/5 | 10/55 | 繼承的作用,子類和父類的繼承性,子類繼承父類後方法的訪問許可權以及各種操作 |
第六週 | 100/1269 | 1/6 | 8/63 | 介面定義、使用方法和作用 |
第七週 | 100/1369 | 1/7 | 9/72 | 內部類(獨有)包含匿名類和異常類(檢測)的使用方法和作用 |
第八週 | 150/1869 | 1/8 | 10/82 | java常用實用類和方法 |
第九周 | 100/1969 | 1/9 | 20/102 | 元件、容器、視窗、(如何處理事件:事件源,監視器、介面) |
參考文獻
《java2實用教程(第5版)》