第十三章
-
Swing特点:轻量级组件、可插入外观组件。
Ps:轻量级组件:不依赖于本地平台,因Swing由java语言写的,不依赖于操作系统,在所有的平台都可展示统一的显示风格。重量级组件:依赖于本地平台,在不同平台运行风格会不同,比如AWT。 -
常用窗体:JFrame和JDialog。
JFrame窗体:它是一个容器,是各组件的载体。开发时通过继承java.swing.JFrame类创建一个窗体。
创建对象后,用getContainer()方法将窗体转换为容器,然后再添加组件或布局管理。
添加组件:container.add(new JButton(“按钮”));
删除组件:container.remove(new JButton(“按钮”));
可视化窗体:setVisible(true);
设置窗体大小:setSize(int x, int y);
JDialog窗体:对话框,从一个窗体中弹出另一个窗体,类似使用浏览器时弹出的确定对话框。继承自AWT组件中的java.awt.Dialog类。跟JFrame一样,在使用时也需要调用getContentPane()方法将窗体转换为容器。
JDialog类的构造方法很多,JFrame只分为无参有参,有参即有标题,但JDialog不止两种。
-
标签组件与图标:标签就是显示文本或要提示的信息。
标签:由JLabel类定义,父类是JConponent类。
其构造方法如下:
图标:放置在标签或按钮上。可以用java支持的图片类型进行创建,也可以使用java.awt.Graphics类提供的方法来创建。
创建(绘制)图标:通过Icon接口来创建图标。既然是接口,就必须要实现接口的全部方法。
使用图片图标:利用javax.swing.ImageIcon类根据现有的图片创建图标。ImageIcon类实现了Icon接口,同时支持多种图片格式。
Ps:Java.lang.Class类中的getResource()方法可以获取资源文件的URL路径。可将图片放在与代码所在类存放的同一文件夹下,这样可以简化路径代码,例如:URL url = MyImageIcon.class.getResource(“imageButton.jpg”); -
常用布局管理器:流布局管理器、边界布局管理器和网格布局管理器。
绝对布局:硬性指定组件在容器中的位置和大小,使用绝对坐标来指定组件的位置。
流布局管理器:最基本的布局管理器。从左到右摆放组件,直到占满这一行的空间再向下移动一行。默认情况下,组件在每一行都是居中的,可设置更改。
Alignment设置为0,左对齐;设置为2,右对齐;设置为1,居中。
horizGap和veertGap分别指以像素为单位的组件之间的水平间隔和垂直间隔。
边界布局管理器:在不指定窗体布局时,边界布局管理器是默认布局。还可以将容器划分为东、南、西、北、中5个区域。
网格布局管理器:将容器划分为网格,所以可以按行按列进行排列。每一个组件的大小都相同,网格中的空格的个数由网格的行数和列数决定。
-
常用面板:面板也是Swing容器,因为它继承自java.awt.Container。它可以容纳其他组件,但它也必须被添加到其他容器中。
JPanel面板:当窗体中有多个面板时,就可以在一个窗体内呈现多种布局模式,弥补了窗体只能设置一种布局模式的缺陷。可以放置多个组件。
例如:JPanel p1 = new JPanel(new GridLayout(1,3,10,10));设置1行3列的网格布局。
JScrollPane面板:当设置界面时,可能会遇到一个较小的容器窗体中显示一个较大部分的内容的情况,这时使用该面板。因为它是带滚动条的面板,也是容器,但它只能放置一个组件,并且不可以使用布局管理器。(如果要放置多个组件,可以把组件放在JPanel面板上,再把JPanel面板放在JScrollPane面板上)
例如:JTextArea ta = new JTextArea(20,50); JScrollPane sp = new JScrollPanel(ta); -
按钮组件:包括提交按钮、复选框、单选按钮等。都是从AbstractButton类继承而来。
提交按钮组件:由JButton对象表示。可以显示文本或图标。构造方法如下:
创建按钮的方式:
(1)初始化按钮时赋予按钮图标文字;
(2)先创建一个没有定义图标和文字的按钮对象,然后使用setIcon()方法为这个按钮定制一个图标,setToolText()方法为按钮设置一个提示文字,setBorderPainted()方法设置按钮边界是否提示。还有很多按钮方法可查询Java API。
单选按钮组件:是JRadioButton类的对象,显示一个圆形图标,并在旁边放置一些说明性文字。JRadioButton类是JToggleButton类的子类,JToggleButton类是AbstractButton类的子类。
(1) 单选按钮:使用JRadioButton类的构造方法创建单选按钮对象。构造方法如下:
Selected默认是否被选中。
(2) 按钮组:ButtonGroup类用于产生按钮组,如果要将所有的单选按钮放置在按钮组中,需要实例化一个JRadioButton对象,并使用该对象调用add()方法,添加单选按钮。
例如:JRadioButton jb1 = new JRadioButton(); JRadioButton jb2 = new JRadioButton(); ButtonGroup bg = new ButtonGroup(); bj.add(jb1); bj.add(jb2);
复选框组件:用JcheckBox类的对象表示,继承自AbstractButton类。具有一个方块图标,外加一段描述性文字,可进行多选设置。其构造方法如下:
-
列表组件:分为下拉列表和列表框。都是带有一系列项目的组件。
下拉列表框组件:用JComboBox类对象表示,它是javax.swing.JComponent类的子类。不仅供用户从中选择项目,还提供编辑项目中内容的功能。其构造方法如下:
操作下拉列表框的方法:
(1)ComboBoxModel类型:一般下拉列表框中的项目封装为它的情况较多,它是接口,代表一般模型,可以自定义一个类实现该接口,然后初始化JComboBox对象时向上转型为ComboBoxModel接口类型,,必须实现下面两种方法:
(2)自定义这个类还可以继承AbstractListModel类,该类中有两个操作下拉列表框的重要方法。
列表框:用JList类对象表示。列表框只是在窗体上占据固定的大小,如果需要列表框具有滚动效果,需要把列表框放入滚动面板中。其构造方法如下:
Ps::列表框中项目可多选,选中一个项目后,按住Shift键再选其他项目,即可两个都选中。者按住Ctrl键并单机某个项目,则该项目可以被切换成选择和非选择状态。 -
文本组件:包含文本框、密码框等组件。
文本框组件:JTextField用来显示或编辑一个单行文本,通过javax.swing.JTextField类对象创建,继承自javax.swing.text.JTextConponent类。其构造方法如下:
密码框组件:JPasswordField与文本框的定义和用法基本相同,包括构造方法也是非常相似的。不同的是密码框会对用户输入的字符串以某种符号加密。通过javax.swing.JPasswordField类创建。其构造方法同文本框。
文本域组件:JTextArea接受多行文字的输入。其构造方法如下:
JTextArea类中存在一个setLineWrap()方法,该方法可设置文本域是否可以自动换行,如果参数设置为true,则将自动换行,反之不自动换行。 -
常用事件监听器:监听一些动作的发生,包括动作事件监听器与焦点事件监听器等一系列事件监听器。
事件监听简介:事件模型由3个分离的对象完成对事件的处理,分别为事件源、事件和监听程序。事件源(如按钮)触发一个事件,被监听器接收并处理。事件监听器实质上就是实现特定类型监听器接口的类对象,该对象要实现相应的接口,由事件源调用相应方法加载这个类对象。所有事件都有addXXXListener()和removeXXXListener()方法,用于组件添加或删除事件监听器。
动作事件监听器:ActionEvent,很多动作都会使用它监听。
使用步骤:在类中通过组件对象调用相应的方法,使用内部类实现接口,将内部类对象作为参数传入方法。使用内部类的好处是,在一个类中有多个相同组件时,使用的事件监听器一样,但是不能在一个类中多次重写接口中的方法,这样就不能实现多态化,所有的组件产生动作的结果都一样这达不到我们想要的结果,所以一般使用匿名内部类解决这个问题。若要不使用内部类,在一个类中时只需把上述代码参数new jbAction()改写成this即可。
焦点事件监听器:FoucusEvent。作用是将光标焦点离开一个文本框时需要弹出一个对话框,或者将焦点返回给该文本框等。