




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 7 章JAVA图形用户界面设计 本章学习目标一、实验目的1.了解图形用户界面基本组件窗口、常用组件的使用方法。2.了解图形用户界面各种布局策略的设计与使用,以及如何使用Java 的事件处理机制。二、实验要求1. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。2. 掌握编写独立运行的窗口界面的方法。3. 了解Java AWT组件的使用方法。4. 了解Java Swing 组件的使用方法。5. 了解对话框的使用方法。6.掌握在Applet容器中添加组件的方法,掌握使用布局管理器对组件进行管理的方法。三、实验内容(一)创建图形用户界面1Applet中网格布局的使用(1)程序功能:在Applet容器中添加组件标签、按钮,并使用网格布局管理器。(2)编写LX7_1.java程序文件,源代码如下。import java.awt.*;import java.applet.Applet;public class LX7_1 extends Applet Label l1,l2;Button b1, b2, b3, b4, b5, b6;public void init() setLayout(new GridLayout(2,3); /设置网格布局b1 = new Button(red); b2 = new Button(blue); b3 = new Button(black); b4 = new Button(cyan); l1 = new Label(label 1,Label.CENTER);l2 = new Label();add(l1);add(b1);add(b2);add(b3);add(l2);add(b4);b1.setBackground(Color.red);b2.setBackground(Color.blue);b3.setBackground(Color.black);b4.setBackground(Color.cyan);b3.setForeground(Color.white);(3)编译程序LX7_1.java,运行结果图7.1所示。图7.1(4)编写显示Applet的页面文件LX7_1.html,给出在浏览器显示结果。 Applet HTML 页面2在面板容器中添加组件,并使用边界布局(1)程序功能:在Applet中添加面板容器,并使用边界布局管理方式。(2)编写LX7_2.java程序文件,源代码如下。import java.awt.*;import java.awt.Color;import java.applet.Applet;public class LX7_2 extends Applet public void init() setFont(new Font(Arial,Font.PLAIN,20);Panel panel1=new Panel();add( panel1); panel1.setBackground(Color.blue); panel1.setForeground(Color.red);panel1.setLayout(new BorderLayout();/设置边界布局panel1.add(North, new Button(北); panel1.add(South, new Button(南); panel1.add(East, new Button(东);panel1.add(West, new Button(西);Choice c=new Choice ();/创建下拉式列表c.addItem(0); c.addItem(1); c.addItem(2);c.addItem(3);panel1.add(Center, c);(3)编译程序LX7_2.java,运行运行结果图7.2所示。图7.2(4)编写显示Applet的页面文件LX6_2.html,在浏览器显示结果。3.流布局管理器的使用(1)程序功能:在Applet中添加面板容器,并使用流布局管理方式。(2)编写LX7_3.java程序文件,源代码如下。import java.awt.*;import java.applet.Applet;public class LX7_3 extends Applet Label l1;Button b1, b2, b3, b4, b5, b6;public void init() setFont(new Font(Arial,Font.PLAIN,20);setSize(300, 100);Panel panel1=new Panel();add( panel1); panel1.setLayout(new FlowLayout(); /设置网格布局b1 = new Button(red); b2 = new Button(blue); b3 = new Button(black); b4 = new Button(cyan); l1 = new Label(label);b1.setBackground(Color.red);b2.setBackground(Color.blue);b3.setBackground(Color.black);b4.setBackground(Color.cyan);b3.setForeground(Color.white);panel1.add(l1);panel1.add(b1);panel1.add(b2);panel1.add(b3);panel1.add(b4);(3)编译程序LX7_3.java,运行结果图7.3所示。图7.3(4)编写显示Applet的页面文件LX7_3.html,给出在浏览器显示结果。思考:三种布局管理器的差异和适用情况?组件是如何确定排列顺序的?(二)了解事件处理机制1单击按钮的事件处理程序(1)程序功能:在实验LX7_1上为按钮编写单击事件处理方法。当用户用鼠标单击按钮时,会听到一声响声,且l2区的背景颜色被控制。(2)编写LX7_4.java程序文件,源代码如下。import java.awt.*;import java.awt.event.*;import java.applet.Applet;public class LX7_4 extends Applet implements ActionListener / 实现动作事件监听接口Label l1,l2;Button b1, b2, b3, b4, b5, b6;public void init() setLayout(new GridLayout(2,3); /设置网格布局b1 = new Button(red); b2 = new Button(blue); b3 = new Button(black); b4 = new Button(cyan); l1 = new Label(label 1,Label.CENTER);l2 = new Label();add(l1);add(b1);add(b2);add(b3);add(l2);add(b4);b1.setBackground(Color.red);b2.setBackground(Color.blue);b3.setBackground(Color.black);b4.setBackground(Color.cyan);b3.setForeground(Color.white);b1.addActionListener (this); / 注册事件源的动作监听者b2.addActionListener (this);b3.addActionListener (this);b4.addActionListener (this);public void actionPerformed(ActionEvent e) /实现单击事件接口的方法if(e.getSource()=b1)l2.setBackground(Color.red);if(e.getSource()=b2)l2.setBackground(Color.blue);if(e.getSource()=b3)l2.setBackground(Color.black);if(e.getSource()=b4)l2.setBackground(Color.cyan);Toolkit.getDefaultToolkit ().beep();/所有单击事件发生时作出的反应(3)编译程序LX7_4.java,运行结果。图7.4 当按下red按钮时(4)编写显示Applet的页面文件。思考:具有事件处理功能的类有什么特点?(三)建立独立运行的窗口界面并使用匿名类最常使用的包含组件的容器是窗口,在Java中窗口由Frame类生成。1创建一个窗口界面(1)程序功能:创建一个具有关闭功能的空白窗口。(2)编写LX7_5.java程序文件,源代码如下。import java.awt.*;import java.awt.event.*;import javax.swing.JFrame;public class LX7_5 public static void main(String args) new LX7_5();LX7_5()JFrame f=new JFrame(初始窗口);/创建窗口对象f.setSize(350,200);/设置窗口大小f.add(new Label(空窗口示例,Label.CENTER);f.setVisible(true);/设置窗口是可视的f.addWindowListener(new WindowAdapter() /为窗口添加窗口事件适配器public void windowClosing(WindowEvent e) /关闭窗口事件的方法System.exit(0);); (3)编译并运行程序,会出现一个界面窗口如图6.5所示。它可以最大化、最小化,单击按钮可以关闭该窗口。图7.52在窗口中添加组件,为窗口添加菜单(1)程序功能:在窗口中添加组件,为窗口添加菜单。(2)编写LX7_6.java程序文件,源代码如下。import java.awt.*;import java.awt.event.*;public class LX7_6 extends Frame implements ActionListenerFrame fr=new Frame(Menu);MenuBar mb=new MenuBar();Menu m1=new Menu(文件);Menu m2=new Menu(编辑);Menu m3=new Menu(帮助);MenuItem m11=new MenuItem(新建);MenuItem m12=new MenuItem(保存);MenuItem m13=new MenuItem(退出);MenuItem m21=new MenuItem(复制);MenuItem m22=new MenuItem(剪切);MenuItem m23=new MenuItem(粘贴);public static void main(String args)new LX7_6();LX7_6()fr.setMenuBar(mb);mb.add(m1);mb.add(m2);mb.setHelpMenu(m3);m1.add(m11);m1.add(m12);m1.addSeparator(); /在菜单中添加分隔条m1.add(m13);m2.add(m21);m2.add(m22);m2.add(m23);fr.pack();fr.setSize(300, 200);fr.setVisible(true);m13.addActionListener(this);public void actionPerformed(ActionEvent e) if (e.getActionCommand()=退出)System.exit(0);(3)编译并运行程序,界面窗口如图7.6所示。图7.6(四)在JFrame窗口中使用自定义对话框与内部类1创建自定义对话框的应用程序程序功能:构造一个对话框,当用户按下框架中的按钮时,对话框将被显示出来。(1)编写LX7_7.java 程序文件,源代码如下。import java.awt.*;import java.awt.event.*;import javax.swing.*;public class LX7_7 implements ActionListener JFrame frame ;JDialog dialog ;JButton button ;public static void main(String args) LX7_7 jd = new LX7_7 ();jd.go();public void go() frame = new JFrame (JDialog Demo);dialog = new JDialog(frame,Dialog,true);dialog.getContentPane().add(new JLabel(Hello,Im a Dialog,JLabel.CENTER);/在对话框中添加组件dialog.setSize(200,100);dialog.setLocation(50, 50);button = new JButton(Show Dialog);button.addActionListener(this);Container cp = frame.getContentPane();cp.add(button,BorderLayout.SOUTH);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400,200);frame.setVisible(true);public void actionPerformed(ActionEvent e) / 显示对话框dialog.setVisible(true);(2)编译并运行程序,当用户按下框架中的按钮时,对话框将被显示出来。如图7.7图7.7(3)编写显示LX7_7.class的页面文件。(五)Java 图形用户界面高级组件综合例子功能:利用图像用户界面高级组件实现简单记事本,实现“文件”菜单,包含“打开”、“保存”、“退出”的菜单项,实现“编辑”菜单,使菜单具有“复制”、“剪切”、“粘贴”的功能。(1)编写LX7_8.java 程序文件,源代码如下。import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; public class LX7_8 extends JFrame private JTextArea editor; private Container c; private Font f=new Font(sanserif,Font.PLAIN,12); /菜单栏成员属性声明 private JMenuBar mb; /菜单棒 private JMenu fileMenu; /文件菜单 private JMenu editMenu; /编辑菜单 private JMenuItem fileMenuOpen,fileMenuSave,fileMenuExit; /文件菜单的菜单项 private JMenuItem editMenuCopy,editMenuCut,editMenuPaste; /编辑菜单的菜单项 /弹出式菜单属性声明 private JPopupMenu pm; private JMenuItem item1,item2,item3,item4,item5; public LX7_8 () super(简单记事本); setSize(400,300); try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (Exception e) System.err.println(不能被设置外观的原因:+e); c=getContentPane(); /创建一个内容面板 editor = new JTextArea(); /创建一个文本区 c.add(new JScrollPane(editor); /设置滚动条,并添加到内容面板 /菜单栏的实现 /文件菜单的实现 mb = new JMenuBar(); /创建菜单棒 fileMenu = new JMenu(文件(F);/创建菜单 fileMenuOpen = new JMenuItem(打开(O).Ctrl+O); fileMenuSave = new JMenuItem(保存(S).Ctrl+S); fileMenuExit = new JMenuItem(退出); JMHandler JM=new JMHandler(); /创建监听器 fileMenuOpen.addActionListener(JM); /注册监听器 fileMenuSave.addActionListener(JM); fileMenuExit.addActionListener(JM); fileMenu.add(fileMenuOpen); fileMenu.add(fileMenuSave); fileMenu.addSeparator(); /添加分隔线 fileMenu.add(fileMenuExit); fileMenu.setFont(f); /设置菜单中文体的字体 /编辑菜单的实现 editMenu = new JMenu(编辑(E); editMenuCopy = new JMenuItem(复制(C) Ctrl+C); editMenuCut = new JMenuItem(剪切(T) Ctrl+X); editMenuPaste = new JMenuItem(粘贴(P) Ctrl+v); EMHandler EM=new EMHandler(); /创建监听器 editMenuCopy.addActionListener(EM);/注册监听器 editMenuCut.addActionListener(EM); editMenuPaste.addActionListener(EM); editMenu.add(editMenuCopy); editMenu.add(editMenuCut); editMenu.add(editMenuPaste); editMenu.setFont(f); /将菜单全部添加菜单棒里 mb.add(fileMenu); mb.add(editMenu); /弹出菜单的实现 pm =new JPopupMenu(); /创建弹出菜单 item1 = new JMenuItem(打开); item2 = new JMenuItem(保存); item3 = new JMenuItem(复制); item4 = new JMenuItem(剪切); item5 = new JMenuItem(粘贴); JPHandler JP=new JPHandler(); item1.addActionListener(JP); /注册菜单项的鼠标事件监听器 item2.addActionListener(JP); item3.addActionListener(JP); item4.addActionListener(JP); item5.addActionListener(JP); editor.addMouseListener(JP); /注册文本区的鼠标事件监听器 pm.add(item1); pm.add(item2); pm.add(item3); pm.add(item4); pm.add(item5); /把菜单栏、弹出菜单添加到内容面板 setJMenuBar(mb); /显示菜单栏 setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /自定义类实现文件菜单项的事件处理 private class JMHandler implements ActionListener public void actionPerformed(ActionEvent e) if(e.getSource()=fileMenuOpen) loadFile(); else if(e.getSource()=fileMenuSave) saveFile(); elseSystem.exit(0); public void loadFile() /打开文件方法 JFileChooser fc=new JFileChooser(); int r=fc.showOpenDialog(this); if(r=JFileChooser.APPROVE_OPTION) File file=fc.getSelectedFile(); try editor.read(new FileReader(file),null); catch(IOException e) public void saveFile() /保存文件的方法 JFileChooser fc=new JFileChooser(); int r=fc.showSaveDialog(this); if(r=JFileChooser.APPROVE_OPTION) File file=fc.getSelectedFile(); try editor.write(new FileWriter(file); catch(IOException e) /编辑菜单菜单项的事件处理 private class EMHandler implements ActionListener public void actionPerformed(ActionEvent e) if(e.getSource()=editMenuCopy) /实现复制功能 editor.copy(); editor.requestFocus(); else if(e.getSource()=editMenuCut)/实现剪切功能 editor.cut(); editor.requestFocus(); else /实现粘贴功能 editor.paste(); editor.requestFocus(); /自定义类实现弹出式菜单的事件处理 private class JPHandler implements ActionListener,MouseListener public void actionPerformed(ActionEvent e) if(e.getSource()=item1) loadFile(); /实现打开文件功能 else if(e.getSource()=item2) saveFile(); /实现保存文件功能 else if(e.getSource()=item3) /文件复制 editor.copy(); editor.requestFocus(); else if(e.getSource()=item4) /文件剪切 editor.cut(); editor.requestFocus(); else /文件粘贴 editor.paste(); editor.requestFocus(); public void mouseReleased(MouseEvent e) if(e.isPopupTrigger() /判断是否按下鼠标右键 pm.show(editor,e.getX(),e.getY(); /显示弹出式菜单 public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mousePressed(MouseEvent e) public static void main(String args) LX7_8 N=new LX7_8 (); (2)编译并运行程序,当用户按下框架中的按钮时,对话框将被显示出来。如图7.8图7.8(3)编写显示LX7_8.class的页面文件。(六)Java简单动画图形的实现。功能:实现一个简单动画,效果为一个球由小到大,从屏幕左侧滚动到右侧。(1)编写LX7_9.java 程序文件,源代码如下。import j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设计单位工程质量检查报告
- 2025购销合同标准范本
- 3人合作协议合同样本
- 公司制作合同标准文本
- 河道清淤专项施工方案
- 监理公司绩效考核管理办法
- 员工绩效考核管理办法
- 交通安全记心中主题班会教案
- 新文化运动参考教案
- 防触电安全教育教案
- 广州2025年广东广州海珠区新港街道第一批雇员招聘5人笔试历年参考题库附带答案详解
- 受限空间安全培训
- 2025届江苏省苏锡常镇四市高三下学期教学情况调(一)(一模)英语+答案
- 专题13 热学计算题(解析版)-2025年高考物理二轮热点题型归纳与变式演练(新高考用)
- (二模)苏北七市2025届高三第二次调研测试语文试卷(含答案)
- 商业地产租赁及运营管理手册
- 2025年(广东省协会 )房屋安全检测鉴定技术培训-机考历年真题考前冲刺题
- 儿童发展问题的咨询与辅导-案例1-5-国开-参考资料
- 安全生产法律法规汇编(2025版)
- 抗菌药物分级管理目录(完整资料).doc
- 基于语音信号去噪处理的FIR滤波器设计
评论
0/150
提交评论