201711671119《Java程序设计》第九章学习总结

教学内容总结

Java Swing概述

1.容器类(Container)和 组件类(Component)

2.java.awt和javax.swing包中的部分类的层次关系的UML类图如下:

3. GUI编程经常提到的基本知识点 。

(1)Java把Component类的子类或间接子类创建的对象称为一个组件.

(2)Java把Container的子类或间接子类创建的对象称为一个容器.

(3)可以向容器添加组件。Container类提供了一个public方法:add( ),一个容器可以调用这个方法将组件添加到该容器中。

(4)容器调用removeAll()方法可以移掉容器中的全部组件;调用remove(Component c)方法可以移掉容器中参数c指定的组件。

(5)注意到容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。

扫描二维码关注公众号,回复: 4418089 查看本文章

(6)每当容器添加新的组件或移掉组件时,应当让容器调用validate()方法,以保证容器中的组件能正确显示出来

如:

    JFrame f=new JFrame();

    JButton  button=new JButton("确定")

    f.add(button);

    …….

    f.remove(button);

窗口

1.Java提供的JFrame类的实例是一个底层容器,即通常所称的窗口。其他组件必须被添加到底层容器中,以便借助这个地层容器和操作系统进行信息交互。

2.JFrame类是Container类的间接子类。当需要一个窗口时,可使用JFrame或其子类创建一个对象。

3.可以向窗口添加组件。窗口默认地被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。

 

Jframe常用方法

1.JFrame构造方法:

JFrame() 创建一个无标题的窗口。

JFrame(String s) 创建标题为s的窗口。

2.常用方法:

1)public void setBounds(int a,int b,int width,int height 设置窗口的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。

2)public void setSize(int width,int height) 设置窗口的大小。

3)public void setLocation(int x,int y) 设置窗口的位置,默认位置是(0,0)。

4)public void setVisible(boolean b) 设置窗口是否可见,窗口默认是不可见的。

5)public void setResizable(boolean b) 设置窗口是否可调整大小,默认可调整大小。

6)public void dispose() 撤消当前窗口,并释放当前窗口所使用的资源。

7)public void setExtendedState(int state) 设置窗口的扩展状态.

8)public void setDefaultCloseOperation(int operation)  该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。如:EXIT_ON_CLOSE

9)public void setLayout(LayoutManager mgr) 设置此容器的布局管理器。

10)public Component add(Component comp) 将指定组件追加到此容器的尾部。

11)public void setMenuBar(MenuBar mb) 将此 frame 的菜单栏设置为指定的菜单栏。

12)public void validate() 使用 validate 方法会使容器再次布置其子组件。在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。

 

菜单、菜单条、菜单项

1.菜单条

  JComponent类的子类JMenubar负责创建菜单条,JFrame类有一个将菜单条放置到窗口中的方法:setJMenuBar(JMenuBar bar);该方法将菜单条添加到窗口的顶端。

菜单条JMenuBar类构造方法:JMenuBar(); JMenuBar  Mbar=new JMenuBar()

2.菜单

  JComponent类的子类JMenu负责创建菜单。

菜单JMenu类构造方法:JMenu() ; JMenu(String s) ; JMenu m=new JMenu();

常用方法:

  public void add(JMenuItem item) 向菜单增加由参数item指定的菜单项

  public JMenuItem getItem(int n) 得到指定索引处的菜单选项。

  public int getItemCount() 得到菜单选项的数目。

3.菜单项

  JComponent类的子类JMenuItem负责创建菜单项,JMenuItem类的主要方法有以下几种:

  JMenuItem(String s) 构造有标题的菜单项。

  JMenuItem(String text, Icon icon) 构造有标题和图标的菜单项

  public void setAccelerator(KeyStroke keyStroke)为菜单项设置快捷键

 

常用组件与布局

一、常用组件

  1. 文本框:由JComponent的子类JTextField创建文本框。

    构造函数:JTextField( ) ; JTextField(int columns) ;

    常用方法:public String getText();  public void setText(String t);

    2.文本区:由JComponent的子类JTexArea创建文本区。

    构造函数:JTextArea() ;JTextArea(int rows, int columns)

    常用方法:public String getText();

                        public void setText(String t);

    3.按钮:由JComponent的子类JButton类用来创建按钮。

    构造函数:JButton() ; JButton(String text) ;

    常用方法:public void addActionListener(ActionListener l);

    4.标签:由JComponent的子类JLabel类用来创建标签。

    构造函数:JLabel() ; JLabel(String text) ; JLabel(Icon image) ;

    常用方法:public String getText(); 

                        public void setText(String t);

    5.选择框:由JComponent的子类JCheckBox类用来创建选择框

    构造函数: JCheckBox() ;JCheckBox(String text) ;

    常用方法: public void addItemListener(ItemListener l)

                         public void addActionListener(ActionListener l)

    ItemListener接口中:Object getItemSelectable()相当于getSource();

    public int getStateChange();若被选中SELECTED/DESEELCTED

    6.单选按钮:由JComponent的子类JRadioButton类用来创建单项选择框。

    构造函数: JRadioButton() ; JRadioButton(String text) ;

    常用方法: public void addItemListener(ItemListener l)

    7.下拉列表:由JComponent的子类JComboBox类用来创建下拉列表。

    构造函数:JComboBox() ; JComboBox(Object[] items)

    常用方法: public void addItemListener(ItemListener l)    

                        public Object getSelectedItem();

                        public int getSelectedIndex()

    8.密码框:由JComponent的子类JPasswordField创建密码框.

    构造函数:JPasswordField() ; JPasswordField(int columns)

    常用方法:public String getText();

                        public void setText(String t);

    public void setEchoChar(char c)使用该方法重新设置回显字符.                      

    public char[] getPassword()方法可以返回实际的密码

     

    二、常用容器

    JPanel 面板:

    构造方法:Jpanel() ;如: JPanel p=new JPanel();

    常用方法:public void add();

    使用JPanel创建面板,再向这个面板添加组件,然后把这个面板添加到其它容器中。JPanel面板的默认布局是FlowLayout布局。

     

    JTabbedPane选项卡窗格

    1.一个选项卡对应一个组件

    2.各个选项卡对应的组件层叠式放入JTabbedPane容器,当用户单击选项卡时,JTabbedPane

    2.各个选项卡对应的组件层叠式放入JTabbedPane容器,当用户单击选项卡时,JTabbedPane容器将显示该选项卡对应的组件。

    3.选项卡默认地在JTabbedPane容器的顶部从左向右依次排列。

    4.使用add(String text,Component c);

    方法将组件c添加到JTabbedPane容器中,并指定和组件c对应的选项卡的文本提示是text。

     

    滚动窗格JScrollPane

  2. 滚动窗格只可以添加一个组件
  3. 需要把文本区放到一个滚动窗格中
  4.  

    拆分窗格JSplitPane

    拆分窗格有两种类型:水平拆分和垂直拆分。

    .水平拆分窗格用一条拆分线把窗格分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格用一条拆分线把窗格分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。

     

    JLayeredPane分层窗格

    分层窗格使用

            add(Jcomponent com, int layer);

    添加组件com,并指定com所在的层,其中参数layer取值JLayeredPane类中的类常量:

    DEFAULT_LAYER、PALETTE_LAYER、MODAL_LAYER、POPUP_LAYER、DRAG_LAYER。

    1.DEFAULT_LAYER是最底层,添加到DEFAULT_LAYER层的组件如果和其他层的组件发生重叠时,将被其他组件遮挡。

    2.DRAG_LAYER层是最上面的层,如果分层窗格中添加了许多组件,当用户用鼠标移动一组件时,可以把该组件放到DRAG_LAYER层,

    分层窗格调用public void setLayer(Component c,int layer)可以重新设置组件c所在的层,调用public int getLayer(Component c)可以获取组件c所在的层数。

     

    三、常用布局

    java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局类和java.swing.border包中的BoxLayout布局类。

     

    1.FlowLayout布局:是JPanel型容器的默认布局

           1)创建布局对象 : FlowLayout flow=new FlowLayout();

           2)容器con使用布局对象: con.setLayout(flow);

           3)con可以使用Container类提供的add方法将组件顺序地添加到容器中

        FlowLayout布局对象调用相应的方法可以重新设置布局的对齐方式等.

        如: public void setAlignment(int align)

    2.BorderLayout布局:

           BorderLayout 布局是Window型容器的默认布局 。

        使用BorderLayout布局的容器con,可以使用add方法将一个组件b添加到中心区域:con.add(b,BorderLayout.CENTER);或  con.add(BorderLayour.CENTER,b);

    3.CardLayout 布局 :  使用CardLayout的一般步骤如下:

             1)创建CardLayout对象 CardLayout card=new CardLayout();

             2)为容器设置布局 con.setLayout(card);

          3)容器调用add(String s,Component b)将组件b加入容器,并给出了显示该组件的代号s。

          4)布局对象card用CardLayout类提供的show()方法,显示容器con中组件代号为s的组件:card.show(con,s);

    4.GridLayout布局 :

       GridLayout布局策略是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。 GridLayout布局编辑器的一般步骤如下:

       1)创建布局对象,指定划分网格的行数m和列数n

       GridLayout grid=new new GridLayout(10,8);

       2)使用GridLayout布局的容器调用方法add(Component c)将组件c加入容器。    

    5.null布局

    空布局容器可以准确地定位组件在容器的位置和大小。setBounds(int a,int b,int width,int height)方法是所有组件都拥有的一个方法,组件调用该方法可以设置本身的大小和在容器中的位置。

  5. BoxLayout布局
    1. Box类的类(静态)方法 createHorizontalBox()获得一个行型盒式容器;
    2. 使用Box类的类(静态)方法 createVerticalBox()获得一个列型盒式容器。
  6. 3)想控制盒式布局容器中组件之间的距离,需使用水平支撑组件或垂直支撑。

     

     

    处理事件

    事件处理模式:事件源、监视器、处理事件的接口

     

    ActionEvent事件

    1.ActionEvent事件源 :

        文本框、按纽、菜单项、密码框和单选按纽都可以触发ActionEvent事件,即都可以成为ActionEvent事件的事件源。

     2.注册监视器: ActionListener接口作为监视器

        事件源.addActionListener(ActionListener listen)

       将实现ActionListener接口的类的实例注册为事件源的监视器。

     3.ActionListener接口:重写接口中的方法作为事件处理。

        ActionListener接口在java.awt.event包中,该接口中只有一个方法:

        public void actionPerformed(ActinEvent e)

            事件源触发ActionEvent事件后,监视器将发现触发的ActionEvent事件,然后调用接口中的这个方法对发生的事件作出处理。ActionEvent类事先创建的事件对象就会传递给该方法的参数e。  

    4.ActionEvent类中的方法:下面的方法能够获取发生动作的事件源。

       public Object getSource()

          调用该方法可以获取发生ActionEvent事件的事件源对象的引用。

       public String getActionCommand()

          调用该方法可以获取发生ActionEvent事件时,和该事件相关的一个命令字符串

     

    ItemEvent事件

    1.ItemEvent事件源 :选择框、下拉列表都可以触发ItemEvent事件。

    2.注册监视器:ItemListener接口作为监视器

         事件源.addItemListener(ItemListener listen)

         将实现ItemListener接口的类的实例注册为事件源的监视器。

    3.ItemListener接口:重写方法作为事件处理

        ItemListener接口在java.awt.event包中,该接口中只有一个方法

        public void itemStateChanged(ItemEvent e)

        事件源触发ItemEvent事件后,监视器将发现触发的ItemEvent事件,然后调用接口中的itemStateChanged(ItemEvent  e)方法对发生的事件作出处理。ItemEvent类事先创建的事件对象就会传递给该方法的参数e。

    4.ItemEvent类中的方法 :

        getSource()方法返回发生Itemevent事件的事件源外

        getItemSelectable()方法返回发生Itemevent事件的事件源。

     

    DocumentEvent事件

    1.DocumentEvent事件源 :文本区所维护的文档能触发DocumentEvent事件  2.注册监视器:DocumentListener作为监视器

         addDucumentListener(DocumentListener listen)

         将实现DocumentListener接口的类的实例注册为事件源的监视器。

    3.DocumentListener接口:重写接口中的方法作为事件处理

        DocumentListener接口在javax.swing.event包中,该接口中有三个方法:

              public void changedUpdate(DocumentEvent e)   

        public void removeUpdate(DocumentEvent e)

    public void insertUpdate(DocumentEvent e)

     

    MouseEvent事件

    1.使用MouseListener接口可以处理以下5种操作触发的鼠标事件

        在事件源上按下鼠标键、在事件源上释放鼠标键、在事件源上击鼠标键、鼠标进入事件源、鼠标退出事件源。

    注册监视器:MouseListener接口作为监视器

    事件源.addMouseListener(MouseListener listener)。

    MouseListener接口中有如下方法:重写方法作为事件源的处理

       mousePressed(MouseEvent) 负责处理在组件上按下鼠标键触发的鼠标事件

       mouseReleased(MouseEvent) 负责处理在组件上释放鼠标键触发的鼠标事件

       mouseEntered(MouseEvent) 负责处理鼠标进入组件触发的鼠标事件

       mouseExited(MouseEvent) 负责处理鼠标离开组件触发的鼠标事件

       mouseClicked(MouseEvent) 负责处理在组件上单击鼠标键触发的鼠标事件

    MouseEvent 中有下列几个重要的方法:

         getX() 获取鼠标指针在事件源坐标系中的x-坐标。

         getY() 获取鼠标指针在事件源坐标系中的y-坐标。

         getModifiers() 获取鼠标的左键或右键。

         getClickCount() 获取鼠标被单击的次数。

         getSource() 获取发生鼠标事件的事件源。

    2.使用MouseMotionListener接口可以处理以下两种操作触发的鼠标事件,  在事件源上拖动鼠标、在事件源上移动鼠标。

     事件源注册监视器的方法是

         addMouseMotionListener(MouseMotionListener listener)

     MouseMotionListener接口中有如下方法:

        mouseDragged(MouseEvent)  负责处理拖动鼠标触发的鼠标事件。

        mouseMoved(MouseEvent)  负责处理移动鼠标触发的鼠标事件

     

    焦点事件

    1.焦点事件源 :组件可以触发焦点事件。

     2.注册监视器:组件可以使用

        addFocusListener(FocusListener listener)

         注册焦点事件监视器。

     3FocusListener接口 :

            创建监视器的类必须要实现FocusListener接口,该接口有两个方法:

          public void focusGained(FocusEvent e)

          public void focusLost(FocusEvent e)

            当发生FocusEvent事件时,监视器调用类实现的接口中的相应方法。

     4.组件也可调用

           public boolean requestFocusInWindow()

        方法可以获得输入焦点。

     

    键盘事件

    当一个组件处于激活状态时,敲击键盘上一个键就导致这个组件触发键盘事件。

    1.某个组件使用addKeyListener方法注册监视器。

    2.接口KeyListener中有如下方法:

         public void keyPressed(KeyEvent e),

      public void keyTyped(KeyEvent e),

      public void KeyReleased(KeyEvent e)  

    3.相关方法:

       public int getKeyCode()判断哪个键被按下、敲击或释放,返回一个键码值 。     

       getKeyChar()判断哪个键被按下、敲击或释放,返回键上的字符。

     

    窗口事件

    1.WindowListener接口.

  7.   public void windowActivated(WindowEvent e)  当窗口从非激活状态到激活时,窗口的监视器调用该方法。
  8. 有模式的对话框:当这个对话框处于激活状态时,只让程序响应对话框内部的事件,而且将堵塞其它线程的执行,用户不能再激活对话框所在程序中的其它窗口,直到该对话框消

    (2) public void windowDeactivated(WindowEvent e)  当窗口激活状态到非激活状态时,窗口的监视器调用该方法。

    (3) public void windowClosing(WindowEvent e)  当窗口正在被关闭时,窗口的监视器调用该方法。

    (4) public void windowClosed(WindowEvent e)  当窗口关闭后,窗口的监视器调用该方法。

    (5) public void windowIconified(WindowEvent e)  当窗口图标化时,窗口的监视器调用该方法。

    (6) public void windowDeiconified(WindowEvent e)  当窗口撤消图标化时,窗口的监视器调用该方法。

    (7) public void windowOpened(WindowEvent e)  当窗口打开时,窗口的监视器调用该方法。

     

    WindowAdapter适配器

    适配器可以代替接口来处理事件

     

    匿名类实例或窗口做监视器

    匿名类的方便之处是匿名类的外嵌类的成员变量在匿名类中仍然有效,当发生事件时,监视器就比较容易操作事件源所在的外嵌类中的成员。

     

    事件总结

    1.授权模式

       Java的事件处理是基于授权模式,即事件源调用调用方法将某个对象注册为自己的监视器。

    2.接口回调

       addXXXListener(XXXListener listener)方法中的参数是一个接口,listener可以引用任何实现了该接口的类所创建的对象,当事件源发生事件时,接口listener立刻回调被类实现的接口中的某个方法。

    3.方法绑定

       当事件源触发事件发生后,监视器准确知道去调用哪个方法。

    4.保持松耦合

       当事件源触发事件发生后,系统知道某个方法会被执行,但无须关心到底是哪个对象去调用了这个方法,因为任何实现接口的类的实例(做为监视器)都可以调用这个方法来处理事件。

     

     

    使用MVC结构

    一、

    模型-视图-控制器(Model-View-Controller),简称为MVC

    模型(model)  用于存储数据的对象。

    视图(view)   为模型提供数据显示的对象。

    控制器(controller)处理用户的交互操作,对于用户的操作作出响应,让模型和视图进行必要的交互,即通过视图修改、获取模型中的数据;当模型中的数据变化时,让视图更新显示。

     

    二、MVC结构的使用

    详见课本P256-P257

     

    对话框

    JDialog类和JFrame都是Window的子类,二者的实例都是底层容器。

    JDialog类创建的对话框必须要依赖于某个窗口。

    对话框分为无模式和有模式两种。

    有模式的对话框:当这个对话框处于激活状态时,只让程序响应对话框内部的事件,而且将堵塞其它线程的执行,用户不能再激活对话框所在程序中的其它窗口,直到该对话框消失不可见。

    无模式对话框:当这个对话框处于激活状态时,能再激活其它窗口,也不堵塞其它线程的执行。

     

    一、消息对话框

    消息对话框是有模式对话框,进行一个重要的操作动作之前,最好能弹出一个消息对话框。可以用javax.swing包中的JOptionPane类的静态方法:

        public static void showMessageDialog(

                           Component parentComponent,

                           String message,

                           String title,

                           int messageType)

        创建一个消息对话框。

     

    二、输入对话框

    输入对话框含有供用户输入文本的文本框、一个确认和取消按钮,是有模式对话框 。

         可以用javax.swing包中的JOptionPane类的静态方法:

      public static

             String showInputDialog(Component parentComponent,

                                          Object message,

                                          String title,

                                          int messageType)

      创建一个输入对话框。

     

    三、确认对话框

    确认对话框是有模式对话框。

        可以用javax.swing包中的JOptionPane类的静态方法:

    public static int showConfirmDialog(Component parentComponent,

                                        Object message,

                                        String title,

                                        int optionType)

     得到一个确认对话框。

     

    四、颜色对话框

    可以用javax.swing包中的JColorChooser类的静态方法: public static Color showDialog(Component component,       

                                            String title,

                                            Color initialColor)

       创建一个有模式的颜色对话框  。

     

    五、自定义对话框

    1)对话框是一个容器,它的默认布局是BorderLayout,对话框可以添加组件,实现与用户的交互操作。

    2)构造对话框的2个常用构造方法

    JDialog() 构造一个无标题的初始不可见的对话框,对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。

    JDialog(JFrame owner) 构造一个无标题的初始不可见的无模式的对话框,owner是对话框所依赖的窗口,如果owner取null,对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。

     

    树组件与表格组件

    1.树组件

    DefaultMutableTreeNode节点

    DefaultMutableTreeNode类的两个常用的构造方法是:

    DefaultMutableTreeNode(Object userObject)

    DefaultMutableTreeNode(Object userObject,boolean allowChildren)

    树上的TreeSelectionEvent事件

    使用addTreeSelectionListener(TreeSelectionListener listener)

    方法获得一个监视器。

    2.表格组件

    JTable有7个构造方法,这里介绍常用的三个。

         JTable() 创建默认的表格模型。

         JTable(int a,int b) 创建a行,b列的默认模型表格

         JTable (Object data[][],Object  columnName[]) 创建默认表格模型对象,并且显示由data指定的二维数组的值,其列名由数组columnName指定。

     通过对表格中的数据进行编辑,可以修改表格中二维数组data中对应的数据数据。在表格中输入或修改数据后,需按回车或用鼠标单击表格的单元格确定所输入或修改的结果。当表格需要刷新显示时,让表格调用repaint方法。

     

    按钮绑定到键盘

    步骤:

    (1) 获取输入映射.   按钮首先调用

       public final InputMap getInputMap(int condition) 

       方法返回一个InputMap对象.

    (2)绑定按钮的键盘操作.   步骤(1)返回的输入映射首先调用方法

       public void put(KeyStroke keyStroke,Object actionMapKey)

      将敲击键盘上的某键指定为按钮的键盘操作.

    (3)为按钮的键盘操作指定监视器.    按钮调用方法

        public final ActionMap getActionMap()

        返回一个ActionMap对象:

        ActionMap actionmap = button.getActionMap();

        然后,该对象actionmap调用方法:

        public void put(Object key,Action action)

        为按钮的键盘操作指定监视器

     

    打印组件

    步骤:

    1.获取ToolKit对象

           让组件调用getToolkit()方法返回系统提供的Toolkit对象。

    2.获得PrintJob对象

           Toolkit对象调用getPrintJob()方法返回一个PrintJob对象。

    3.获取Graphics对象

           PrintJob对象使用getGraphics()方法获得一个Graphics对象。

    4.打印组件

          步骤3获取的Graphics对象是g,组件调用

           paintAll(g)

           将打印出该组件及其子组件。如果调用方法:

           pain(g)

           将打印出该组件本身,但不打印子组件

     

    发布GUI程序

    可以使用jar.exe把一些文件压缩成一个JAR文件,来发布我们的应用程序。

    步骤:

           1.首先用文本编辑器(比如Windows下的记事本)编写一个清单文件 ,扩展名为.mf,如Mymoon.mf 。

           2.生成JAR文件

    如果目录test下的字节码文件刚好是应用程序需要的全部字节码文件,也可以如下生成JAR文件:

     D:\test\jar cfm Tom.jar Mymoon.mf  *.class

    可以将Tom.jar文件复制到任何一个安装了java运行环境的计算机上,只要用鼠标双击该文件就可以运行该java应用程序了。

     

猜你喜欢

转载自blog.csdn.net/nika_jy_L/article/details/84784322
今日推荐