1. 程式人生 > >201711671135《Java程式設計》第9章學習總結

201711671135《Java程式設計》第9章學習總結

1.處理事件

1.1事件處理模式

事件源:能夠產生事件的物件。

監視器:需要一個物件對事件源進行監視,以便對發生的事件做出處理。事件源通過呼叫相應的方法將某個物件註冊為自己的監視器。

addActionListener(監視器);

處理事件的介面:為了讓監視器這個物件能對事件源發生的事件進行處理,建立該監視器物件的類必須宣告實現相應的介面,即必須在類體中重寫介面中所有方法,那麼當事件源發生事件時,監視器就自動呼叫被類重寫的介面方法。

1.2ActionEvent事件

ActionEvent事件源

如果使用者選擇了某個單選按鈕,就會觸發ActionEvent事件。

註冊監視器

ActionEvent事件的元件使用方法addActionListener(ActionListener listen)將實現ActionListener介面的類的例項註冊為事件源的監視器。

ActionListener介面

該介面只有一個方法public void actionPerformed(ActionEvent e)。

ActionEvent類中的方法

Public Object getSource() 該方法是從Event繼承的方法,ActionEvent事件物件呼叫該方法可以獲取發生ActionEvent事件的事件源物件的引用。

Public String getActionCommand() ActionEvent物件呼叫該方法可以獲取發生ActionEvent事件時,和該事件相關的一個“命令”字串,對於文字框,當發生ActionEvent事件時,預設的“命令”字串是文字框中的文字。

1.4IteaEvent事件

ItemEvent事件源:選擇框、下拉列表都可以。選擇框提供兩種狀態,一種是選中,一種是未選中。

註冊監視器:能觸發ItemEvent事件的元件使用addItemListener(ItemListener listen)將實現ItemListener介面的類的例項註冊為事件源的監聽器。

ItemListener介面:只有一個方法public void itemStateChanged(ItemEvent e)。

ItemEvent事件物件出來可以使用getSource()方法返回發生ItemEvent事件的事件源外,也可以使用getItemSelectable()方法返回發生ItemEvent事件的事件源。

1.5DocumentEvent事件

DocumentEvent事件源:文字區含有一個實現DocumentE介面的例項,該例項被稱作文字區所維護的文件,文字區呼叫getDocument()方法返回所維護的文件。

Document類在javax.swing.event包中。只要使用者在文字區中進行文字編輯操作就會導致觸發DocumentEvent事件。

註冊監視器:事件源使用addDocumentListener(DocumentListener listen)將實現DocumentListener介面的類的例項註冊為事件源的監視器。

DocumentListener介面

在javax.swing.event包中,介面中有3個方法:

public void changedUpdate(DocumentEvent e)

public void removeUpdate(DocumentEvent e)

public void insertUpdate(DocumentEvent e)

1.6MouseEvent事件

任何元件上都可以發生滑鼠事件,導致MouseEvent類自動建立一個事件物件。事件源註冊監視器的方法是addMouseListener(MouseListener listener)。

使用MouseListener介面處理滑鼠事件

在事件源上按下滑鼠;
在事件源上釋放滑鼠;
在事件源上單擊滑鼠;
滑鼠進入事件源;
滑鼠退出事件源。
MouseEvent類幾個重要方法:

getX()獲取滑鼠指標在事件源座標系中的x座標。

getY()獲取滑鼠指標在事件源座標系中的y座標。

getModifiers()獲取滑鼠的左鍵(BUTON1_MASK)或右鍵(BUTTON3_MASK)。

getClickCount()獲取滑鼠被單擊的次數。

getSource()獲取發生滑鼠事件的事件源。

MouseListener介面中方法:

mousePressed(MouseEvent)負責處理在元件上按下滑鼠鍵觸發的滑鼠事件。

mouseReleased(MouseEvent)負責處理在元件上釋放滑鼠鍵觸發的滑鼠事件。

mouseEntered(MouseEvent)負責處理滑鼠進入元件觸發的滑鼠事件。

mouseExited(MouseEvent)負責處理滑鼠離開元件觸發的滑鼠事件。

mouseClicked(MouseEvent)負責處理在元件上單擊滑鼠鍵觸發的滑鼠事件。

使用MouseMotionListener介面處理滑鼠事件:

處理已下兩種操作:

在事件源上拖動滑鼠;

在事件源上移動滑鼠。

滑鼠事件的型別是MouseEvent,即當發生滑鼠事件時,MouseEvent類自動建立一個事件物件。

事件源註冊監視器的方法是addMouseMotionListener(MouseMotionListener listener)。

mouseDragged(MouseEvent)負責處理拖動滑鼠觸發的滑鼠事件。

mouseMoved(MouseEvent)負責處理移動滑鼠觸發的滑鼠事件。

1.7焦點事件

元件可以觸發焦點事件。可以使用addFocusListener(FocusListener listener)註冊焦點事件監視器。當元件獲得焦點監視器後,如果元件從無輸入焦點變成有輸入焦點或者從有輸入焦點變成無輸入焦點都會觸發FocusEvent事件。

從無輸入到有輸入:public void focusGained(FocusEvent e)

從有輸入到無輸入:public void focusLost(FocusEvent e)

一個元件也可呼叫public Boolean requestFocusInWindow()方法會的輸入焦點。

1.8鍵盤事件

當按下、釋放或敲擊鍵盤上一個鍵時就觸發了鍵盤事件。當一個元件處於啟用狀態時,敲擊鍵盤上一個鍵就會導致這個元件觸發鍵盤事件。

KeyListener介面的三個方法:

public void KeyPressed(KeyEvent e)(使用者按下某個鍵時)

public void KeyTyped(KeyEvent e)(是KeyPressed和KeyReleased的組合,當鍵被按下又釋放時呼叫)

public void KeyReleased(KeyEvent e)(使用者釋放某個鍵時)

KeyEvent類的public int getKeyCode()方法,可以判斷哪個鍵被按下、敲擊或釋放。public void getKeyChar()也可以判斷。getKeyChar()方法返回鍵上的字元。

1.9視窗事件

JFrame及子類建立的視窗可以呼叫setDefaultCloseOperation(int operation)

方法設定視窗的關閉方式。

WindowListener介面:

當一個視窗被啟用、撤銷激、開啟、關閉、圖示化或撤銷圖示化時,就觸發了視窗事件,即WindowEvent建立了一個視窗事件。

public void windowActivated(WindowEvent e)(當視窗從非啟用狀態到啟用時)

public void windowDeactivated(WindowEvent e)(當視窗啟用狀態到非啟用狀態時)

public void windowClosing(WindowEvent e)(當視窗正在被關閉時)

public void windowClosed(WindowEvent e)(當視窗關閉後)

public void windowIconified(WindowEvent e)(當視窗圖示化時)

public void windowDeiconified(WindowEvent e)(當視窗撤消圖示化時)

public void windowOpened(WindowEvent e) (當視窗開啟時)

WindowAdapter介面卡:介面卡可以代替介面來處理事件。

1.10匿名類例項或視窗做監視器

匿名類的例項做監視器:如果用內部類的例項做監視器,那麼當發生事件時,監視器就比較容易操作事件源所在的外嵌類中的成員。

視窗做監視器:能觸發事件的元件經常位於視窗中,如果讓元件所在的視窗作為監視器,能讓事件的處理比較方便。

2.使用MVC結構

模型-檢視-控制器(Model-View-Controller),簡稱為MVC,其目的是以會話形式提供方便的GUI支援。

模型:用於儲存資料的物件。

檢視:為模型提供資料顯示的物件。

控制器:處理使用者的互動操作,對於使用者的操作作出響應,讓模型和檢視進行必要的互動,即通過檢視修改、獲取模型中的資料;當模型中的資料變化時,讓檢視更新顯示。

MVC結構可以使程式更具有物件化特性,也更容易維護。

2.對話方塊

2.1訊息對話方塊

訊息對話方塊是有模式對話方塊,進行一個重要的操作動作之前,最好能彈出一個訊息對話方塊。

public static void showMessageDialog(

                       Component parentComponent,

                       String message,

                       String title,

                       int messageType)

引數parentComponent指定對話方塊可見時的位置,如果parentComponent為null,對話方塊會在螢幕正前面顯示出來。message指定對話方塊上顯示的訊息,title指定對話方塊的標題,messageType取值是JOptionPane中的類常量。

2.2輸入對話方塊

輸入對話方塊含有供使用者輸入文字的文字框、一個確認和取消按鈕,是有模式對話方塊。

public static

         String showInputDialog(Component parentComponent,

                                      Object message,

                                      String title,

                                      int messageType)

 

2.3確認對話方塊

確認對話方塊是有模式對話方塊。返回的具體值依賴於使用者所單擊的對話方塊上的按鈕和對話方塊上的關閉圖示。

public static int showConfirmDialog(Component parentComponent,

                                    Object message,

                                    String title,

                                    int optionType)

 

2.4顏色對話方塊

 

   public static Color showDialog(Component component,       

                                        String title,

                                        Color initialColor)

initialColor指定顏色對話方塊返回的初始顏色。

2.6自定義對話方塊

建立對話方塊與建立視窗類似,通過建立JDialog的子類來建立一個對話方塊類,然後這個類的一個例項,即這個子類建立的一個物件,就是一個對話方塊。對話方塊是一個容器,它的預設佈局是BorderLayout,對話方塊可以新增元件,實現與使用者的互動操作。

兩個常用構造方法:

JDialog() 構造一個無標題的初始不可見的對話方塊,對話方塊依賴一個預設的不可見的視窗。

JDialog(JFrame owner) 構造一個無標題的初始不可見的無模式的對話方塊,owner是對話方塊所依賴的視窗,如果owner取null,對話方塊依賴一個預設的不可見的視窗。

3.樹元件與表格元件

3.1樹元件

JTree類的物件稱為元件,也是常用元件之一。

DefaultMutableTreeNode結點
樹元件由結點組成,要想構造一個樹元件,必須實現為其建立節點物件。樹種只有一個根結點。其他結點分為兩類:一類是帶子結點的分支結點,另一類是不帶子結點的葉結點。

DefaultMutableTreeNode類的兩個常用的構造方法是:

DefaultMutableTreeNode(Object userObject)

DefaultMutableTreeNode(Object userObject,boolean allowChildren)

(2)樹上的TreeSelectionEvent事件

使用addTreeSelectionListener(TreeSelectionListener listener)

方法獲得一個監視器。

建立監視器的類必須實現TreeSelectionListener介面,介面中的方法是public void valueChanged(TreeSelectionEvent e)。

樹使用getLastSelectedPathComponent()方法獲取選中的結點。

3.2表格元件

表格元件以行和列的形式顯示資料,允許對錶格中的資料進行編輯。

JTable常用的3個構造方法:

JTable() 建立預設的表格模型。

JTable(int a,int b) 建立a行,b列的預設模型表格

JTable (Object data[][],Object  columnName[]) 建立預設表格模型物件,並且顯示由data指定的二維陣列的值,其列名由陣列columnName指定。

在表格中輸入或修改資料後,需按回車或用滑鼠單擊表格的單元格確定所輸入或修改的結果。當表格需要重新整理顯示時,讓表格呼叫repaint方法。

4.按鈕繫結到鍵盤

指定監視器的步驟:

獲取輸入對映
按鈕首先呼叫public final InputMap getInputMap(int condition)  方法返回一個InputMap物件.

繫結按鈕的鍵盤操作
步驟(1)返回的輸入對映首先呼叫方法public void put(KeyStroke keyStroke,Object actionMapKey),將敲擊鍵盤上的某鍵指定為按鈕的鍵盤操作.

為按鈕的鍵盤操作指定監視器
按鈕呼叫方法public final ActionMap getActionMap()返回一個ActionMap物件:ActionMap actionmap = button.getActionMap();然後,該物件actionmap呼叫方法: public void put(Object key,Action action) 為按鈕的鍵盤操作指定監視器

5.列印元件

列印元件工作步驟如下:

(1)獲取ToolKit物件

讓元件呼叫getToolkit()方法返回系統提供的Toolkit物件。

(2)獲得PrintJob物件

Toolkit物件呼叫getPrintJob()方法返回一個PrintJob物件。

(3)獲取Graphics物件

PrintJob物件使用getGraphics()方法獲得一個Graphics物件。

(4)列印元件

步驟3獲取的Graphics物件是g,元件呼叫paintAll(g)將打印出該元件及其子元件。如果呼叫方法: pain(g)將打印出該元件本身,但不列印子元件。

6.釋出GUI程式

6.1首先用文字編輯器編寫一個清單檔案

6.2生成JAR檔案