实验五 Java图形用户界面设计知识讲解Word格式.docx
《实验五 Java图形用户界面设计知识讲解Word格式.docx》由会员分享,可在线阅读,更多相关《实验五 Java图形用户界面设计知识讲解Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
JTextFieldtxt_name=newJTextField();
JPasswordFieldtxt_pwd=newJPasswordField();
JButtonbtn_OK=newJButton("
登陆"
JButtonbtn_Cancel=newJButton("
取消"
/*在构造函数中将控件放置在JFrame上*/
publicMyFrm(){
/*获取当前Frame的内容面板*/
JPaneljp=(JPanel)this.getContentPane();
/*设置内容面板的布局Layout*/
jp.setLayout(newGridLayout(3,2));
jp.add(lbl_name);
jp.add(txt_name);
jp.add(lbl_pwd);
jp.add(txt_pwd);
jp.add(btn_OK);
jp.add(btn_Cancel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicstaticvoidmain(Stringarg[]){
/*纯Java样式显示窗体*/
JFrame.setDefaultLookAndFeelDecorated(true);
/*实例化当前窗体类*/
MyFrmfrm=newMyFrm();
frm.setSize(200,200);
frm.setVisible(true);
2、常用布局
1)、流布局:
FlowLayout从左到右,自上而下方式在容器中排列,控件的大小不会随容器大小变化.
容器.setLayout(newFlowLayout(FlowLayout.LEFT));
2)、网格布局:
GridLayout按照指定行数与列数,将容器分成大小相等的单元格每个单元格放置一个控件.不能将控件放在指定单元格
容器.setLayout(newGridLayout(3,4,10,15));
3)、边界布局:
BorderLayout将容器分成东、西、南、北、中五个部分
容器.setLayout(newBorderLayout());
窗口的内容面板默认布局就是边界布局。
容器.add(控件,BorderLayout.NORTH);
4)、混合布局:
使用JPanel,将多个布局组合在一起使用
for(inti=0;
i<
btn.length;
i++)
btn[i]=newJButton("
btn"
+i);
JPaneljp1=newJPanel();
//默认布局为FlowLayout
jp1.setLayout(newGridLayout(2,2));
4;
jp1.add(btn[i]);
JPaneljp2=newJPanel();
jp2.add(btn[i+4]);
5)、绝对布局null:
以坐标定位
容器.setLayout(null);
每个控件在放置在容器之前,必须设置其边界setBounds(x,y,width,height);
btn.setBounds(10,100,30,60);
3、Swing示例Grid布局
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassGridLayoutDemoextendsJFrame{
privateJButtonbuttons[];
privateStringnames[]={"
one"
"
two"
three"
four"
five"
six"
};
publicGridLayoutDemo(){
super("
GridLayoutDemo"
);
JPanelcontainer=(JPanel)this.getContentPane();
container.setLayout(newGridLayout(3,2));
//createandaddbuttons
buttons=newJButton[names.length];
for(intcount=0;
count<
names.length;
count++){
buttons[count]=newJButton(names[count]);
container.add(buttons[count]);
this.setSize(300,150);
this.setVisible(true);
publicstaticvoidmain(Stringargs[]){
GridLayoutDemoapplication=newGridLayoutDemo();
}
}//endclassGridLayoutDemo
4、常用事件
基本组成:
1)、事件源EventSource:
能够触发事件控件如:
JButton,JTextField,JFrame,
JComboBox,....
2)、事件Event:
ActionEvent,KeyEvent,WindowEvent,TextEvent,...
3)、事件侦听者Listener(接口)
ActionListener,WindowListener,...
classAimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
....
Alis=newA();
4)、事件处理函数
事件流程:
事件源触发事件-->
事件源侦听者接收事件-->
自动调用相应事件处理函数.
编程模板:
classMyFrmextendsJFrameimplementsActionListener{
JButtonbtn=newJButton("
OK"
...
btn.addActionListner(this);
if(e.getSource()==btn){
}
Java事件处理示例:
publicclassMyFrmextendsJFrameimplementsActionListener{
/*界面中需要的组件作为属性声明*/
JTextFieldtxt=newJTextField(10);
JLabellbl=newJLabel("
姓名"
JButtonbtn=newJButton("
查询"
/*组件在构造函数中放置在窗体JFrame上*/
publicMyFrm(){
/*获取JFrame的内容面板ContentPane,控件放在该面板上*/
JPaneljp=(JPanel)this.getContentPane();
/*设置面板布局Layout,如何放?
*/
jp.setLayout(newFlowLayout());
jp.add(lbl);
jp.add(txt);
jp.add(btn);
/*为事件源加一个侦听者*/
btn.addActionListener(this);
/*事件处理方法*/
JOptionPane.showMessageDialog(this,"
btn点击"
publicstaticvoidmain(Stringarg[]){
//设置纯Java样式
MyFrmfrm=newMyFrm();
frm.setSize(400,300);
注意:
在做下列题目前仔细阅读第一个示例,彻底弄懂Swing界面设计
5.4实践编程
1、调试运行Swing示例
2、调试运行Java事件处理示例
3、依据题1、2,编写如下界面
当用户点击”ClickMe”按钮,显示消息对话框,消息为”ClickMe按钮被点击”。
packageEx5_3;
ClickMe"
this.setTitle("
ActionEvent"
JOptionPane.showMessageDialog(this,"
ClickMe按钮被点击"
publicclassTest{
publicstaticvoidmain(String[]args){
4、编写一个程序实现用户登录界面
当用户登录按下确定键,判断用户是否录入了用户名与密码,如果没有按或用户名不为admin密码不为1234都需要提示错误。
packageEx5_4;
jp.setLayout(newGridLayout(3,2,10,5));
btn_OK.addActionListener(this);
Stringuname=txt_name.getText();
Stringupwd=txt_pwd.getText();
if(uname.equals("
"
)||upwd.equals("
))
用户名或密码未输入!
elseif(!
uname.equals("
admin"
)||!
upwd.equals("
1234"
用户名或密码输入错误!
elseJOptionPane.showMessageDialog(this,"
用户名或密码输入正确!
frm.setSize(400,200);
5、利用合适的布局和Swing控件完成下题
按照界面使用相应控件与合适的布局完成下题,要求按生成随机数按纽产生三个随机整数0到100之间,按计算平均数按纽计算平均值,如图所示,初始界面
参考:
intx=(Math.random()*41+60);
产生随机数
txt1.setText(x+””);
将随机数赋予文本框txt1
packageEx5_5;
JLabellbl=newJLabel("
随机数字一"
JLabellb2=newJLabel("
随机数字二"
JLabellb3=newJLabel("
随机数字三"
JLabellb4=newJLabel("
三数平均值"
JTextFieldtxt1=newJTextField();
JTextFieldtxt2=newJTextField();
JTextFieldtxt3=newJTextField();
JTextFieldtxt4=newJTextField();
JButtonbtn_start=newJButton("
生成随机数"
JButtonbtn_average=newJButton("
计算平均数"
jp.setLayout(newGridLayout(5,2,10,5));
jp.add(txt1);
jp.add(lb2);
jp.add(txt2);
jp.add(lb3);
jp.add(txt3);
jp.add(lb4);
jp.add(txt4);
jp.add(btn_start);
jp.add(btn_average);
三个随机数字"
btn_start.addActionListener(this);
btn_average.addActionListener(this);
if(e.getSource()==btn_start){
intx=(int)(Math.random()*41+60);
txt1.setText(x+"
inty=(int)(Math.random()*41+60);
txt2.setText(y+"
intz=(int)(Math.random()*41+60);
txt3.setText(z+"
}
if(e.getSource()==btn_average){
doublex=Double.valueOf(txt1.getText());
doubley=Double.valueOf(txt2.getText());
doublez=Double.valueOf(txt3.getText());
doublet=(x+y+z)/3;
txt4.setText(t+"
6.编写程序实现如下界面,实现事件如果按下座位i就在控制台中显示“座位i被选中”例如按下“座位0“,则输出座位0被选中”
packageEx5_6;
JButtonbtn0=newJButton("
讲台"
JButtonbtn1=newJButton("
座位1"
JButtonbtn2=newJButton("
座位2"
JButtonbtn3=newJButton("
座位3"
JButtonbtn4=newJButton("
座位4"
JButtonbtn5=newJButton("
座位5"
JButtonbtn6=newJButton("
座位6"
JPaneljp1=newJPanel();
jp1.setLayout(newGridLayout());
jp1.add(btn0);
jp.add(jp1,BorderLayout.NORTH);
JPaneljp2=newJPanel();
jp2.setLayout(newGridLayout(2,3));
jp2.add(btn1);
jp2.add(btn2);
jp2.add(btn3);
jp2.add(btn4);
jp2.add(btn5);
jp2.add(btn6);
jp.add(jp2,BorderLayout.CENTER);
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
btn5.addActionListener(this);
btn6.addActionListener(this);
if(e.getSource()==btn1)
System.out.println("
座位1被选中"
if(e.getSource()==btn2)
座位2被选中"
if(e.