实验名称:图形用户界面设计
一、实验目的
1.掌握常用图形界面组件(按钮、文本框等)对象的创建及其常用方法的使用。如,
按钮的常用方法是getLabel(),文本框的常用方法有tText(),getText()等。
2.掌握常用的布局管理类CardLayou,BorderLayout,FlowLayout,GridLayout的使用策略。
能够将它们联合起来使用。
3.掌握java语言的事件处理。每个事件对应的接口(或适配器类)是什么,每个接口
有哪些方法,如何进行委托处理,被委托者必须做什么。
二、实验环境(软件、硬件环境)
PC机JDK包
三、实验原理
通过图形用户界面(GUI),用户和程序之间可以方便地进行交互。包中的组件
类可以帮助我们完整界面的设计。包的JComponent类是包中的Container
类的一个直接子类、Component类的间接子类。包中的JFrame类和JDialog类分
别是包中Frame类和Dialog类的直接子类、Window类的间接子类。在学习GUI
编程时,必须很好地理解并掌握两个概念:容器类和组件类,必须很好地掌握java的事件
处理机制。
四、实验容及步骤
实验容:密码验证问题。
编写一个Java程序,实现用户根据自己的密码进入界面,如果用户输入信息正确,则输出
“欢迎XXX用户”,否则用户还可以尝试两次,如果尝试阶段输入信息错误,则输出“请
...
....
输入正确的信息”,如果尝试失败,用户则退出。
调试并编译程序,运行该程序,运行结果如图8-1、图8-2、图8-3
和图8-4所示,请将程序中的代码1~代码7补充完整。
图8-1运行结果,输入正确信息图8-2显示欢迎信息
图8-3运行结果,输入错误信息图8-4显示重新输入信息
程序清单:
//
.*;
.*;
.*;
publicclassPasswordVerificationextendsJFrame
{
JLabelurLabel;
JLabelpasswordLabel;
JTextFieldurText;
JPasswordFieldpasswordText;
intcount=1;//统计输入信息的次数
publicPasswordVerification()
{
super("请输入信息");
Containerc=代码1;//得到容器对象container
out(newFlowLayout());//设置默认布局
urLabel=代码2//创建用户标签
passwordLabel=代码3;//创建密码标签
urText=代码4//创建用户文本输入框
passwordText=代码5//创建密码输入文本框
passwordText.代码6(
...
....
newActionListener(){//注册事件监听者
publicvoidactionPerformed(代码7)//事件处理
{
StringurName=newString("三");//假设为正确的用户名
Stringpassword=newString("12345678");//假设为正确的密码
if(rce()==passwordText)
{
count++;
char[]passwords=sword();
if(t().equals(urName)&&(newString(passwords)))
{
ssageDialog(null,"欢迎您:"+urName);
(0);
}
elif(count>3)
(0);
el{
ssageDialog(null,t()+"请输入正确信息");
}
}
}
});
(urLabel);
(urText);
(passwordLabel);
(passwordText);
tSize(240,100);
tVisible(true);
}
publicstaticvoidmain(String[]args)
{
PasswordVerificationpv=newPasswordVerification();
aultCloOperation(_ON_CLOSE);
}
}
...
....
五、实验数据及处理
.*;
.*;
.*;
publicclassPasswordVerificationextendsJFrame
{
JLabelurLabel;
JLabelpasswordLabel;
JTextFieldurText;
JPasswordFieldpasswordText;
intcount=1;//统计输入信息的次数
publicPasswordVerification()
{
super("请输入信息");
Containerc=getContentPane();//得到容器对象container
out(newFlowLayout());//设置默认布局
urLabel=newJLabel("用户:");//创建用户标签
passwordLabel=newJLabel("密码:");//创建密码标签
urText=newJTextField(5);//创建用户文本输入框
passwordText=newJPasswordField(5);//创建密码输入文本框
ionListener(newActionListener()
{//注册事件监听者
...
....
publicvoidactionPerformed(ActionEvente)//事件处理
{
StringurName=newString("三");//假设为正确的用户名
Stringpassword=newString("12345678");//假设为正确的密码
if(rce()==passwordText)
{
count++;
char[]passwords=sword();
if(t().equals(urName)&&(new
String(passwords)))
{
ssageDialog(null,"欢迎您:"+urName);
(0);
}
elif(count>3)
(0);
el{
ssageDialog(null,t()+"请输入正确
信息");
}
}
...
....
}
});
(urLabel);
(urText);
(passwordLabel);
(passwordText);
tSize(240,100);
tVisible(true);
}
publicstaticvoidmain(String[]args)
{
PasswordVerificationpv=newPasswordVerification();
aultCloOperation(_ON_CLOSE);
}
}
运行结果:
...
....
思考:
(1)程序中第3行语句.*的作用是什么?
答:添加容器类。
(2)程序actionPerformed()方法中if(e,getSource()==passwordText)的作用是什么?如果去
掉该条件判断,程序运行结果会发生什么变化?
答:用来判断发起事件的控件是不是passwordText
(3)观察actionPerformed()方法中语句“char[]passwords=sword();”
的作用是什么?
答:是使用char[]getPassword()方法返回密码框中的密码.
(4)观察程序中定义的main()方法,如果在PasswordVerificationpv=new
PasswordVerification();语句后,添加语句()会出现什么问题?为什么?
答:程序打开后就会自动关闭。因为在创建PasswordVerification对象之后就
触发的().
(5)从给定程序的运行结果看,密码输入的回显字符是“*”,如果把回显字符换成“#”,
该如何处理?
答:密码框课用tEchoChar(’#’)来改变回显符为#。
添加语句oChar(“#”)
(6)如果要求在信息输入错误处理中,一旦输入完密码信息,用户输入框和密码输入框
可以清空,请将上述程序修改,使之实现功能。
.*;
.*;
.*;
publicclassPasswordVerificationextendsJFrame
{
JLabelurLabel;
JLabelpasswordLabel;
JTextFieldurText;
JPasswordFieldpasswordText;
intcount=1;//统计输入信息的次数
publicPasswordVerification()
{
...
....
super("请输入信息");
Containerc=getContentPane();//得到容器对象container
out(newFlowLayout());//设置默认布局
urLabel=newJLabel("用户:");//创建用户标签
passwordLabel=newJLabel("密码:");//创建密码标签
urText=newJTextField(5);//创建用户文本输入框
passwordText=newJPasswordField(5);//创建密码输入文本框
ionListener(newActionListener()
{//注册事件监听者
publicvoidactionPerformed(ActionEvente)//事件处理
{
StringurName=newString("三");//假设为正确的用户名
Stringpassword=newString("12345678");//假设为正确的密码
if(rce()==passwordText)
{
count++;
char[]passwords=sword();
if(t().equals(urName)&&(new
String(passwords)))
{
ssageDialog(null,"欢迎您:"+urName);
(0);
}
elif(count>3)
(0);
el{
ssageDialog(null,t()+"
请输入正确信息");
t("");
t("");
}
}
}
});
(urLabel);
(urText);
(passwordLabel);
(passwordText);
tSize(240,100);
tVisible(true);
}
publicstaticvoidmain(String[]args)
...
....
{
PasswordVerificationpv=newPasswordVerification();
aultCloOperation(_ON_CLOSE);
}
}
六、实验结论及问题分析
1.在上机编写程序时,不仅要调试出来结果,更重要的是要把算法彻底搞清楚。
2.那些触发事件的组件要增加监听器,监听器是一个对象,该对象所在的类要实现事
件接口。
3.按钮可用一个Button的数组来表示.
本文发布于:2022-11-27 14:39:50,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/31591.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |