《实验五 Java图形用户界面设计.docx》由会员分享,可在线阅读,更多相关《实验五 Java图形用户界面设计.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验五 Java图形用户界面设计 5 Java 图形用户界面设计 5.1实验目的、内容及性质 掌握Java 的GUI 设计技术,掌握AWT 和Swing 的应用技巧。实验性质:验证、必做 实验学时:2学时 5.2问题及思考 1、最常见的AWT以及Swing控件用法。 2、几个常见布局总结 3、区分容器控件和一般非容器控件 4、Java事件几种关键组成部分以及事件处理流程 5.3实验指导 1、Swing示例 /*需要哪些组件,如何布局?*/ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class
2、 MyFrm extends JFrame/从JFrame继承 /*声明界面需要使用的控件*/ JLabel lbl_name =new JLabel(用户名); JLabel lbl_pwd =new JLabel(密码); JTextField txt_name=new JTextField(); JPasswordField txt_pwd=new JPasswordField(); JButton btn_OK=new JButton(登陆); JButton btn_Cancel=new JButton(取消); /*在构造函数中将控件放置在JFrame上*/ public MyFr
3、m() /*获取当前Frame的内容面板*/ JPanel jp=(JPanel)this.getContentPane(); /*设置内容面板的布局Layout*/ jp.setLayout(new GridLayout(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); public static void main(St
4、ring arg) /*纯Java样式显示窗体*/ JFrame.setDefaultLookAndFeelDecorated(true); /*实例化当前窗体类*/ MyFrm frm=new MyFrm(); frm.setSize(200,200); frm.setVisible(true); 2、常用布局 1)、流布局:FlowLayout 从左到右,自上而下方式在容器中排列,控件的大小不会随容器大小变化. 容器.setLayout(new FlowLayout(FlowLayout.LEFT); 2)、网格布局:GridLayout 按照指定行数与列数,将容器分成大小相等的单元格每个
5、单元格放置一个控件. 不能将控件放在指定单元格 容器.setLayout(new GridLayout(3,4,10,15); 3)、边界布局:BorderLayout 将容器分成东、西、南、北、中五个部分 容器.setLayout(new BorderLayout(); 窗口的内容面板默认布局就是边界布局。 容器.add(控件,BorderLayout.NORTH); 4)、混合布局:使用JPanel,将多个布局组合在一起使用 JPanel jp=(JPanel)this.getContentPane(); for(int i=0;i事件源侦听者接收事件-自动调用相应事件处理函数. 编程模板
6、: class MyFrm extends JFrame implements ActionListener JButton btn=new JButton(OK); . public MyFrm() . btn.addActionListner(this); . public void actionPerformed(ActionEvent e) . if(e.getSource()=btn) Java事件处理示例: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MyFrm ext
7、ends JFrame implements ActionListene r /* 界面中需要的组件作为属性声明 */ JTextField txt = new JTextField(10); JLabel lbl = new JLabel(姓名); JButton btn = new JButton(查询); /* 组件在构造函数中放置在窗体JFrame上 */ public MyFrm() /* 获取JFrame的内容面板ContentPane,控件放在该面板上 */ JPanel jp = (JPanel) this.getContentPane(); /* 设置面板布局Layout,如
8、何放? */ jp.setLayout(new FlowLayout(); jp.add(lbl); jp.add(txt); jp.add(btn); /* 为事件源加一个侦听者*/ btn.addActionListener(this); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* 事件处理方法*/ public void actionPerformed(ActionEvent e) JOptionPane.showMessageDialog(this, btn点击); public static void main(St
9、ring arg) JFrame.setDefaultLookAndFeelDecorated(true);/ 设置纯Java样式 MyFrm frm = new MyFrm(); frm.setSize(400, 300); frm.setVisible(true); 注意:在做下列题目前仔细阅读第一个示例,彻底弄懂Swing界面设计 5.4实践编程 1、调试运行Swing示例 2、调试运行Java事件处理示例 3、依据题1、2,编写如下界面 当用户点击”Click Me”按钮,显示消息对话框,消息为” Click Me 按钮被点击”。package Ex5_3; import javax.
10、swing.*; import java.awt.*; import java.awt.event.*; public class MyFrm extends JFrame implements ActionListener JButton btn=new JButton(Click Me); public MyFrm() JPanel jp=(JPanel)this.getContentPane(); jp.setLayout(new FlowLayout(); jp.add(btn); btn.addActionListener(this); this.setTitle(Action Ev
11、ent); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public void actionPerformed(ActionEvent e) JOptionPane.showMessageDialog(this,Click Me 按钮被点击); package Ex5_3; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test public static void main(String args) MyFrm frm
12、= new MyFrm(); frm.setSize(400, 300); frm.setVisible(true); 4、编写一个程序实现用户登录界面 当用户登录按下确定键,判断用户是否录入了用户名与密码,如果没有按或用户名不为admin 密码不为1234 都需要提示错误。 package Ex5_4; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MyFrm extends JFrame implements ActionListener JLabel lbl_name =new
13、 JLabel(用户名); JLabel lbl_pwd =new JLabel(密码); JTextField txt_name=new JTextField(); JPasswordField txt_pwd=new JPasswordField(); JButton btn_OK=new JButton(登陆); JButton btn_Cancel=new JButton(取消); public MyFrm() JPanel jp=(JPanel)this.getContentPane(); jp.setLayout(new GridLayout(3,2,10,5); jp.add(l
14、bl_name);jp.add(txt_name); jp.add(lbl_pwd);jp.add(txt_pwd); jp.add(btn_OK);jp.add(btn_Cancel); this.setTitle(登陆); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); btn_OK.addActionListener(this); public void actionPerformed(ActionEvent e) String uname=txt_name.getText(); String upwd=txt_pwd.getTe
15、xt(); if(uname.equals()|upwd.equals() JOptionPane.showMessageDialog(this, 用户名或密码未输入!); else if(!uname.equals(admin)|!upwd.equals(1234) JOptionPane.showMessageDialog(this, 用户名或密码输入错误!); else JOptionPane.showMessageDialog(this, 用户名或密码输入正确!); package Ex5_4; import javax.swing.*; import java.awt.*; impo
16、rt java.awt.event.*; public class Test public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); MyFrm frm=new MyFrm(); frm.setSize(400,200); frm.setVisible(true); 5、利用合适的布局和Swing控件完成下题 按照界面使用相应控件与合适的布局完成下题,要求按生成随机数按纽产生三个随机整数0到100之间,按计算平均数按纽计算平均值,如图所示,初始界面 参考:int x=(Math.rand
17、om()*41+60); 产生随机数 txt1.setText(x+”);将随机数赋予文本框txt1 package Ex5_5; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MyFrm extends JFrame implements ActionListener JLabel lbl =new JLabel(随机数字一); JLabel lb2 =new JLabel(随机数字二); JLabel lb3 =new JLabel(随机数字三); JLabel lb4 =new
18、 JLabel(三数平均值); JTextField txt1=new JTextField(); JTextField txt2=new JTextField(); JTextField txt3=new JTextField(); JTextField txt4=new JTextField(); JButton btn_start=new JButton(生成随机数); JButton btn_average=new JButton(计算平均数); public MyFrm() JPanel jp=(JPanel)this.getContentPane(); jp.setLayout(n
19、ew GridLayout(5,2,10,5); jp.add(lbl);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); this.setTitle(三个随机数字); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); btn_start.addActionListener(this); btn_average.addAction
20、Listener(this); public void actionPerformed(ActionEvent e) if(e.getSource()=btn_start) int x=(int)(Math.random()*41+60); txt1.setText(x+); int y=(int)(Math.random()*41+60); txt2.setText(y+); int z=(int)(Math.random()*41+60); txt3.setText(z+); if(e.getSource()=btn_average) double x=Double.valueOf(txt
21、1.getText(); double y=Double.valueOf(txt2.getText(); double z=Double.valueOf(txt3.getText(); double t=(x+y+z)/3; txt4.setText(t+); package Ex5_5; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test public static void main(String args) MyFrm frm=new MyFrm(); frm.setSiz
22、e(400,200); frm.setVisible(true); 6编写程序实现如下界面,实现事件如果按下座位i 就在控制台中显示“座位i被选中”例如按下“座位0“,则输出座位0被选中” package Ex5_6; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MyFrm extends JFrame implements ActionListener JButton btn0=new JButton(讲台); JButton btn1=new JButton(座位1); JBu
23、tton btn2=new JButton(座位2); JButton btn3=new JButton(座位3); JButton btn4=new JButton(座位4); JButton btn5=new JButton(座位5); JButton btn6=new JButton(座位6); public MyFrm() JPanel jp=(JPanel)this.getContentPane(); JPanel jp1=new JPanel(); jp1.setLayout(new GridLayout(); jp1.add(btn0); jp.add(jp1,BorderLay
24、out.NORTH); JPanel jp2=new JPanel(); jp2.setLayout(new GridLayout(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); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); btn1.addActionListener(this); btn2.addActionListener(thi
25、s); btn3.addActionListener(this); btn4.addActionListener(this); btn5.addActionListener(this); btn6.addActionListener(this); public void actionPerformed(ActionEvent e) if(e.getSource()=btn1) System.out.println(座位1被选中); if(e.getSource()=btn2) System.out.println(座位2被选中); if(e.getSource()=btn3) System.o
26、ut.println(座位3被选中); if(e.getSource()=btn4) System.out.println(座位4被选中); if(e.getSource()=btn5) System.out.println(座位5被选中); if(e.getSource()=btn6) System.out.println(座位6被选中); public static void main(String args) MyFrm frm=new MyFrm(); frm.setSize(1000,500); frm.setVisible(true); 7 完成以下窗体制作 参考:这一题考虑使用组
27、合布局,将上面控件放置在JPanel上,再将JPanel放到内容面板的中间。下面四个按钮先放在某JPanel再放置在内容面板的South部分 package Ex5_7; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class LoginFrm extends JFrame implements ActionListener JLabel lb_name=new JLabel(姓名:); JLabel lb_sex=new JLabel(性别:); JLabel lb_profession=new JLabel(身份:); JLabel lb_unit=new JLabel(单位:); JLabel lb_IDnum=new JLabel(证件号码:); JLabel lb_rDate=new JLabel(注册日期:); JLabel lb_eDate=new JLabel(有效日期:); JTextField txt_name=new JTextField();