




已阅读5页,还剩86页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
情境4产品库存管理系统的界面实现,bbb,*(456),学习情境描述,设计实现产品库存管理系统的用户登陆模块及主界面。,aaa,*(123),登录界面,主界面,所需知识,容器与组件;布局管理器;事件处理机制;常用Swing组件的使用;,重点及难点,事件处理机制;常用Swing组件的使用;,能力目标,培养学生图形用户界面设计和实现的技能、阅读代码的能力、程序调试能力,养成良好的编码风格培养学生英语阅读能力和技术创新能力培养学生的自学能力、知识的融会贯通能力和动手实践能力,了解图形用户界面,程序,用户,图形用户界面,多行文本框,图形用户界面的组成,组件,单选按钮,单行文本框,标签,复选按钮,按钮,组合框,窗口,面板,容器,组件与容器,图形用户界面,组件,图形化显示与用户交互放在容器内,容器,能容纳其他组件和容器一种组件,add()添加组件,remove()移除组件,GUI支持包,java.awt包,javax.swing包,提供了大量地进行GUI设计所使用的类和接口Java语言进行GUI程序设计的基础,由100%纯Java实现的,不依赖操作系统的支持使得Java的图形用户界面上了一个台阶,AWT概述,创建GUI,通过,java.awt包,容器,组件,布局管理器,字体,事件,图形和绘制方法,包含AWT容器组件,以图形表示的对象允许用户交互,创建并构造用于选择新字体的对象,用于用户和系统交互,AWT包含内容,使用AWT图形方法相对于窗口绘制图形,定义GUI组件的位置,AWT(重量级组件),awt包中主要类之间的关系,Java.lang.object,AWTEvent,Font,Component,Graphics,MenuComponent,布局管理器类,Container,Panel,Window,Applet,Frame,Swing概述,创建GUI,通过,Javax.swing包,Swing包含内容,容器,组件,可改变的外观,Java2D图形绘制,包含Swing组件,以图形表示的对象允许用户交互,使用Java2D绘制图形,可更换图形界面的风格,Swing(轻量级组件,纯Java组件),Swing的类层次结构,java.awt.Component,java.awt.Container,java.awt.Window,java.awt.Frame,javax.swing.JFrame,javax.Dialog,javax.swing.JDialog,javax.swing.JWindow,java.awt.Applet,javax.swing.JApplet,javax.swing.Box,javax.swing.JComponent,Swing组件是Container类的直接或间接子类。,任务1,创建具有以下特征的窗口:自定义窗口的标题;窗口的大小不可变。,标题,最大化按钮失效,创建图形用户界面的基本步骤,选择外观,布局管理器,保存内容,显示内容,控制用户输入,Swing外观的设置3-1,Swing采用MVC设计范式:即“模型-视图-控制”。,控制器,视图,模型,Swing外观的设置3-2,Swing采用可插入的外观感觉,使得程序在一个平台上运行时能够有不同的外观。,Metal外观,Motif外观,Windows外观,Swing外观的设置3-3,publicstaticvoidmain(Stringargs)/设定页面外观风格trycatch(ClassNotFoundExceptione)e.printStackTrace();catch(InstantiationExceptione)e.printStackTrace();catch(IllegalAccessExceptione)e.printStackTrace();catch(UnsupportedLookAndFeelExceptione)e.printStackTrace();,UIManager.setLookAndFeel(“com.sun.Java.swing.plaf.windows.WindowsLookAndFeel”);/Windows风格,UIManager.setLookAndFeel(“Javax.swing.plaf.metal.MetalLookAndFeel”);/Metal风格,UIManager.setLookAndFeel(com.sun.Java.swing.plaf.motif.MotifLookAndFeel);/Motif风格,UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName();/设定当前平台外观风格,Swing容器组件,主窗口,Swing应用程序,创建容器,设置容器大小(对框架及面板而言),设置容器可见度(对框架及面板而言),创建顶层容器,顶层容器(每个应用程序中至少有一个),内容面板,主要显示区域包含GUI中的可视组件,常用容器JFrame的使用,JFrame的使用2-1,向JFrame中添加组件的两种方式之一:,用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent),JFrame的使用2-2,向JFrame中添加组件的两种方式之二:,把组件添加到Jpanel之类的中间容器中,用setContentPane()方法把该容器置为JFrame的内容面板:JpanelcontentPane=newJpanel();/把其它组件添加到Jpanel中;frame.setContentPane(contentPane);,任务1:分析与实现,importjavax.swing.*;importjava.awt.*;classGUIDemo1staticvoidsetLocaleLookAndFeel()tryUIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(Exceptione)publicstaticvoidmain(Stringargs)GUIDemo1.setLocaleLookAndFeel();/选择外观风格JFramef=newJFrame(第一个Java窗口);/创建容器f.setSize(300,300);/设置容器大小f.setVisible(true);/设置容器可见性,任务2,实现如下图所示的图形用户界面。,布局管理器(LayoutManager),为了实现跨平台的特性并获得动态的布局效果,Java将容器内的所有组件安排给“布局管理器”负责管理。布局管理器管理当窗口移动或调整大小后组件如何变化等功能。容器可以通过选择不同的布局管理器来决定布局。setLayout()方法可以设置容器的布局管理器。,FlowLayout流式布局管理器,FlowLayout是JPanel的默认布局管理器,左,右,上,下,默认居中对齐,FlowLayout使用示例,importjava.awt.*;importjavax.swing.*;classFlowLayoutDemoextendsJFrameJButtonjb1,jb2,jb3,jb4,jb5;publicFlowLayoutDemo(Stringtitle)super(title);voidinit()Containerc=frame.getContentPane();jb1=newJButton(第一个按钮);jb2=newJButton(第二个按钮);jb3=newJButton(第三个按钮);jb4=newJButton(第四个按钮);jb5=newJButton(第五个按钮);c.setLayout(newFlowLayout();/设置布局管理器c.add(jb1);c.add(jb2);c.add(jb3);c.add(jb4);c.add(jb5);publicstaticvoidmain(Stringargs)FlowLayoutDemoflowlayout=newFlowLayoutDemo(FlowLayoutDemo);flowlayout.init();flowlayout.pack();flowlayout.setVisible(true);,BorderLayout边界布局管理器,North,East,West,South,Center,当容器大小变化时,组件的相对位置不变,大小发生变化,BorderLayout边界布局管理器,向BorderLayout布局的容器中添加组件时,可使用add(ComponentcompObj,Objectregion)方法。,组件对象,表示区域的静态常量,实战:实现前面BorderLayout示例界面。,BorderLayout边界布局管理器,思考:横向、纵向改变BorderLayout布局的容器大小,总结组件的变化规律。,GridLayout网格布局管理器,将容器的空间划分成若干行、列的网格,左,右,上,下,组件大小相同,Swing常用容器JPanel的使用,JPanel面板是一种可以添加到其他容器中使用的容器组件。,可用javax.swing.BorderFactory类中的方法获得,Swing常用组件的使用-JButton,JButton(按钮)是一个常用组件,可以显示文本或图标,点击时能够响应单击事件。,任务2:分析与实现2-1,设置了边界的JPanel面板作为内容面板,两个按钮添加到Jpanel面板中,任务2:分析与实现2-2,importjava.awt.*;importjavax.swing.*;classJPanelDemoextendsJPanelJButtonb1=newJButton(JPanel);JButtonb2=newJButton(Demo);publicJPanelDemo()setBackground(Color.white);add(b1);add(b2);publicstaticvoidmain(Stringargs)JPaneljp=newJPanelDemo();jp.setBorder(BorderFactory.createTitledBorder(Hello,Border);JFrameframe=newJFrame(JPanelDemo);frame.setSize(200,150);frame.setContentPane(jp);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);,任务3,设计实现一个简单的计算器界面,如下图所示。,容器的嵌套,一个包含了多个组件的容器本身可以作为一个组件加到另一个容器中去,容器中再添加容器,这样就形成了容器的嵌套。,一个Jpanel包含一个标签,一个Jpanel包含5个组件,Swing常用组件的使用-JLabel,JLabel(标签)是用户不能修改只能查看的文本/图像显示区域。,Swing常用组件的使用-JTextField,JTextField(单行文本域)是一个单行条形文本区,能够接收输入、显示输出。,Swing常用组件的使用-JPasswordField,JPasswordField(口令框)接受用户的输入,但不会真正显示出来,而是显示回显符。,JPasswordField实例,实战:实现上面的图形用户界面。,Swing常用组件的使用-JTextArea,JTextArea(多行文本框)可以输入或输出多行文本。,JTextArea的换行方式,任务3:分析与实现,importjava.awt.*;importjavax.swing.*;classCalculateextendsJFrameprivateJTextFieldtx1;privateJTextFieldtx2;privateJTextFieldtx3;privateJPanelp;publicCalculate(Stringtitle)super(title);voidinit()Containerc=this.getContentPane();JLabellab=newJLabel(计算器举例);JLabellabl=newJLabel(+);tx1=newJTextField(5);tx2=newJTextField(5);tx3=newJTextField(5);JButtonb=newJButton(=);,p=newJPanel();p.add(lab);p.add(tx1);p.add(labl);p.add(tx2);p.add(b);p.add(tx3);c.add(p);publicstaticvoidmain(Stringargs)Calculatecal=newCalculate(计算器);cal.init();cal.pack();cal.setVisible(true);,事件处理的实现,思考:观察前面任务中实现的用户界面,界面中的组件是否实现了与用户交互的功能?,NO!,必须进行事件处理,AWT事件处理机制三类主要对象,事件处理,事件,用户对界面操作,以类的形式出现,事件源,事件发生的场所,通常就是各个组件,事件处理者,接收事件并对其进行处理的对象,Event,EventSource,Eventhandler,AWT事件处理机制事件处理模型,组件(事件源),事件监听器,事件监听器注册,外部作用,生成事件对象,把事件对象传入事件监听器,事件对象,事件类和事件监听器,事件处理者(监听器)通常是一个类,负责处理一类事件该类如果要能够处理某种类型的事件,就必须实现与该事件类型相对应的接口每个事件类对应于一个事件监听器接口,AWT中常用事件类及事件监听器接口,事件处理的实现步骤,1.编写一个事件监听器类,实现与事件类XxxEvent相对应的XxxListener接口;,2.调用组件的addXxxListener方法,将监听器对象注册到GUI组件上。,事件处理举例,importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassTestJButtonextendsJFrameimplementsActionListenerJButtonb;publicTestJButton()b=newJButton(PressMe!);b.addActionListener(this);setLayout(newFlowLayout();add(b);publicstaticvoidmain(Stringargs)TestJButtonb=newTestJButton();b.setSize(200,100);b.setVisible(true);publicvoidactionPerformed(ActionEvente)System.out.println(Actionoccurred);,按钮b是事件源,向b注册一个事件监听器,重写监听器接口的方法,事件处理器,实现监听器接口,窗口关闭事件的实现,importjavax.swing.*;importjava.awt.event.*;publicclassWindowClosingpublicstaticvoidmain(Stringargs)JFrameframe=newJFrame();/设置用户关闭框架时的响应动作frame.addWindowListener(newQuitWindow())fframe.setSize(200,300);frame.show();/显示该框架,向主窗口注册窗口事件监听器,importjava.awt.*;importjavax.swing.*;importjava.awt.event.*classQuitWindowimplementsWindowListenerpublicvoidwindowClosing(WindowEvente)System.exit(0);publicvoidwindowOpened(WindowEvente)publicvoidwindowClosed(WindowEvente)publicvoidwindowIconified(WindowEvente)publicvoidwindowDeiconified(WindowEvente)publicvoidwindowActivated(WindowEvente)publicvoidwindowDeactivated(WindowEvente),必须实现接口中的所有方法,实战:查阅JDK文档,了解JButton组件对应的事件类型,为计算器界面中的按钮组件添加事件处理代码,实现加法功能。,鼠标点击,6,思考:使用事件监听器实现窗口关闭事件时,即便是我们不感兴趣的方法,也必须一一实现,增加了很多不必要的麻烦,有什么办法可以解决这个问题?,可以使用事件适配器解决这一问题,事件适配器,事件适配器,一些Listener接口有适配器(Adapter)类,可以通过继承事件所对应的Adapter类,重写需要方法,无关方法不用实现。,优点:提供了一种简单的实现监听器的手段,可以缩短程序代码,缺点:当需要多种监听器或此类已有父类时,无法采用适配器,事件适配器及其对应的事件监听器接口,实战:使用事件适配器实现窗口关闭事件。,内部类在事件处理中的应用,内部类的主要应用就是图形用户界面开发中的事件处理,publicclassWindowClosingpublicstaticvoidmain(Stringargs)JFrameframe=newJFrame();classQuitWindowextendsWindowAdapterpublicvoidwindowClosing(WindowEvente)System.exit(0);frame.addWindowListener(newQuitWindow();frame.setSize(200,300);frame.show();,实现窗口关闭事件,匿名类在事件处理中的应用,实现窗口关闭事件,publicclassWindowClosingpublicstaticvoidmain(Stringargs)JFrameframe=newJFrame();frame.addWindowListener(newWindowAdapter()publicvoidwindowClosing(WindowEvente)System.exit(0););frame.setSize(200,300);frame.show();,内部类只使用一次时,可以使用匿名类,进一步简化代码,其他Swing组件的使用,设计一个用来修改文字颜色和字形的界面,如下图所示。,任务4,复选按钮(JCheckBox),JCheckBox(复选按钮)有选中和未选中两种状态,允许用户从一组选项中进行多个选择。,JCheckBox的相关事件类,JCheckBox类的选择事件是ItemEvent可实现ItemListener接口的itemStateChanged()方法来处理事件用addItemListener()方法注册。,查阅JDK文档,学习ItemEvent类的常用方法。,单选按钮(JRadioButton),JRadioButton(单选按钮)通常是成组使用的,可以通过ButtonGroup类进行管理。,要保证三个JRadioButton的互斥性应该把这三个控件放到同一个ButtonGroup中,查阅JDK文档,学习JRadioButton类及ButtonGroup类的常用方法。,任务4:分析与实现,一个Jpanel包含一组复选按钮,一个Jpanel包含一组单选按钮,一个Jpanel包含一个标签,实战:独立完成任务4的实现。,任务5,完善计算器的功能,实现加、减、乘、除四种运算。,组合框(JComboBox),JComboBox(组合框)是一种“多选一”的组件,可编辑每项的内容,而且每项的内容可以是任意类。当用户选取组合框中的某一选择项时,可激发ItemEvent事件。,查阅JDK文档,学习JComboBox类的常用方法。,JComboBox使用示例,ItemEvent事件处理方式,创建组合框,设置选项内容为数组s中的元素,列表框(JList),JList(列表框)向用户显示一组选项,并且允许用户一次选择其中的一项或多项。,列表框,查阅JDK文档,学习JList类的常用方法及相关事件。,实战:独立完成任务5的实现。,任务6,设计实现如下图所示的表格形式的界面。,表格(JTable),JTable(表格)的主要功能是把数据以二维表格的形式显示出来。,JTable的使用,生成一个MyTableModel类型的对象来表示数据。用TableModel创建JTable对象。在JTable中添加滚动条面板。,创建JTable表格可按四步进行:,从AbstractTableModel类中继承得到,getColumnCount,getRowCount,getColumnName,getValueAt四个方法必须重写,任务6:分析与实现,要继承这个抽象类,必须实现的四个方法,用TableModel创建JTable,在JTable中添加滚动条面板,任务6:分析与实现,JTable的相关事件类,选中表格中的某行可以引发ListSelectionEvent事件。在事件处理之前,应通过setSelectionMode()方法设置选种模式。,设置选种模式,添加行选择事件,任务7,设计实现如下图所示的界面,要求拖动滚动条上的滑块,滑块指向的值显示在界面的相应位置处。,滚动条(JSlider),JSlider(滚动条)是一种可以在某一数值范围内进行值的线性调整的组件。,JSlider的相关事件类,当用户拖动滑块时,JSlider对象将产生一个ChangeEvent事件,此类事件是Swing包中提供的事件。,查阅JDK文档,学习ChangeEvent类的常用方法并了解Swing包中提供的事件类。,实战:独立完成任务7的分析与实现。,任务8,设计实现如下图所示的界面,要求点击下拉菜单项时窗口中输出相应的操作。,菜单,下拉式菜单主要由三部分组成:菜单条(JMenuBar)、菜单(JMenu)和菜单项(JMenuItem)。,创建菜单的步骤,publicclassMenuDemoextendsJFrameimplementsActionListenerJTextAreatf=newJTextArea();JMenuBarmbar=newJMenuBar();JMenumenu=newJMenu(文件);JMenuItemnewfile=newJMenuItem(新建);JMenuItemopen=newJMenuItem(打开);JMenuItemclose=newJMenuItem(关闭);JMenuItemquit=newJMenuItem(退出);publicMenuDemo()super(Menu实例);newfile.addActionListener(this);open.addActionListener(this);close.addActionListener(this);quit.addActionListener(this);menu.add(newfile);menu.add(open);menu.add(close);menu.addSeparator();menu.add(quit);,创建JMenuBar对象,创建JMenu对象,创建JMenuItem对象,添加事件处理,向菜单中添加菜单项,mbar.add(menu);setJMenuBar(mbar);getContentPane().add(tf);addWindowListener(newWindowAdapter()publicvoidwindowClosing(WindowEvente)System.exit(0););publicvoidactionPerformed(ActionEvente)if(e.getSource()=newfile)tf.setText(新建文件);if(e.getSource()=open)tf.setText(打开文件);if(e.getSource()=close)tf.setText(关闭文件);if(e.getSource()=quit)System.exit(0);publicstaticvoidmain(Stringargs)JFramef=newMenuDemo();f.setSize(200,200);f.setVisible(true);,添加菜单到菜单条中,添加菜单条到窗口中,对话框,对话框的分类,模式对话框,必须在用户处理完后才允许用户与主窗口继续进行交互,非模式对话框,允许用户同时在对话框和程序剩余部分中输入信息,Swing中提供的对话框,showMessageDialog:显示一条消息等待用户点击OK;showConfirmDialog:显示一条消息并等待确认;showOptionDialog:显示一条消息并等待用户在一组自定义选项中的选择;showInputDialog:显示一条消息并等待用户的输入。,对话框的使用,intselection=JOptionPane.showConfirmDialog(DialogFrame.this,/父窗口“Areyousure?”,/消息“Logout”,/对话框标题JOptionPane.OK_CANCEL_OPTION,/底部按钮类型JOptionPane.WARNING_MESSAGE);/消息类型,showMessageDialog、showInputDialog:只能有一组标准按钮,OK和OK/CANCELshowConfirmDialog:DEFAULT_OPTION,YES_NO_OPTION,YES_NO_CANCEL_OPTION,OK_CANCEL_OPTION四种按钮形式。,鼠标键盘事件,设计实现一个电子白
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境电商箱包服饰IP视觉设计趋势2025年预测报告
- 农业资源精准管理-洞察及研究
- 戏剧与电影、电视剧的比较研究-洞察及研究
- 客户关系修复中的创新营销策略-洞察及研究
- 城市厨余垃圾资源化利用路径-洞察及研究
- 2025至2030中国海洋安全急救箱行业发展研究与产业战略规划分析评估报告
- 医疗器械及设备采购合同
- 物业管理合同范本及常见纠纷处理
- 农业资源节约与环境保护协议
- 农业水产养殖资源共享协议
- 2025年工地安全员培训考试试题及答案
- 文明有礼+课件-2025-2026学年统编版道德与法治八年级上册
- 供水设备运行维护与保养技术方案
- 木雕工艺课件
- 2025年2个清单28个问题查摆整改措施
- 摩擦力影响因素实验报告范本
- 教育系统应急知识培训课件
- 基坑防护课件
- 2025年黑龙江省龙东地区中考英语真题含答案
- 医疗器械生产质量管理规范2025版
- 2025年医护人员法律法规知识考试题库及答案(一)
评论
0/150
提交评论