1、本章学习目标:掌握JAVA容器类JFrame和JPanel的使用 掌握AWT和Swing常用布局的使用 了解JAVA事件处理机制 掌握常用可视化组件的使用第十三章第十三章 Swing UISwing UI设计设计第第1 1节节partWindowBuilder插件 WindowBuilder是一款基于Eclipse平台的插件,具备SWT/JFACE、Swing和GWT三大功能,可以对Java GUI进行双向设计。WindowBuilder是一款不可多得的Java体系中的“所见即所得”开发工具。WindowBuilder插件本节概述 WindowBuilder插件是基于Eclipse的,安装前需
2、要JDK开发环境和Eclipse开发工具。在Eclipse官方网站提供了WindowBuilder插件的下载即安装说明,地址如下:http:/www.eclipse.org/WindowBuilder/download.php 目前WindowBuilder插件支持Eclipse的Juno、Kepler、Luna和Mars版本,如图13.1所示,每个版本又分为发行版(Release Version)和整合版(Integration Version)。13.1.1WindowBuilder插件安装WindowBuilder插件安装 在Eclipse中安装WindowBuilder插件有以下两种方
3、式进行安装。(1)在线安装:在图13.1中,单击表格中的Release VersionUpdate Site4.4(Luna)所对应的link,进入在线安装界面,浏览器地址栏中的地址即为在线安装地址。(2)离线安装:点击Release VersionZipped Update Site4.4(Luna)所对应的link(MD5 Hash),下载WindowBuilder插件的离线安装包。WindowBuilder插件安装13.1.1 1.1.在线安装方式在线安装方式 通过在线方式安装Eclipse的WindowBuilder插件的步骤如下所示:【步骤一】代开Eclipse集成开发工具,在Hel
4、p菜单中选择Install New SoftCWare命令,如图13.2所示。进入安装界面,如图13.3所示。WindowBuilder插件安装13.1.1 【步骤二】单击Add按钮,打开站点添加界面,如图13.4所示,添加WindowBuilder插件的在线安装地址为:http:/download.eclipse.org/windowbuilder/WB/release/R201506241200-1/4.4/WindowBuilder插件安装13.1.1 【步骤三】单击OK按钮,返回安装主界面,如图13.5所示。选择Swing Designer、SWT Designer和WindowBui
5、lder Engine选项后,单击Next按钮,进入安装细节界面,如图13.6所示。WindowBuilder插件安装13.1.1 【步骤四】单击Next按钮,进入协议许可界面,如图13.7所示。单击Finish按钮,进入WindowBuilder插件安装界面,如图13.8所示。安装完成后,重新启动Eclipse开发工具即可。WindowBuilder插件安装13.1.1 2.2.离线安装方式离线安装方式 下载WindowBuilder插件的离线安装包后,可以通过离线方式进行安装,具体步骤与在线安装相同,只是在步骤一单击Add按钮后,进入本地资源界面,与步骤二界面相同。其中Local按钮用于选
6、取本地文件夹,Archive按钮用于选取本地jar或zip类型的压缩文件。输入本地资源名称,选取下载本地的离线包后,单击OK按钮返回安装主界面。WindowBuilder插件安装13.1.1 在Eclipse中的Java项目中,单击FileNewOther菜单命令,通过向导方式创建一个JFrame窗体,如图13.9所示。选择JFrame选项,单击Next按钮进入常见JFrame对话框。13.1.2WindowBuilder插件的使用过程WindowBuilder插件的使用过程 在创建JFrame对话框中,输入类名LoginFrame,单击Finish按钮即完成JFrame窗体的创建,如图13.
7、10所示。WindowBuilder插件的使用过程13.1.2 在代码编辑窗口,如图13.11所示,单击左下角的Source和Design选项卡(或按F12快捷键)可以在源代码和设计界面之间进行切换。WindowBuilder插件的使用过程13.1.2 源代码窗口可以直接编写Java代码;而界面设计窗口可以通过拖拽控件实现窗体的设计;界面设计窗口主要有结构窗口、属性窗口、工具窗口、控件窗口和设计窗口五部分组成,如图13.12所示。WindowBuilder插件的使用过程13.1.2 在结构窗口中,可以将当前JFrame窗体中的控件以树状结构显示出来;当选取某一控件时,设计窗口中相应的元素处于被
8、选中状态。控件窗口中包含System、Containers、Layouts、Strust&Sping、Components、Swing Actions、Menu、AWT Components和JGoodies等组件,通过拖拽的方式可以快速添加到设计窗口中。当在设计窗口中选取某一控件时,属性窗口相应地发生改变,通过可视化界面可以快速设置该控件的相关属性。在属性窗口中,单击事件切换按钮 可以在属性列表和事件列表之间进行切换。在设计界面中先选中某一控件,再在属性窗口的事件列表中找到所需的事件,通过双击的方式可以为该控件添加相应的事件处理。WindowBuilder插件的使用过程13.1.2第第2 2
9、节节partGUI概述 用户喜欢功能丰富、操作简单且直观的应用程序。为了提高用户体验度,使系统的交互性和操作性更好,大多数应用程序都采用图形用户界面(Graphical User Interface,GUI))的形式。Java中提供了AWT(Abstract Window Toolkit,抽象窗口工具包)和Swing来实现GUI图形用户界面编程。G U I 概 述本节概述13.2.1AWT和Swing 在JDK 1.0发布时,Sun公司提供了一套基本的GUI类库,这套基本类库被称为AWT。AWT为Java程序提供了基本的图形组件,实现一些基本的功能,并希望在所有平台上都能运行。使用AWT提供的
10、组件所构建的GUI应用程序具有以下几个问题:(1)使用AWT做出的图形用户界面在所有的平台上都显得很丑陋,功能也非常有限;(2)运行在不同的平台上,呈现不同的外观效果,为保证界面的一致性和可预见性,程序员需要在不同平台上进行测试;(3)AWT为了迎合所有主流操作系统的界面设计,AWT组件只能使用这些操作系统上图形界面组件的交集,所以不能使用特定操作系统上复杂的图形界面组件,最多只能使用四种字体;(4)编程模式非常笨拙,并且是非面向对象的编程模式。AWT和SwingAWT和Swing 在1996年,Netscape公司开发了一套工作方式完全不同的GUI库,被称为IFC(Internet Foun
11、dation Class)。IFC除了窗口本身需要借助操作系统的窗口来实现,其他组件都是绘制在空白窗口中。IFC能够真正地实现各平台界面的一致性,Sun公司与Netscape公司合作完善了这种方案,并创建了一套新的用户界面库,并命名为Swing。Swing组件完全采用Java语言编程,不再需要使用那些平台所用的复杂的GUI功能,因此,使用Swing构建的GUI应用程序在不同平台上运行时,所显示的外观效果完全相同。AWT、Swing、2D API、辅助功能API以及拖放API共同组成了JFC(Java Foundation Class,Java基础类库),其中Swing全面替代了Java 1.0
12、中的AWT组件,但保留了Java 1.1中的AWT事件模型。总体上,Swing替代了绝大部分AWT组件,但并没有完全替代AWT,而是在AWT的基础之上,进行了有力的补充和加强。13.2.1AWT和Swing 使用Swing组件进行GUI编程的优势有以下几点:(1)Swing用户界面组件丰富,使用便捷;(2)Swing组件对底层平台的依赖少,与平台相关的Bug也很少;(3)能够保证不同平台上用户一致的感观效果;(4)Swing组件采用MVC(Model-View-Controller,即模型-视图-控制器)设计模式,其中模型用于维护组件的各种状态,视图是组件的可视化表现。控制器用于控制对于各种事
13、件,组件做出怎样的响应。13.2.1Swing组件层次 大部分Swing组件都是JComponent抽象类的直接或间接子类,在JComponent抽象类中定义了所有子类组件的通用方法。JComponent类位于javax.swing包中,javax包是一个Java扩展包。要有效地使用GUI组件,必须理解javax.swing和java.awt包中组件之间的继承层次,尤其是理解Component类、Container类和JComponent类,其中声明了大多数Swing组件的通用特性。Swing中的JComponent类是AWT中java.awt.Container类的子类,也是Swing和AW
14、T的联系之一。JComponent类的继承层次如图13.13所示:JComponent类是Container的子类;Container类是Component类的子类;而Component类又是Object类的子类。Swing组件层次13.2.1Swing组件层次 绝大部分的Swing组件位于javax.swing包中,且继承Container类。Swing组件按功能进行划分,可以分为以下几类:顶层容器:JFrame、JApplet、JDialog和JWindow。中间容器:JPanel、JScrollPane、JSplitPane和JToolBar等。特殊容器:在用户界面上具有特殊作用的中间容
15、器,如JInternalFrame、JRootPane、JLayeredPane 和JDestopPane等。基本组件:实现人机交互的组件,如JButton、JComboBox、JList、JMenu和JSlider等。特殊对话框组件:直接产生特殊对话框的组件,如JColorChooser和JFileChooser等。不可编辑信息的显示组件:向用户显示不可编辑信息的组件,如JLable、JProgressBar和JToolTip等。可编辑信息的显示组件:向用户显示能被编辑的格式化信息的组件,如JTextField、JTextArea和JTable等。13.2.1第第3 3节节part容器与布局
16、 容器用来存放其他组件,而容器本身也是一个组件,属于Component的子类。布局管理器用来管理组件在容器中的布局格式,当容器中容纳多个组件时,可以使用布局管理器对这些组件进行排列和分布。容器与布局本节概述13.3.1JFrame顶级容器 JFrame(窗口框架)是可以独立存在的顶级窗口容器,能够包含其他子容器,但不能被其他容器所包含。JFrame类常用的构造方法有以下两种:JFrame():不带参数的构造方法,该方法用于创建一个初始不可见的新窗体。JFrame(String title):带一个字符串参数的构造方法,该方法用于创建一个初始不可见的新窗体,且窗口的标题有字符串参数指定。JFra
17、me类常用的方法及功能如表13-1所示。Jframe顶级容器JPanel中间容器 JPanel(面板)是一种中间容器,中间容器与顶级容器不同,不能独立存在,必须放在其他容器中。JPanel中间容器的意义在于为其他组件提供空间。在使用JPanel时,通常先将其他组件添加到JPanel中间容器中,再将JPanel中间容器添加到JFrame顶级容器中。JPanel类常用的构造方法有以下两种:JPanel():不带参数的构造方法,该方法用于创建一个默认为流布局(FlowLayout)的面板。JPanel(LayoutManager layout):带参数的构造方法,参数是一个布局管理器,用于创建一个指
18、定布局的面板。JPanel类的常用方法即功能如表13-2所示。Jpanel中间容器13.3.213.3.3BorderLayout边界布局 BorderLayout边界布局允许将组件有选择地放置到容器的东部、南部、西部、北部、中部这五个区域,如图13.14所示。BorderLayout边界布局 BorderLayout类的构造方法如下:BorderLayout():不带参数的构造方法,用于创建一个无间距的边界布局管理器对象。BorderLayout(int hgap,int vgap):带参数的构造方法,用于创建一个指定水平、垂直间距的边界布局管理器。BorderLayout类提供了五个静态常
19、量,用于指定边界布局管理中的五个区域:BorderLayout.EASTBorderLayout.EAST指定东部指定东部位置;位置;BorderLayout.WEST指定西部位置;BorderLayout.SOUTH指定南部位置;BorderLayout.NORTH指定北部位置;BorderLayout.CENTER指定中部位置,该位置属于默认位置。BorderLayout边界布局 一个容器使用BorderLayout边界布局后,向容器中添加组件时,需要使用带两个参数的add()方法,将指定组件添加到此容器的给定位置上。基本语法如下:public Component add(Componen
20、t comp,int index);例如:p.add(new JButton(“西部”),BorderLayout.WEST);当使用BorderLayout布局时,需要注意以下两点:当向使用BorderLayout布局的容器中添加组件时,需要指定组件所放置的区域位置,如果没有指定则默认放置到布局的中央位置。通常一个区域位置只能添加一个组件,如果同一个区域中添加多个组件,则后放入的组件将会覆盖先放入的组件。BorderLayout边界布局是窗体(JFrame)的默认布局。当容器采用边界布局时,改变窗体的大小,可以发现东西南北四个位置上的组件长度进行拉伸,而中间位置的组件进行扩展。13.3.31
21、3.3.4FlowLayout流布局 FlowLayout流布局是将容器中的组件按照从中间到两边的顺序,流动地排列和分布,直到上方的空间被占满,才移到下一行,继续从中间到两边流动排列。FlowLayout类的构造方法有如下三个:FlowLayout():不带参数的构造方法,使用默认对齐方式(中间对齐)和默认间距(水平、垂直间距都为5像素)创建一个新的流布局管理器。FlowLayout(int align):带有对齐方式参数的构造方法,用于创建一个指定对齐,默认间距为5像素的流布局管理器。FlowLayout(int align,int hgap,int vgap):带有对齐方式、水平间距、垂直
22、间距参数的构造方法,用于创建一个指定对齐方式、水平间距、垂直间距的流布局管理器。FlowLayout类提供了三个静态常量,用于指明布局的对齐方式,这三个常量分别是:FlowLayout.CENTER为居中对齐,也是默认对齐方式;FlowLayout.LEFT为左对齐方式;FlowLayout.RIGHT为右对齐方式。FlowLayout流布局13.3.5GridLayout网格布局 GridLayout网格布局就像表格一样,将容器按照行和列分割成单元格,每个单元格所占的区域大小都一样。当向GridLayout布局的容器中添加组件时,默认是按照从左到右、从上到下的顺序,依次将组件添加到每个网格中
23、。与FlowLayout不同,放置在GridLayout布局中的各组件的大小由所处区域来决定,即每个组件将自动占满整个区域。GridLayout类提供了两个构造方法如下:GridLayout(int rows,int cols):用于创建一个指定行数和列数的网格布局管理器。GridLayout(int rows,int cols,int hgap,int vgap):用于创建一个指定行数、列数、水平间距和垂直间距的网格布局管理器。GridLayout网格布局13.3.6CardLayout卡片布局 CardLayout卡片布局将加入到容器中的组件看成一叠卡片,每次只能看见最上面的组件。因此,C
24、ardLayout卡片布局是以时间而非空间来管理容器中的组件。CardLayout类提供了两个构造方法如下:CardLayout():不带参数的构造方法,用于创建一个默认间距为0的新卡片布局管理器。CardLayout(int hgap,int vgap):带参数的构造方法,用于创建一个指定水平和垂直间距的卡片布局管理器。CardLayout类中用于控制组件可见 5个常用方法如表13-3所示。CardLayout卡片布局 一个容器使用CardLayout卡片布局后,当向容器中添加组件时,需要使用带两个参数的add()方法,给组件指定一个名称并将其添加到容器中。13.3.7NULL空布局 在实际
25、开发过程中,用户界面比较复杂,而且要求美观,单一使用一种布局管理器很难满足要求。此时,可以采用NULL空布局。空布局是指容器不采用任何布局,而是通过每个组件的绝对定位进行布局。使用空布局的步骤如下:(1)将容器中的布局管理器设置为null(空),即容器中不采用任何布局。例如:/设置面板对象的布局为空 p.setLayout(null);(2)调用setBounds()设置组件的绝对位置坐标及大小,或使用setLocation()方法和setSize()方法分别设置组件的坐标和大小。例如:/设置按钮x轴坐标为30,y轴坐标为60,宽度40,高度25(像素)btn.setBounds(30,60,
26、40,25);(3)将组件添加到容器中。例如:/将按钮添加到面板中 p.add(b);NULL空布局NULL空布局【代码13.1】NullLayoutExample.javapackage layout;import java.awt.EventQueue;import javax.swing.*;import javax.swing.border.EmptyBorder;public class NullLayoutExample extends JFrame/创建面板对象private JPanel contentPane;public static void main(String ar
27、gs)EventQueue.invokeLater(new Runnable()public void run()try NullLayoutExample frame=new NullLayoutExample();frame.setVisible(true);/设置窗口可见性 catch(Exception e)e.printStackTrace(););13.3.7NULL空布局public NullLayoutExample()/设定窗口默认关闭方式为退出应用程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置窗口坐标和大小setBo
28、unds(100,100,450,300);contentPane=new JPanel();/设置面板边界contentPane.setBorder(new EmptyBorder(5,5,5,5);setContentPane(contentPane);/设置面板布局contentPane.setLayout(null);JButton btn_OK=new JButton(确认);/这种按钮的绝对位置btn_OK.setBounds(68,119,93,23);/添加按钮到面板中contentPane.add(btn_OK);JButton btn_Cancel=new JButton(
29、取消);btn_Cancel.setBounds(214,119,93,23);contentPane.add(btn_Cancel);13.3.7NULL空布局 程序运行结果如图13.15所示。NULL空布局一般用于组件之间位置相对固定,并且窗口不允许随便变换大小的情况,否则当窗口大小发生变化,因所有组件都使用绝对位置定位,而产生组件整体“偏移”的情况。第第4 4节节part基本组件 GUI图形界面时由一些基本的组件在布局管理器的统一控制下组合而成的,常用的基本组件包括图标、按钮、标签、文本组件、列表框、单选按钮、复选框和组合框等。基 本 组 件本节概述13.4.1Icon图标 Icon是一
30、个图标接口,用于加载图片。ImageIcon类是Icon接口的一个实现类,用于加载指定的图片文件,通常价值的图片文件为gif、jpg、png等格式。ImageIcon类常用的构造方法如下:ImageIcon():创建一个未初始化的图标对象。ImageIcon(Image image):根据图像创建图标对象。ImageIcon(String filename):根据指定的图片文件创建图标对象。ImageIcon类常用的方法如表13-4所示。Icon图标Icon图标 在Eclipse项目中,当使用到图片文件时,通常先将图片文件复制到自定义的一个文件目录中,如图13.16所示,将图片复制到image
31、s目录下。下述案例示例了ImageIcon类的使用,代码如下所示。13.4.1Icon图标【代码13.2】IconExample.java.public void paint(Graphics g)/创建ImageIcon图标ImageIcon xscIcon=new ImageIcon(“imagesxsc.PNG”);/在窗体中画图标g.drawImage(xscIcon.getImage(),20,40,this);/显示图标的宽度和高度g.drawString(“图标宽:”+xscIcon.getIconWidth()+“px,高:”+xscIcon.getIconHeight()+“
32、px”,20,320);上述程序中对JFrame窗口的paint()方法进行重写,实现在窗口中绘制图片和字符串。图片文件名中包含路径,其中“”是转义字符,代表“”。程序运行结果如图13.17所示。13.4.113.4.2JButton按钮 JButton类提供一个可接受单击操作的按钮功能,单击按钮会使其处于“下压”形状,松开后按钮又会恢复原状。在按钮中可以显示字符串、图标或两者同时显示。JButton类的构造方法如下:JButton(String str):用于创建一个指定文本的按钮对象。JButton(Icon icon):用于创建一个指定图标的按钮对象。JButton(String str
33、,Icon icon):该构造方法带有字符串和图标两个参数,用于创建一个指定文本和图标的按钮对象。JButton类常用的方法如表13-5所示。JButton按钮13.4.3Jlabel标签 JLabel标签具有标识和提示的作用,可以显示文字或图标。标签没有边界,也不会响应用户操作,即单击标签是没有反应的。在GUI编程中,标签通常放在文本框、文本框、组合框等不带标签的组件前,对用户进行提示。JLabel类的构造方法如下:JLabel(String text):用于创建一个指定文本的标签对象。JLabel(Icon icon):用于创建一个指定图标的标签对象。JLabel(String text,
34、Icon icon,int horizontalAlignment):用于创建一个指定文本、图标和对齐方式的标签对象。JLabel类的常用方法如表13-6所示。Jlabel标签13.4.4文本组件文本组件可以接收用户输入的文本内容。Swing常用的文本组件有以下三种:JTextField:文本框,该组件只能接收单行的文本输入。JTextArea:文本域,该组件可以接收多行的文本输入。JPasswordField:密码框,不显示原始字符,用于接收用户输入的密码。JTextField类常用的构造方法及其常用方法如表13-7所示。文本组件文本组件 JTextArea文本域组件可以编辑多行多列文本,且
35、具有换行能力。JTextArea类常用的构造方法及其常用方法如表13-8所示。13.4.4文本组件 JPasswordField是JTextField类的子类,允许编辑单行文本,密码框用于接收用户输入的密码,但不显示原始字符,而是以特殊符号(掩码)形式显示。JPasswordField类常用的构造方法及其常用方法如表13-9所示。13.4.413.4.5JComboBox组合框 JComboBox组合框是一个文本框和下拉列表的组合,用户可以从下拉列表选项中选择一个选项。JComboBox类常用的构造方法如下:JComboBox():不带参数的构造方法,用于创建一个没有选项的组合框。JCombo
36、Box(Object listData):构造方法的参数是对象数组,用于创建一个选项列表为对象数组中的元素的组合框。JComboBox(Vector listData):构造方法的参数是泛型向量,用于创建一个选项列表为向量集合中的元素的组合框。JComboxBox组合框JComboBox组合框JComboBox类常用的构造方法及其常用方法如表13-10所示。13.4.513.4.6JList列表框 JList列表框中的选项以列表的形式都显示出来,用户在列表框中可以选择一个或多个选项(按住Ctrl键才能实现多选)。JList类常用的构造方法如下:JList():不带参数的构造方法,用于创建一个没
37、有选项的列表框。JList(Object listData):参数是对象数组的构造方法,用于创建一个选项列表为对象数组中的元素的列表框。JList(Vector listData):参数是泛型向量的构造方法,用于创建一个选项列表为向量集合中的元素的列表框。Jlist列表框JList列表框 JList类常用的常用方法如表13-11所示。13.4.613.4.7JRadioButton单选按钮 JRadioButton单选按钮可被选择或被取消选择。JRadioButton类常用的构造方法如下:JRadioButton(String str):用于创建一个具有指定文本的单选按钮。JRadioButt
38、on(String str,boolean state):创建一个具有指定文本和选择状态的单选按钮,当选择状态为true时,表示单选按钮被选中,状态未false时表示未被选中。JRadioButton类常用的常用方法如表13-12所示。JRadioButton单选按钮JRadioButton单选按钮 单选按钮一般成组出现,且需与ButtonGroup按钮组配合使用后,才能实现单选规则,即一次只能选择按钮组中的一个按钮。因此,使用单选按钮要经过以下两个步骤:(1)先实例化所有的JRadioButton单选按钮对象;(2)创建一个ButtonGroup按钮组对象,并用其add()方法将所有的单选按
39、钮对象添加到该组中,实现单选规则。例如:/创建单选按钮 JRadioButton rbMale=new JRadioButton(男,true);JRadioButton rbFemale=new JRadioButton(女);/创建按钮组 ButtonGroup bg=new ButtonGroup();/将rb1和rb2两个单选按钮添加到按钮组中,这两个单选按钮只能选中其一 bg.add(rbMale);bg.add(rbFemale);13.4.713.4.8JCheckBox复选框 JCheckBox复选框可以控制选项的开启或关闭,在复选框上单击时,而言改变复选框的状态,复选框可以被
40、单独使用或作为一组使用。JCheckBox类常用的构造方法如下:JCheckBox(String str):创建一个带文本的、最初未被选定的复选框。JCheckBox(String str,boolean state):创建一个带文本的复选框,并指定其最初是否处于选定状态。JCheckBox类常用的方法如表13-13所示。JCheckBox复选框13.4.9用户注册界面 JCheckBox复选框可以控制选项的开启或关闭,在复选框上单击时,而言改变复选框的状态,复选框可以被单独使用或作为一组使用。JCheckBox类常用的构造方法如下:JCheckBox(String str):创建一个带文本的
41、、最初未被选定的复选框。JCheckBox(String str,boolean state):创建一个带文本的复选框,并指定其最初是否处于选定状态。JCheckBox类常用的方法如表13-13所示。用户注册界面用户注册界面下述案例实现了用户注册界面的设计和信息的获取,代码如下所示。【代码13.3】RegisterFrame.javapackage com;import java.awt.EventQueue;import javax.swing.*;import javax.swing.ButtonGroup;import javax.swing.border.EmptyBorder;imp
42、ort java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.Color;import java.awt.Font;public class RegisterFrame extends JFrame private JPanel contentPane;private JTextField nameText;private JPasswordField passTest;private JPasswordField rePassText;private JTextField idText;
43、13.4.9用户注册界面public static void main(String args)EventQueue.invokeLater(new Runnable()public void run()try RegisterFrame frame=new RegisterFrame();frame.setVisible(true);catch(Exception e)e.printStackTrace(););13.4.9用户注册界面public RegisterFrame()setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(
44、100,100,510,475);contentPane=new JPanel();contentPane.setBorder(new EmptyBorder(5,5,5,5);setContentPane(contentPane);contentPane.setLayout(null);JLabel label_8=new JLabel(用户注册界面设计);label_8.setHorizontalAlignment(SwingConstants.CENTER);label_8.setForeground(Color.RED);label_8.setFont(new Font(宋体,Font
45、.PLAIN,18);label_8.setBounds(146,10,177,23);contentPane.add(label_8);JLabel namelabel=new JLabel(用户名:);namelabel.setBounds(40,57,54,15);contentPane.add(namelabel);13.4.9用户注册界面nameText=new JTextField();nameText.setBounds(100,54,100,21);contentPane.add(nameText);nameText.setColumns(10);JLabel idlabel=
46、new JLabel(学号:);idlabel.setBounds(242,57,54,15);contentPane.add(idlabel);idText=new JTextField();idText.setBounds(311,54,114,21);contentPane.add(idText);idText.setColumns(10);JLabel label_6=new JLabel(密码:);label_6.setBounds(40,96,54,15);contentPane.add(label_6);13.4.9用户注册界面passTest=new JPasswordFiel
47、d();passTest.setBounds(100,93,100,21);contentPane.add(passTest);JLabel label_7=new JLabel(确认密码:);label_7.setBounds(230,99,64,15);contentPane.add(label_7);rePassText=new JPasswordField();rePassText.setBounds(311,93,114,21);contentPane.add(rePassText);JLabel sexlabel=new JLabel(性别:);sexlabel.setBounds
48、(40,124,54,15);contentPane.add(sexlabel);final JRadioButton manbtn=new JRadioButton(男);manbtn.setBounds(140,120,45,23);contentPane.add(manbtn);13.4.9用户注册界面JRadioButton womanbtn=new JRadioButton(女);womanbtn.setSelected(true);womanbtn.setBounds(230,124,60,23);contentPane.add(womanbtn);ButtonGroup bg=n
49、ew ButtonGroup();bg.add(womanbtn);bg.add(manbtn);JLabel label_3=new JLabel(爱好:);label_3.setBounds(40,164,54,15);contentPane.add(label_3);final JCheckBox checkBox=new JCheckBox(篮球);checkBox.setBounds(140,160,60,23);contentPane.add(checkBox);final JCheckBox checkBox_1=new JCheckBox(足球);checkBox_1.setS
50、elected(true);checkBox_1.setBounds(202,160,60,23);contentPane.add(checkBox_1);13.4.9用户注册界面final JCheckBox netcheckBox=new JCheckBox(上网);netcheckBox.setBounds(276,160,60,23);contentPane.add(netcheckBox);final JCheckBox lvcheckBox=new JCheckBox(旅游);lvcheckBox.setBounds(342,160,60,23);contentPane.add(l