版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章任务6——创建登录界面中的容器与组件6.1任务描述6.2技术要点6.3任务实施
6.1任务描述
本章所要完成的任务是创建用户登录界面中的容器与组件。用户登录界面设计为图形用户界面(GraphicsUserInterface,GUI),作为整个考试系统的入口,它需要用户进行必要的身份验证,因此包含了最基本的要素——提供用户名和密码输入的编辑区域,引导用户进入相应功能模块的【登录】、【注册】、【取消】按钮,如图6-1所示。本章我们将详细介绍如何构建一个用户登录界面,以及创建界面上的相关组件的方法。图6-1用户登录界面 6.2技术要点
6.2.1AWT和Swing
Java的抽象窗口工具包(AbstractWindowToolkit,AWT)提供了支持GUI设计的类和接口,AWT由java.awt包提供。
AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系。也就是说,当我们利用AWT来构建图形用户界面的时候,实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在,因此为了实现Java语言“一次编译,到处运行”的特性,AWT不得不通过牺牲功能来实现其平台无关性,也即AWT只拥有所有平台上都存在的组件的公有集合。例如,在Motif平台上,按钮是不支持图片显示的,因此AWT按钮不能插入图片。由于AWT是依靠本地方法来实现其功能的,因此通常把AWT控件称为重量级组件。由于AWT不能满足图形化用户界面发展的需要,Java2(JDK1.2)推出后,增加了一个新的Swing包,由javax.swing提供。Swing是在AWT的基础上构建的一套新的图形界面系统。它提供了比AWT更强大和更灵活的组件,并且所有组件都完全用Java书写,因此具有良好的跨平台性。由于在Swing中没有使用本地方法来实现图形功能,因此通常把Swing组件称为轻量级组件。在实际应用中,由于AWT是基于本地方法的C/C++程序,其运行速度比较快,对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,AWT成为了嵌入式Java的第一选择。Swing是基于AWT的Java程序,其运行速度比较慢,也就是通过牺牲速度来实现应用程序的功能。一般在标准版的Java中,我们为了强化应用程序的功能而提倡使用Swing。
1.Swing框架
对Swing最普遍的错误概念是认为其设计目的是用来替代AWT的。事实上,Swing是建立在AWT之上的。Swing能利用AWT的下层组件,包括图形、颜色、字体、工具包和布局管理器。在javax.swing包中,定义了两种类型的组件:顶层容器(JFrame、JApplet、JDialog和JWindow)和轻量级组件。Swing组件都是Container类的直接子类或间接子类。
Swing提供了许多新的图形界面组件。Swing组件以“J”开头,除了有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)等。
Swing的基本框架如图6-2所示。图6-2Swing的基本框架本书主要以Swing中的组件进行图形界面设计,涉及到的字体、颜色、布局等则是利用AWT工具包的相关类,详细内容我们将在后续章节进行介绍。
2.建立GUI的步骤
Java中的图形界面的程序设计包括以下几个步骤:
(1)创建组件:组件的建立通常在应用程序的构造函数或main()方法内完成。
(2)将组件加入容器:所有的组件必须加入到容器中才可以被显示出来,而容器可以加入另一个容器中。
(3)配置容器内组件的位置:让组件固定在特定位置,或利用布局管理来管理组件在容器内的位置,让GUI的显示更具灵活性。
(4)处理由组件所产生的事件:处理事件使得组件具有一定功能。例如,在按下按钮后,有方法来完成一系列的功能。6.2.2容器
Java图形用户界面中最基本的组成元素就是组件,组件的作用就是描述以图形化的方式显示在屏幕上并能与用户进行交互的GUI元素,例如按钮、文本框等。一般的组件是不能独立地显示出来的,必须依赖于容器才能显示。容器是一种比较特殊的组件,它可以包含其他的组件,也可以包含容器,称为容器的嵌套。Swing中的容器包括顶层容器和中间容器。顶层容器是可以独立存在的容器,可以把它看成一个窗口。顶层容器是进行图形编程的基础,其他的Swing组件必须依附在顶层容器中才能显示出来。在Swing中,顶层容器有三种,分别是JFrame(框架窗口)、JDialog(对话框)和JApplet(用于设计嵌入在网页中的Java小程序)。
中间容器不能独立存在,与顶层容器结合使用可以构建较复杂的界面布局。这些中间容器主要包括:
■ JPanel:最灵活、最常用的中间容器。
■ JScrollPane:与JPanel类似,但还可在大的组件或可扩展组件周围提供滚动条。■ JTabbedPane:包含多个组件,但一次只显示一个组件,用户可以在组件之间方便地切换。
■ JToolBar:按行或列排列一组组件(通常是按钮)。
本章我们重点讲解JFrame和JPanel的使用。
1.顶层容器(JFrame类)
JFrame类一般用于创建应用程序的主窗口,所创建的窗口默认大小是0,须使用setSize设置窗口的大小;JFrame窗口默认是不可见的,须使用setVisible(true)才能使其可见。JFrame类通过继承父类提供了一些常用的方法来控制和修饰窗口,如表6-1所示。表6-1JFrame类的常用构造函数及方法利用JFrame类创建一个窗口的方法有两种,即直接定义JFrame类的对象来创建一个窗口,或者通过继承JFrame类来创建一个窗口。通常我们利用第二种方法,因为通过继承可以创建自己的变量或方法,更具灵活性。
方法一:直接定义JFrame类的对象创建一个窗口。
例6-1JFrameDemo1.java
1importjavax.swing.*;
2publicclassJFrameDemo1{
3publicstaticvoidmain(Stringargs[]){
4 JFramef=newJFrame("一个简单窗口");
5 f.setLocation(300,300); 6
f.setSize(300,200);
7
f.setResizable(false);
8
f.setVisible(true);
9
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
10}
11}
方法二:通过继承JFrame类创建一个窗口。例6-2JFrameDemo2.java
1importjavax.swing.*;
2classMyFrameextendsJFrame{
3MyFrame(Stringtitle){
4super(title);
5setLocation(300,300);
6setSize(300,200);
7setResizable(false);
8setVisible(true);
9setDefaultCloseOperation(EXIT_ON_CLOSE);
10} 11}
12publicclassJFrameDemo2{
13publicstaticvoidmain(Stringargs[]){
14 newMyFrame("一个简单窗口");
15}
16}
运行JFrameDemo1.java和JFrameDemo2.java程序的结果是一致的,屏幕上将会显示出一个300×200,位于显示器左上角(300,300)的空白窗口。该窗口除了标题之外什么都没有,因为还没有在窗口中添加任何组件,显示效果如图6-3所示。图6-3Swing窗口
2.中间容器(JPanel类)
JPanel类在Java中又称为面板,属于中间容器,本身也属于一个轻量级容器组件。由于JPanel类透明且没有边框,因此不能作为顶层容器,不能独立显示。它的作用就在于放置Swing轻量级组件,然后作为整体安置在顶层容器中。使用JPanel类结合布局管理器,通过容器的嵌套使用,可以实现对窗口的复杂布局。正是因为这些优点,使得JPanel类成为最常用的容器之一。JPanel类的常用构造函数和方法如表6-2所示。表6-2JPanel类的常用构造函数及方法如图6-4所示,在窗口中定义三种颜色的区域,其中定义两个中间容器pan1和pan2,分别将pan2(黄色)放置于pan1(红色)中,pan1放在顶层容器fr(绿色)中。图6-4JPanel示例例6-3TwoPanel.java
1importjava.awt.*;
2importjavax.swing.*;
3classTwoPanelextendsJFrame{
4publicTwoPanel(Stringtitle){
5super(title);
6}
7publicstaticvoidmain(Stringargs[]){
8TwoPanelfr=newTwoPanel("TwoPanel测试");
9JPanelpan1=newJPanel();
10JPanelpan2=newJPanel(); 11fr.setLayout(null);
12fr.getContentPane().setBackground(Color.green);
13fr.setSize(250,250);
14pan1.setLayout(null);
15pan1.setBackground(Color.red);
16pan1.setSize(150,150);
17pan2.setBackground(Color.yellow);
18pan2.setSize(50,50);
19pan1.add(pan2);
20fr.getContentPane().add(pan1);
21fr.setVisible(true);
22}
23}
从上例中可以看到,JFrame属于顶层容器,可以用来放置Swing组件,但是不能将组件(按钮、标签等)直接放置在JFame定义的窗口中,而是必须先获得与JFrame关联的内容面板(ContentPane),然后将组件添加到该内容面板中。
pan1作为组件添加至窗口fr中,采用的语句是:
fr.getContentPane().add(pan1);
不能直接写成fr.add(pan1)。若要将组件放置于JPanel中,不需要使用getContentPane(),而是让JPanel对象直接使用add方法即可,例如,pan1.add(pan2)。
3.对话框(JOptionPane)
利用JDialog类可以创建对话框,但是必须创建对话框中的每一个组件,但大多对话框只需显示提示的文本,或者进行简单的选择,这时候可以利用JOptionPane类。通过创建JOptionPane对象所得到的对话框是模式对话框,也即必须先关闭对话框窗口才能回到产生对话框的父窗口上。然而通常并不是通过新建一个JOptionPane对象创建对话框,而是直接使用JOptionPane所提供的一些静态方法。可以创建四种类型的标准对话框:消息对话框、输入对话框、确认对话框和选项对话框。这些静态方法都是以showXXXDialog的形式出现的,例如,showMessageDialog()显示消息对话框;showConfirmDialog()显示确认对话框;showInputDialog()显示输入对话框;showOptionDialog()显示选项的对话框。
表6-3列出了对话框的类型;表6-4列出了JOptionPane的常用静态方法。表6-3对话框类型表6-4JOptionPane常用静态方法对于表6-4中的部分参数说明如下:
① parentComponent:指示对话框的父窗口对象,一般为当前窗口。也可以为null,即采用缺省的Frame作为父窗口,此时对话框将设置在屏幕的正中央。
② message:定义对话框内显示的描述性文字。
③ title:对话框的标题。
④ Component:在对话框内要显示的组件(如按钮)。
⑤ Icon:在对话框内要显示的图标。⑥ messageType:其值一般可以为ERROR_MESSAGE(错误消息)、INFORMATION_
MESSAGE(提示信息)、WARNING_MESSAGE(警告信息)、QUESTION_MESSAGE(问题消息)和PLAIN_MESSAGE(普通消息)。
⑦ optionType:它决定在对话框的底部所要显示的按钮选项。一般可以为DEFAULT_OPTION(默认)、YES_NO_OPTION(Yes和No按钮)、YES_NO_CANCEL_OPTION
(Yes、No和Cancel按钮)、OK_CANCEL_OPTION(Ok和Cancel按钮)等。对话框的使用示例:
■显示消息对话框如图6-5所示。
JOptionPane.showMessageDialog(this,“这是消息对话框!”,“消息对话框示例”,JOptionPane.WARNING
_MESSAGE);
■显示确认对话框如图6-6所示。图6-5消息对话框图6-6确认对话框
JOptionPane.showConfirmDialog(this,“这是确认对话框!”,“确认对话框示例”,JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
■显示输入对话框如图6-7所示。
StringinputValue=JJOptionPane.showInputDialog(this,"这是输入对话框","输入对话框示,JOptionPane.INFORMATION_MESSAGE);■显示选项对话框如图6-8所示。
Object[]options={"钢琴","小提琴","古筝"};
intresponse=JOptionPane.showOptionDialog(this,"请选择演奏的乐器","选项对话框示例",
JOptionPane.DEFAULT_OPTION,JOptionPane.QUESTION_MESSAGE,null,options,options[1]);图6-7输入对话框图6-8选项对话框6.2.3组件
1.按钮(JButton类)
按钮是图形用户界面中非常重要的一种组件,一般对应一个事先定义好的功能操作,并对应一段代码。当用户单击按钮时,系统自动执行与该按钮相关联的程序,从而完成预先指定的功能。
JButton类的常用构造函数及方法如表6-5所示。表6-5JButton类的常用构造函数及方法例如:
JButtonb1=newJButton("确定");
ImageIconbuttonIcon=newImageIcon("Ok.gif");
JButtonb2=newJButton("确定",buttonIcon);
2.标签(JLabel类)
JLabel类用于创建用户不能修改只能查看其内容的文本显示区域,一般具有信息说明的作用,每个标签用一个JLabel类的对象表示。JLabel可以提供带图标的标签,并且可以设置图标和文字的相对位置。
JLabel类的常用构造函数及方法如表6-6所示。表6-6JLabel类的常用构造函数及方法例6-4显示了一个纯文本的标签和带有图标及文本的标签,程序运行结果如图6-9所示。
例6-4JlabelDemo.java
1importjavax.swing.*;
2publicclassJLabelDemoextendsJFrame{
3JLabelDemo(){
4super("JLabel示例");
5 JPanelpan=newJPanel();
6 JLabeljlab1=newJLabel("文本标签");
7ImageIconicon=newImageIcon("angel.gif"); 8JLabeljlab2=newJLabel("这是图标文本标签",icon,SwingConstants.LEFT);
9pan.add(jlab1);
10pan.add(jlab2);
11this.getContentPane().add(pan);
12setLocation(300,300);
13 setSize(250,200);
14 setResizable(false);
15 setVisible(true);
16 setDefaultCloseOperation(EXIT_ON_CLOSE); 17}
18publicstaticvoidmain(Stringargs[]){
19 newJLabelDemo();
20}
21}
3.文本组件(JTextComponent类)
JTextComponent类是所有Swing文本组件的父类,表6-7所提供的常用方法可以被其子类JTextField、JTextArea和JPasswordField直接使用。图6-9JLabel示例表6-7JTextComponent类的常用方法
1)文本框(JTextField类)
JTextField类是单行文本输入组件,用于接收用户的输入,构造函数如表6-8所示。表6-8JTextField类的常用构造函数例如:
JTextFieldusername=newJTextField(15);
2)文本区(JTextArea类)
JTextArea类提供可以编辑或显示多行文本的区域,默认情况下,文本区是可编辑的。setEditable(false)方法可以将文本区设置为不可编辑。JTextArea类提供了多种构造函数,用于创建文本区组件的对象,常用的构造函数及方法如表6-9所示。表6-9JTextAread类的常用构造函数及方法文本区不自动具有滚动功能,但是可以通过创建一个包含JTextArea实例的JScrollPane的对象实现。
例如:
JScrollPanescroll=newJScrollPane(newJTextArea())
3)密码框(JPasswordField类)
JPasswordField类是JTextField类的子类,提供了一个专门用来输入密码的文本框。由于安全的原因,密码框一般不直接显示用户输入的字符,而是通过其他字符表示用户的输入,例如星号(*)。其中,利用setEchoChar方法可以对输入的字符进行设置,使其以其他字符形式显示。JPasswordField类的常用构造函数及方法如表6-10所示。表6-10JTextField类的常用构造函数及方法虽然JPasswordField类继承了getText方法,但是还是应该使用getPassword方法来获得用户输入的内容,因为getText方法返回的是密码框中的可见字符串而不是用户输入的值。
例如:
JPasswordFieldpasswordText=newJPasswordField(15);
passwordText.setEchoChar('*'); 6.3任务实施
用户登录界面如图6-1所示,包括组件JLabel、JTextField和JButton。程序设计代码如例6-5所示。
例6-5Login_GUI.java
1importjava.awt.Font;
2importjava.awt.Toolkit;
3importjavax.swing.JButton;
4importjavax.swing.JFrame;
5importjavax.swing.JLabel;
6importjavax.swing.JOptionPane;
7importjavax.swing.JPanel; 8importjavax.swing.JPasswordField;
9importjavax.swing.JTextField;
10//定义主类
11publicclassLogin_GUI{
12publicstaticvoidmain(String[]args){
13 newLoginFrame();
14}
15}
16//定义窗体
17classLoginFrameextendsJFrame{
18privateToolkittool; 19publicLoginFrame() {
20 intw,h;
21 LoginPanellp;
22 setTitle(“用户登录”);
23 tool=Toolkit.getDefaultToolkit();
24setSize(300,200);
25 //设置窗体居中显示
26 w=(Toolkit.getDefaultToolkit().getScreenSize().width-this.getWidth())/2;
27h=(Toolkit.getDefaultToolkit().getScreenSize().height-this.getWidth())/2; 28setLocation(w,h);
29 setResizable(false);
30 lp=newLoginPanel(this);
31 this.getContentPane().add(lp);
32 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
33 setVisible(true);
34}
35}
36//定义中间容器放置组件
37classLoginPanelextendsJPanel{
38privateJLabelnamelabel,pwdlabel,titlelabel;
39privateJTextFieldnamefield;
40privateJPasswordFieldpwdfield;
41privateJButtonloginbtn,registerbtn,cancelbtn;
42privateJFrameiframe;
43publicLoginPanel(JFrameframe){
44 iframe=frame;
45 titlelabel=newJLabel("欢迎使用考试系统");
46
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026电网机械测控业务面试题及答案
- 工业机器人维护服务合同2026年制造业
- Unit 8 Making a Difference Section A 3a-3d 课件 2025-2026学年人教版英语八年级下册
- 鞭炮燃放供水供电抢修配合手册
- 教师教学质量监控规范实施手册
- 教师招聘(中学)考试附参考答案7
- 法律服务中心农民工维权服务工作手册(标准版)
- 游乐园游客摔伤骨折应急处理手册
- 银行贷款逾期风险防控手册
- 工厂生产计量器具管理手册
- 机加工车间关键尺寸稳定性分析规范
- (2025)昆士兰临床指南:引产术(V10)解读
- 2026福建厦门市政协办公厅招聘非在编辅助岗工作人员2人考试参考题库及答案解析
- 2025中国黄金集团黄金珠宝股份有限公司招聘笔试历年备考题库附带答案详解
- 慢阻肺患者呼吸肌训练器械使用
- 宠物食品制作技师试卷及答案
- (2025)医疗器械生产质量管理规范培训试卷带答案
- 龙舟饭由来课件
- 老年患者营养支持的伦理决策
- 2025年东北大学强基笔试试题及答案
- 2026年台州市黄岩经开投资集团有限公司下属公司公开招聘工作人员备考题库及一套完整答案详解
评论
0/150
提交评论