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文件
 

猜你喜欢

转载自blog.csdn.net/qq_41102402/article/details/85001387