




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章程序界面设计
本章提要◆用户界面类型◆常用界面元素的使用◆常用图形元素的使用
第3章程序界面设计
本章提要用户界面是系统提供给外界的用户接口,通过这一接口,我们可以对系统进行操作,指挥系统按照某种流程运行。在诸如银行业务、飞机售票等这些业务中,每天都会有大量的事务处理。我们必须为办事人员提供操作方便,美观大方的操作界面。例如,银行办事人员的帐号操作界面,应将各种输入框合理布局在界面中;为飞机票售票员提供的查询航班的界面,应以列表的形式显示航班次数,等等。良好的用户界面将使得软件更加人性化,如应易于展现功能,且对于用户而言是必要的。引子:软件的用户界面重要吗?引子:软件的用户界面重要吗?JAVA教程第3章(程序界面设计)课件本章知识要点用户界面的类型Java中提供的GUI组件类SWING高级组件图形绘制声音文件处理本章知识要点用户界面的类型任务1设计产品信息处理界面
问题分析
知识学习用户界面的类型Java中提供的GUI组件类任务实施执行效果任务1设计产品信息处理界面问题分析执行效果问题分析任务描述:编写一个程序,能够实现产品信息处理界面步骤分析:了解Java程序用户界面类型构建图形用户界面的方法常用组件设计产品信息处理界面,分析需要什么组件,及大小,形状编写代码编译执行问题分析任务描述:知识学习——用户界面类型用户界面分为两类:字符用户界面(CUI)图形用户界面(GUI)知识学习——用户界面类型用户界面分为两类:知识学习——AWT和SWING
AWT和SWING是Java设计GUI用户界面的基础。AWT为重量级组件,Swing则大部分是轻量级组件。AWT是Swing的基础,而基于图形化用户界面发展需要,采用纯Java实现了轻量级先进的组件,更为美观易用,且无本地代码,从而不依赖本地操作系统(AWT会因操作系统不同,出现不同显示效果)。但有一些类是Swing无法代替的,实现用户界面时,可选择Swing绘制界面上的元素,而将AWT用于界面布局、图形绘制、字体设置、事件处理等。进行界面元素的绘制时,不要混用AWT、Swing。知识学习——AWT和SWINGAWT和SWING是知识学习——AWT和SWING
AWT:在Java1.0版本中,图形元素包括在java.awt包中。Java的AWT包定义了窗口系统所显示的各种对象,既包括组织窗口屏幕元素所需的基本类,也包括图形处理,显示所需的基本类。java.awtjava.awt.EventColorFontImageFlowLayout,CardLayout,BorderLayout,GridBagLayoutGraphicsComponent知识学习——AWT和SWINGAWT:java.awtja知识学习——AWT和SWING
AWT:ComponenetButtonWindowPanelContainerChoiceListLabelTextAreaTextFieldDialogFrame知识学习——AWT和SWINGAWT:Componenet知识学习——AWT和SWING
SWING是原先AWT的扩充。它加入了广泛的、可完全移植的、类和库的集合。JFC作为Java平台的一部分,它有丰富的组件集合,这些都是完全平台独立的。Javax.swing.*知识学习——AWT和SWINGSWING是原先AWT的扩充组件类描述JFrame扩展了java.awt.Frame的外部窗体类JAppletjava.applet.Applet类的扩展JButton能显示文本和图形的按钮类JCheckBox能显示文本和图形的复选框类JComboBox带下拉列表的文本框类JDialogSwing对话框的基类,扩展了AWT的Dialog类JLable可显示文本和图标的标签类JList显示选项列表的组件类JOptionPane显示标准的对话框类JPasswordField文本框类的扩展,使得输入的内容不可见JPanel通用容器类JRadioButton单选按钮类JTable表格类JTextArea用于输入多行文本的文本框类JTextField单行文本框类知识学习——AWT和SWING
组件类描述JFrame扩展了java.awt.Frame的外知识学习——图形用户界面组成容器框架JFrame面板JPanel容器面板JPanel组件文本框JText姓名组件标签JLabel提交组件按钮JButtonl男女组件单选JRadioButton用户界面组成蓝球组件复选JCheckBox知识学习——图形用户界面组成容器面板JPanel容器组件姓名JFrame类:框架(JFrame)是带标题的顶层窗口从类的层次上来看,它是Frame类的扩展,属于Container类。JFrame类的构造方法有两种: JFramemyFrame=newJFrame();//不带标题的窗体 JFramemyFrame=newJFrame(“MyFrame”);//带标题的窗体知识学习——SWINGJFrame类:框架(JFrame)是带标题的顶层窗口知识例子: //创建窗体对象frame frame=newJFrame("HelloJava"); //创建一文本标签 label=newJLabel("HelloJava"); //初始化容器frame Containerc=frame.getContentPane()//将文本标签添加到窗体(容器)上c.add(label); //设置窗口的大小 frame.setSize(300,300);//设置窗口的可见性 frame.setVisible(true);
案例JFrameDemo.java例子:案例JFrameDemo.javaJPanel类:JPanel类是一个大家会经常使用的容器类,被称为面板。一般情况下,我们把所有的组件加入到面板,然后将面板加入到框架。
例子 :
JFrameframe=newJFrame("JPanalDemo"); JButtonb1=newJButton("Button1"); //创建panel对象 JPanelpanel=newJPanel(); //将按钮添加到面板 panel.add(b1); //将面板添加到框架窗口 frame.getContentPane().add(panel); frame.setSize(300,300);frame.setVisible(true);
案例JPanelDemo.java知识学习——SWINGJPanel类:JPanel类是一个大家会经常使用的容器类有了面板,就可以将很多不同的窗体页面做成不同的panel,那么在这种情况下,可以随时加载不同的panel达到页面转换的效果。例子:
//从框架中移除panel1,加载panel2 frame.remove(panel1); frame.getContentPane().add(panel2); frame.setVisible(true); frame.setSize(300,300);知识学习——SWING有了面板,就可以将很多不同的窗体页面做成不同的panel,那标签:标签是用来在用户界面中显示静态的文本。用JLabel类来创建一个标签控件。JLabellabel=newJLabel(“label”);文本字段:用JTextField类来创建一个输入框控件。getText()方法来得到文本输入框中的内容setText()来设置文本输入框中的内容
知识学习——SWING案例JComponentDemo.java标签:标签是用来在用户界面中显示静态的文本。知识学习——S列表框和组合框
JList(列表框)和JComboBox(组合框)类都属于多值控件,它允许用户在其所给的列表中进行选择。列表框语法: String[]city={"北京","上海","广州","西安"}; JListlistCity=newJList(city);组合框语法: String[]city={"北京","上海","广州","西安"};
JComboBoxcomboObj=newJComboBox(city);知识学习——SWING案例JComponentDemo.java列表框和组合框知识学习——SWING案例JComponen知识学习——SWING方法功能ObjectgetSelectedValue()返回选中项的值,null表未选。若允许选多项,则返回第一项的值。intgetSelectedIndex()返回选中项的索引号,若未选中任何项,则返回-1。若允许选择多项,则返回选中的第一项索引。Object[]getSelectedValues()返回选中项的值的数组。int[]getSelectedIndices()返回选中项的索引的数组。intgetMinSelectionIndex()在需要选中多项时使用,返回最小索引号。intgetMaxSelectionIndex()在需要选中多项时使用,返回最大索引号。voidsetVisibleRowCount(intcount)用于设置列表框中可见元素的数量。booleanisSelectedIndex(intindex)判断该索引所对应选项是否被选中booleanisSelectionEmpty()判断是否选择了,没有选择则返回truevoidsetListData(Object[]listData)设置数组为列表对象的数据源voidsetListData(VectorlistData)设置Vector对象(可变长数组)为列表对象的数据源列表框常用方法知识学习——SWING方法功能ObjectgetSelec方法功能voidaddItem(Objectitem)增加选项到组合框ObjectgetItemAt(intindex)得到指定索引的选项intgetItemCount()得到组合框中的选项个数ObjectgetSelectedItem()得到选中项的值,若未选中任何值,则返回null。intgetSelectedIndex()得到选中的索引号,若未选中,则返回null。voidsetMaximumRowCount(intcount)设置显示在下拉框的元素个数。组合框常用方法知识学习——SWING方法功能voidaddItem(Objectitem)增复选和单选按钮:复选按钮是通过JCheckBox来实现,单选按钮通过JRadioButton来实现。JCheckBox语法: JCheckBoxmusic; music=newJCheckBox(“音乐”);JRadioButton语法: JRadioButtongrade,high; grade=newJRadioButton(“小学”); high=newJRadioButton(“中学”);知识学习——SWING案例JComponentDemo.java复选和单选按钮:复选按钮是通过JCheckBox来实现,单选按钮组语法:ButtonGroupbuttonGroup; buttonGroup=newButtonGroup(); buttonGroup.add(grade); buttonGroup.add(high);知识学习——SWING按钮组语法:知识学习——SWING消息对话框:
JOptionPane类能够定制出好几种不同的消息对话框:普通的消息对话框出错对话框警告对话框询问对话框等等。知识学习——SWING消息对话框:JOptionPane类能够定制出好几种不同的JOptionPane.showMessageDialog(null,"alert","alert",JOptionPane.ERROR_MESSAGE);
参数1:指定该对话框的父容器对象,如果没有可以指定为null,通常可以指定为已有的frame对象。参数2:指定了对话框中显示的信息。参数3:指定了对话框任务栏的标题。参数4:指定了对话框显示的样式。知识学习——SWINGJOptionPane.showMessageDialog(JOptionPane.showConfirmDialog(null,"chooseone","chooseone",JOptionPane.YES_NO_OPTION);参数1:指定该对话框的父容器对象,如果没有可以指定为null,通常可以指定为已有的frame对象。参数2:指定了对话框中显示的信息。参数3:指定了对话框任务栏的标题。参数4:指定显示在对话框上面的按钮集。知识学习——SWINGJOptionPane.showConfirmDialog(JOptionPane.showInputDialog("Pleaseinputavalue");
函数中参数是用来在输入对话框中显示的提示内容。
知识学习——SWING案例JComponentDemo.javaJOptionPane.showInputDialog("P设计产品信息处理界面根据要添入什么数据,什么样的图形元素用户会操作更简单的两个原则进行思考。从产品的具体资料中可以得知:每一个信息都是要求用户进行输入的,所以对于这种情况,只需要将相应的信息对应一个文本输入框。对于每一个文本框前应该有相应提示,提示用户输入什么数据,所以要为每一个信息对应加入一个标签。然后再加入一个确定和一个取消按钮。实现步骤确定图形元素作为类属性确定图形元素的大小确定框架窗口的标题任务实施设计产品信息处理界面任务实施确定图形元素作为类属性
属性图形元素属性图形元素labelProductNoJLabeltextProductNoJTextFieldlabelProductNameJLabeltextProductNameJTextFieldlabelProductClassJLabeltextProductClassJTextFieldlabelProductTypeJLabeltextProductTypeJTextFieldlabelProductNumberJLabeltextProductNumberJTextFieldlabelMinNumberJLabeltextMinNumberJTextFieldlabelProductPriceJLabeltextProductPriceJTextFieldlabelProductAreaJLabeltextProductAreaJTextFieldlabelSupplierIDJLabeltextSupplierCompanyJTextFieldlabelProductDescriptJLabeltextProductDescriptJTextFieldLabelTitleJLabelframeJFramepanelJPanelcmdSubmitJButtoncmdCancelJButton
确定图形元素作为类属性属性图形元素属性图形元素labelP确定图形元素的大小
属性图形元素大小textProductNoJTextField5个字符textProductNameJTextField10个字符textProductClass
JTextField10个字符textProductTypeJTextField10个字符textProductNumberJTextField10个字符textMinNumberJTextField10个字符textProductPriceJTextField10个字符textProductAreaJTextField20个字符textSupplierCompanyJTextField20个字符textProductDescriptJTextField40个字符确定框架窗口的标题和大小框架窗口的标题为“产品资料录入”;窗口大小为500*500像素编写代码编译执行确定图形元素的大小属性图形元素大小textProductN模仿例子,设计供应商录入界面,要求性别字段采用选择方式录入,所在区域的范围为广东、北京、上海、湖南、广西、湖北、江西,该怎么设计我们的用户界面。
动手练习40分钟模仿例子,设计供应商录入界面,要求性别字段采用选择方式录入,拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
菜单组件类拓展1——SWING高级组件菜单组件类拓展1——SWING高级组件
JMenuJMenuBarJMenuItemJToolBarJPopupMenu菜单组件案例JMenuDemo.javaJPopupMenu.java拓展1——SWING高级组件JMenuJMenuBarJM拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
表格组件JTable:显示多行/列数据的表格列名数据记录案例JTableDemo.java拓展1——SWING高级组件表格组件JTable:显示多行拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
JTree组件树提供了用树型结构分层显示数据的视图。树中有一根结点,所有其它结点为其子结点,每个结点表示一个数据项。
案例JTreeDemo.java拓展1——SWING高级组件JTree组件案例JTreeD拓展1——SWING高级组件
SystemTray意为桌面的系统托盘,在Windows下表现为任务状态栏的一个图标,在很多的应用中都有体现,如及时通讯软件(MSN、),监控类软件(杀毒软件)等。在Java6的java.awt包下提供了SystemTray和TrayIcon类,这两个类可以实现系统托盘功能。实现的流程:捕获关闭窗口事件、隐藏窗口、显示托盘图标,鼠标右击托盘图标、显示弹出菜单(自动)、选择菜单的显示窗口项,再显示窗口、隐藏托盘图标。
案例SystemTrayDemo.java?拓展1——SWING高级组件SystemTray意为桌面的拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
文件选择组件
JFileChooser,利用该组件可实现打开/保存指定文件案例JFileChooserDemo.java?拓展1——SWING高级组件文件选择组件
JFileCho任务2合理优化产品信息处理界面
问题分析
知识学习布局管理器任务实施执行效果任务2合理优化产品信息处理界面问题分析执行效果问题分析任务描述:编写一个程序,能够实现产品信息处理界面优化步骤分析:了解Java中布局类型常用布局管理器的应用方法按照产品信息处理界面设计,选择合理的布局进行优化编写代码编译执行问题分析任务描述:布局管理是决定容器中组件的大小和位置的过程。布局管理器(LayoutManager)负责管理容器中组件的布局。它指明了容器中构件的位置和尺寸大小。(由java.awt包提供)FlowLayout:流布局管理器BorderLayout:边界布局管理器GridLayout:格子布局管理器CardLayout:卡片布局管理器GridBagLayout:GridBag布局管理器知识学习——布局管理器布局管理是决定容器中组件的大小和位置的过程。知识学习——布局知识学习——布局管理器知识学习——布局管理器FlowLayout类是流布局管理器类,它是缺省布局管理器。流布局管理器可以自动依据窗口的大小,将组件由左到右、由上到下的顺序来排列。FlowLayout构造方法如下所示:FlowLayout()FlowLayout(intalign)FlowLayout(int
align,int
hgap,int
vgap)知识学习——布局管理器FlowLayout类是流布局管理器类,它是缺省布局管理器。例子:importjava.awt.*;importjavax.swing.*;publicclassSampleLayout{ ……… publicSampleLayout() { frame=newJFrame("SampleLayout"); //创建流布局管理器
f1=newFlowLayout(FlowLayout.LEFT); JPanelp1=newJPanel(); frame.getContentPane().add(p1); //容器p1使用流布局管理器 p1.setLayout(f1); ………… }}例子:BorderLayout:边界布局管理器可以让我们按东、西、南、北、中的方位来布置组件。BorderLayout类有以下构造函数:BorderLayout():创建边界布局管理器。BorderLayout(int
hgap,int
vgap):创建边界布局管理器,并指定控件的垂直与水平间隔。
知识学习——布局管理器BorderLayout:边界布局管理器可以让我们按东、西、例子:importjava.awt.*;importjavax.swing.*;publicclassSampleLayout2{ publicSampleLayout2() { JFrameframe=newJFrame("SampleLayout2"); JPanelpanel=newJPanel();
panel.setLayout(newBorderLayout()); panel.add(newJButton("North"),BorderLayout.NORTH); panel.add(newJButton("South"),BorderLayout.SOUTH); panel.add(newJButton("East"),BorderLayout.EAST); panel.add(newJButton("West"),BorderLayout.WEST); panel.add(newJButton("Center"),BorderLayout.CENTER); ……….. } }例子:BorderLayout管理器布局图BorderLayout管理器布局图GridLayout:格子布局管理器把显示区域编组为矩形格子组,然后将控件依次放入每个格子中,从左到右,自顶向下地放置。GridLayout类有以下构造函数:GridLayout(introws,intcols)
GridLayout(introws,intcols,inthgap,intvgap)
知识学习——布局管理器GridLayout:格子布局管理器把显示区域编组为矩形格子例子:importjava.awt.*;importjavax.swing.*;publicclassSampleLayout3{ publicSampleLayout3() { JFrameframe=newJFrame("SampleLayout3"); JPanelpanel=newJPanel();
panel.setLayout(newGridLayout(3,2));
panel.add(newJButton("1")); panel.add(newJButton("2")); panel.add(newJButton("3")); panel.add(newJButton("4")); panel.add(newJButton("5")); panel.add(newJButton("6")); ………… }
}例子:GridLayout管理器布局图GridLayout管理器布局图CardLayout卡片布局管理器是一个比较复杂的布局管理器。用这个管理器,可以使得容器象一个卡片盒,而容器中的页面象卡片盒中的卡片一样任意翻动显示。CardLayout布局管理器有以下构造函数:CardLayout():创建一卡片布局管理器CardLayout(int
hgap,int
vgap):创建一卡片布局管理器,并指定左右边距和上下边距。
知识学习——布局管理器CardLayout卡片布局管理器是一个比较复杂的布局管理器为了使得卡片能在容器中一个一个的显示,CardLayout类提供了以下方法:方法描述first(Containerparent)显示第一张卡片last(Containerparent)显示最后一张卡片next(Containerparent)显示下一张卡片previous(Containerparent)显示上一张卡片show(Containerparent,Stringname)显示指定名称的卡片为了使得卡片能在容器中一个一个的显示,CardLayout类例子://使用卡片布局管理
cardLayout=newCardLayout(); panel1.setLayout(cardLayout); panel1.add("card1",panel3); panel1.add("card2",panel4); panel1.add("card3",panel5); panel1.add("card4",panel6);例子:例子://当按下按钮的时候会触发这个方法 publicvoidactionPerformed(ActionEventevt) { Objectobj=evt.getSource(); if(obj==button1) { cardLayout.first(panel1); } if(obj==button2) { cardLayout.next(panel1); } if(obj==button3) { cardLayout.previous(panel1); } if(obj==button4) { cardLayout.last(panel1); } }例子:cardLayout管理器布局图案例CardDemo.javacardLayout管理器布局图案例CardDemo.jaGridBag:布局管理器为AWT提供的最灵活、最复杂的布局管理器。GridBagConstraints类来保存位置信息。使用GridBagLayout类提供的setConstraints()方法将GridBagConstraints类对象绑定到相应组件上。实现布局的方法用GridBagConstraints类的属性设置方位信息利用GridBagLayout类提供的setConstraints()方法将方位信息绑定到某组件上将组件加到某容器中知识学习——布局管理器GridBag:布局管理器为AWT提供的最灵活、最复杂的布局例子:案例GradBagDemo.java例子:案例GradBagDemo.javafill属性:可以用来确定如何在它的显示区域内显示组件。
有效值描述GridBagConstraints.NONE按组件的缺省高度和宽度填充GridBagConstraints.HORIZONTAL在不改变高度的情况下,填满水平方向的显示区域GridBagConstraints.VERTICAL在不改变宽度的情况下,填满垂直方向的显示区域GridBagConstraints.BOTH填满整个显示区域知识学习——布局管理器fill属性:可以用来确定如何在它的显示区域内显示组件。有Weightx、weighty属性
weightx属性确定此组件是否要拉长,以水平地填入显示区。缺省值均为0(不拉长),另一效值为1(拉长)。weighty属性确定此组件是否垂直拉长填入显示区。有效值相同。知识学习——布局管理器Weightx、weighty属性知识学习——布局管理器gridwidth、weightx属性gridwidth属性指出组件显示区域中列的数目。这些属性的缺省值为1。设置为GridBagConstraints.REMAINDER,表明该组件后面不能再摆放其他组件,或者说如果要继续摆放组件的话,只能在下一行摆放。设置为GridBagConstraints.RELATIVE表明可以在后面继续摆放组件。gridheight属性指出组件显示区域中行的数目。知识学习——布局管理器gridwidth、weightx属性知识学习——布局管理anchor属性当组件小于其显示区域时使用该属性,为在显示区域内确定放置组件的位置。其有效值为:GridBagConstraints.CENTER(default)GridBagConstraints.NORTHGridBagConstraints.NORTHEASTGridBagConstraints.EASTGridBagConstraints.SOUTHEASTGridBagConstraints.SOUTHGridBagConstraints.SOUTHWESTGridBagConstraints.WESTGridBagConstraints.NORTHWEST知识学习——布局管理器anchor属性知识学习——布局管理器gridx,gridy属性属性gridx和gridy分别指出放置组件的长方形网格的行与列的数目。长方形网格最左面列为gridx=0,最高顶部为gridy=0。相当于X,Y坐标。
知识学习——布局管理器gridx,gridy属性知识学习——布局管理器设计产品信息处理界面布局要求产品信息的内容靠左对齐选择GridBag布局管理器实现步骤确定图形元素位置使用GridBag实现界面布局任务实施设计产品信息处理界面布局任务实施模仿例子,合理优化供应商录入界面,要求靠左对齐,按钮在右下方。
动手练习40分钟模仿例子,合理优化供应商录入界面,要求靠左对齐,按钮在右下方任务3美化产品信息处理界面
问题分析
知识学习Java2D绘图机制常用类和包文本处理图像处理播放音频任务实施执行效果任务3美化产品信息处理界面问题分析执行效果问题分析任务描述:编写一个程序,能够达到产品信息处理界面美化要求步骤分析:了解Java2D绘图机制设置字体,加载图片的方法按照产品信息处理界面设计,选择图片,字体进行界面美化编写代码编译执行问题分析任务描述:绘图界面AWT中的Canvas组件,用于创建画布SWING中则可直接在顶层窗体,如JFrame,JApplet,或者JPanel进行绘制绘图坐标知识学习——Java2D绘图机制(0,0)X轴Y轴+x+y(x,y)屏幕左上角单位:像素pix绘图界面知识学习——Java2D绘图机制(0,0)X轴Y轴+绘图机制每个Java组件都有一个与之相关的图形环境,即图形上下文,java.awt.Graphic类是图形上下文的抽象基类,用于管理图形上下文,绘制图形(如线条、矩形等)的像素;允许应用程序将图形绘制到组件上或空闲屏幕的映像中java.awt.Graphic类是抽象类,应用时需要创建其子类,以实现绘图功能知识学习——Java2D绘图机制绘图机制知识学习——Java2D绘图机制知识学习——Java2D绘图机制方法名描述drawString(Stringtest,intx,inty)在规定位置打印字符串drawLine(intx1,inty1,intx2,inty2)画线drawRect(intx1,inty1,intwidth,intheight)画长方形fillRect(intx1,inty1,intwidth,intheight)画填充的长方形drawOval(intx1,inty1,intwidth,intheight)画椭圆形fillOval(intx1,inty1,intwidth,intheight)画填充的椭圆java.awt.Graphic类中的方法知识学习——Java2D绘图机制方法名描述drawStrin绘图相关类(颜色类Color):Java中的颜色是RGB值来设定,R、G、B分别是红、绿、蓝三种颜色的色量,三种色量组合构建多种颜色,java.awt.Color定义了一些标准颜色,以及操作颜色的方法知识学习——Java2D绘图机制绘图相关类(颜色类Color):Java中的颜色是RGB值绘图相关类(字体类Font):Java中的字体控制类为java.awt.Font,定义字体名、字号、风格,字体度量类java.awt.FontMetrics,封装了字高、宽等数据,每个图形上下文中都包含一个Font和FontMetrics对象字体类构造函数:Font(Stringname,intstyle,intsize)字体名:Monospaced,SansSerif,Serif,Dialog,DialogInput字体风格:PLAIN(普通),BOLD(粗体),ITALIC(斜体)知识学习——Java2D绘图机制绘图相关类(字体类Font):Java中的字体控制类为ja小结GUI元素大致分为两类:容器类和非容器类。Java1.0版本中,用户界面用AWT(抽象窗口工具箱)创建。用AWT创建的用户界面在不同的操作平台上有不同的表现。Java基础类是原先AWT的扩充。它加入了广泛的、可完全移植的、类和库的集合。它所包含的主要包之一是javax.swing包。javax.swing包提供了用户接口组件(如:窗口、对话框、按钮、复选框、列表框、菜单、滚动条、文本输入框)类的集合。
小结GUI元素大致分为两类:容器类和非容器类。第3章程序界面设计
本章提要◆用户界面类型◆常用界面元素的使用◆常用图形元素的使用
第3章程序界面设计
本章提要用户界面是系统提供给外界的用户接口,通过这一接口,我们可以对系统进行操作,指挥系统按照某种流程运行。在诸如银行业务、飞机售票等这些业务中,每天都会有大量的事务处理。我们必须为办事人员提供操作方便,美观大方的操作界面。例如,银行办事人员的帐号操作界面,应将各种输入框合理布局在界面中;为飞机票售票员提供的查询航班的界面,应以列表的形式显示航班次数,等等。良好的用户界面将使得软件更加人性化,如应易于展现功能,且对于用户而言是必要的。引子:软件的用户界面重要吗?引子:软件的用户界面重要吗?JAVA教程第3章(程序界面设计)课件本章知识要点用户界面的类型Java中提供的GUI组件类SWING高级组件图形绘制声音文件处理本章知识要点用户界面的类型任务1设计产品信息处理界面
问题分析
知识学习用户界面的类型Java中提供的GUI组件类任务实施执行效果任务1设计产品信息处理界面问题分析执行效果问题分析任务描述:编写一个程序,能够实现产品信息处理界面步骤分析:了解Java程序用户界面类型构建图形用户界面的方法常用组件设计产品信息处理界面,分析需要什么组件,及大小,形状编写代码编译执行问题分析任务描述:知识学习——用户界面类型用户界面分为两类:字符用户界面(CUI)图形用户界面(GUI)知识学习——用户界面类型用户界面分为两类:知识学习——AWT和SWING
AWT和SWING是Java设计GUI用户界面的基础。AWT为重量级组件,Swing则大部分是轻量级组件。AWT是Swing的基础,而基于图形化用户界面发展需要,采用纯Java实现了轻量级先进的组件,更为美观易用,且无本地代码,从而不依赖本地操作系统(AWT会因操作系统不同,出现不同显示效果)。但有一些类是Swing无法代替的,实现用户界面时,可选择Swing绘制界面上的元素,而将AWT用于界面布局、图形绘制、字体设置、事件处理等。进行界面元素的绘制时,不要混用AWT、Swing。知识学习——AWT和SWINGAWT和SWING是知识学习——AWT和SWING
AWT:在Java1.0版本中,图形元素包括在java.awt包中。Java的AWT包定义了窗口系统所显示的各种对象,既包括组织窗口屏幕元素所需的基本类,也包括图形处理,显示所需的基本类。java.awtjava.awt.EventColorFontImageFlowLayout,CardLayout,BorderLayout,GridBagLayoutGraphicsComponent知识学习——AWT和SWINGAWT:java.awtja知识学习——AWT和SWING
AWT:ComponenetButtonWindowPanelContainerChoiceListLabelTextAreaTextFieldDialogFrame知识学习——AWT和SWINGAWT:Componenet知识学习——AWT和SWING
SWING是原先AWT的扩充。它加入了广泛的、可完全移植的、类和库的集合。JFC作为Java平台的一部分,它有丰富的组件集合,这些都是完全平台独立的。Javax.swing.*知识学习——AWT和SWINGSWING是原先AWT的扩充组件类描述JFrame扩展了java.awt.Frame的外部窗体类JAppletjava.applet.Applet类的扩展JButton能显示文本和图形的按钮类JCheckBox能显示文本和图形的复选框类JComboBox带下拉列表的文本框类JDialogSwing对话框的基类,扩展了AWT的Dialog类JLable可显示文本和图标的标签类JList显示选项列表的组件类JOptionPane显示标准的对话框类JPasswordField文本框类的扩展,使得输入的内容不可见JPanel通用容器类JRadioButton单选按钮类JTable表格类JTextArea用于输入多行文本的文本框类JTextField单行文本框类知识学习——AWT和SWING
组件类描述JFrame扩展了java.awt.Frame的外知识学习——图形用户界面组成容器框架JFrame面板JPanel容器面板JPanel组件文本框JText姓名组件标签JLabel提交组件按钮JButtonl男女组件单选JRadioButton用户界面组成蓝球组件复选JCheckBox知识学习——图形用户界面组成容器面板JPanel容器组件姓名JFrame类:框架(JFrame)是带标题的顶层窗口从类的层次上来看,它是Frame类的扩展,属于Container类。JFrame类的构造方法有两种: JFramemyFrame=newJFrame();//不带标题的窗体 JFramemyFrame=newJFrame(“MyFrame”);//带标题的窗体知识学习——SWINGJFrame类:框架(JFrame)是带标题的顶层窗口知识例子: //创建窗体对象frame frame=newJFrame("HelloJava"); //创建一文本标签 label=newJLabel("HelloJava"); //初始化容器frame Containerc=frame.getContentPane()//将文本标签添加到窗体(容器)上c.add(label); //设置窗口的大小 frame.setSize(300,300);//设置窗口的可见性 frame.setVisible(true);
案例JFrameDemo.java例子:案例JFrameDemo.javaJPanel类:JPanel类是一个大家会经常使用的容器类,被称为面板。一般情况下,我们把所有的组件加入到面板,然后将面板加入到框架。
例子 :
JFrameframe=newJFrame("JPanalDemo"); JButtonb1=newJButton("Button1"); //创建panel对象 JPanelpanel=newJPanel(); //将按钮添加到面板 panel.add(b1); //将面板添加到框架窗口 frame.getContentPane().add(panel); frame.setSize(300,300);frame.setVisible(true);
案例JPanelDemo.java知识学习——SWINGJPanel类:JPanel类是一个大家会经常使用的容器类有了面板,就可以将很多不同的窗体页面做成不同的panel,那么在这种情况下,可以随时加载不同的panel达到页面转换的效果。例子:
//从框架中移除panel1,加载panel2 frame.remove(panel1); frame.getContentPane().add(panel2); frame.setVisible(true); frame.setSize(300,300);知识学习——SWING有了面板,就可以将很多不同的窗体页面做成不同的panel,那标签:标签是用来在用户界面中显示静态的文本。用JLabel类来创建一个标签控件。JLabellabel=newJLabel(“label”);文本字段:用JTextField类来创建一个输入框控件。getText()方法来得到文本输入框中的内容setText()来设置文本输入框中的内容
知识学习——SWING案例JComponentDemo.java标签:标签是用来在用户界面中显示静态的文本。知识学习——S列表框和组合框
JList(列表框)和JComboBox(组合框)类都属于多值控件,它允许用户在其所给的列表中进行选择。列表框语法: String[]city={"北京","上海","广州","西安"}; JListlistCity=newJList(city);组合框语法: String[]city={"北京","上海","广州","西安"};
JComboBoxcomboObj=newJComboBox(city);知识学习——SWING案例JComponentDemo.java列表框和组合框知识学习——SWING案例JComponen知识学习——SWING方法功能ObjectgetSelectedValue()返回选中项的值,null表未选。若允许选多项,则返回第一项的值。intgetSelectedIndex()返回选中项的索引号,若未选中任何项,则返回-1。若允许选择多项,则返回选中的第一项索引。Object[]getSelectedValues()返回选中项的值的数组。int[]getSelectedIndices()返回选中项的索引的数组。intgetMinSelectionIndex()在需要选中多项时使用,返回最小索引号。intgetMaxSelectionIndex()在需要选中多项时使用,返回最大索引号。voidsetVisibleRowCount(intcount)用于设置列表框中可见元素的数量。booleanisSelectedIndex(intindex)判断该索引所对应选项是否被选中booleanisSelectionEmpty()判断是否选择了,没有选择则返回truevoidsetListData(Object[]listData)设置数组为列表对象的数据源voidsetListData(VectorlistData)设置Vector对象(可变长数组)为列表对象的数据源列表框常用方法知识学习——SWING方法功能ObjectgetSelec方法功能voidaddItem(Objectitem)增加选项到组合框ObjectgetItemAt(intindex)得到指定索引的选项intgetItemCount()得到组合框中的选项个数ObjectgetSelectedItem()得到选中项的值,若未选中任何值,则返回null。intgetSelectedIndex()得到选中的索引号,若未选中,则返回null。voidsetMaximumRowCount(intcount)设置显示在下拉框的元素个数。组合框常用方法知识学习——SWING方法功能voidaddItem(Objectitem)增复选和单选按钮:复选按钮是通过JCheckBox来实现,单选按钮通过JRadioButton来实现。JCheckBox语法: JCheckBoxmusic; music=newJCheckBox(“音乐”);JRadioButton语法: JRadioButtongrade,high; grade=newJRadioButton(“小学”); high=newJRadioButton(“中学”);知识学习——SWING案例JComponentDemo.java复选和单选按钮:复选按钮是通过JCheckBox来实现,单选按钮组语法:ButtonGroupbuttonGroup; buttonGroup=newButtonGroup(); buttonGroup.add(grade); buttonGroup.add(high);知识学习——SWING按钮组语法:知识学习——SWING消息对话框:
JOptionPane类能够定制出好几种不同的消息对话框:普通的消息对话框出错对话框警告对话框询问对话框等等。知识学习——SWING消息对话框:JOptionPane类能够定制出好几种不同的JOptionPane.showMessageDialog(null,"alert","alert",JOptionPane.ERROR_MESSAGE);
参数1:指定该对话框的父容器对象,如果没有可以指定为null,通常可以指定为已有的frame对象。参数2:指定了对话框中显示的信息。参数3:指定了对话框任务栏的标题。参数4:指定了对话框显示的样式。知识学习——SWINGJOptionPane.showMessageDialog(JOptionPane.showConfirmDialog(null,"chooseone","chooseone",JOptionPane.YES_NO_OPTION);参数1:指定该对话框的父容器对象,如果没有可以指定为null,通常可以指定为已有的frame对象。参数2:指定了对话框中显示的信息。参数3:指定了对话框任务栏的标题。参数4:指定显示在对话框上面的按钮集。知识学习——SWINGJOptionPane.showConfirmDialog(JOptionPane.showInputDialog("Pleaseinputavalue");
函数中参数是用来在输入对话框中显示的提示内容。
知识学习——SWING案例JComponentDemo.javaJOptionPane.showInputDialog("P设计产品信息处理界面根据要添入什么数据,什么样的图形元素用户会操作更简单的两个原则进行思考。从产品的具体资料中可以得知:每一个信息都是要求用户进行输入的,所以对于这种情况,只需要将相应的信息对应一个文本输入框。对于每一个文本框前应该有相应提示,提示用户输入什么数据,所以要为每一个信息对应加入一个标签。然后再加入一个确定和一个取消按钮。实现步骤确定图形元素作为类属性确定图形元素的大小确定框架窗口的标题任务实施设计产品信息处理界面任务实施确定图形元素作为类属性
属性图形元素属性图形元素labelProductNoJLabeltextProductNoJTextFieldlabelProductNameJLabeltextProductNameJTextFieldlabelProductClassJLabeltextProductClassJTextFieldlabelProductTypeJLabeltextProductTypeJTextFieldlabelProductNumberJLabeltextProductNumberJTextFieldlabelMinNumberJLabeltextMinNumberJTextFieldlabelProductPriceJLabeltextProductPriceJTextFieldlabelProductAreaJLabeltextProductAreaJTextFieldlabelSupplierIDJLabeltextSupplierCompanyJTextFieldlabelProductDescriptJLabeltextProductDescriptJTextFieldLabelTitleJLabelframeJFramepanelJPanelcmdSubmitJButtoncmdCancelJButton
确定图形元素作为类属性属性图形元素属性图形元素labelP确定图形元素的大小
属性图形元素大小textProductNoJTextField5个字符textProductNameJTextField10个字符textProductClass
JTextField10个字符textProductTypeJTextField10个字符textProductNumberJTextField10个字符textMinNumberJTextField10个字符textProductPriceJTextField10个字符textProductAreaJTextField20个字符textSupplierCompanyJTextField20个字符textProductDescriptJTextField40个字符确定框架窗口的标题和大小框架窗口的标题为“产品资料录入”;窗口大小为500*500像素编写代码编译执行确定图形元素的大小属性图形元素大小textProductN模仿例子,设计供应商录入界面,要求性别字段采用选择方式录入,所在区域的范围为广东、北京、上海、湖南、广西、湖北、江西,该怎么设计我们的用户界面。
动手练习40分钟模仿例子,设计供应商录入界面,要求性别字段采用选择方式录入,拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
菜单组件类拓展1——SWING高级组件菜单组件类拓展1——SWING高级组件
JMenuJMenuBarJMenuItemJToolBarJPopupMenu菜单组件案例JMenuDemo.javaJPopupMenu.java拓展1——SWING高级组件JMenuJMenuBarJM拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
表格组件JTable:显示多行/列数据的表格列名数据记录案例JTableDemo.java拓展1——SWING高级组件表格组件JTable:显示多行拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
JTree组件树提供了用树型结构分层显示数据的视图。树中有一根结点,所有其它结点为其子结点,每个结点表示一个数据项。
案例JTreeDemo.java拓展1——SWING高级组件JTree组件案例JTreeD拓展1——SWING高级组件
SystemTray意为桌面的系统托盘,在Windows下表现为任务状态栏的一个图标,在很多的应用中都有体现,如及时通讯软件(MSN、),监控类软件(杀毒软件)等。在Java6的java.awt包下提供了SystemTray和TrayIcon类,这两个类可以实现系统托盘功能。实现的流程:捕获关闭窗口事件、隐藏窗口、显示托盘图标,鼠标右击托盘图标、显示弹出菜单(自动)、选择菜单的显示窗口项,再显示窗口、隐藏托盘图标。
案例SystemTrayDemo.java?拓展1——SWING高级组件SystemTray意为桌面的拓展1——SWING高级组件
用菜单组件显示下拉式菜单项用表格组件显示数据记录用树组件显示分级列表用文件选择器选择文件拓展1——SWING高级组件用菜单组件显示下拉式菜单项拓展1——SWING高级组件
文件选择组件
JFileChooser,利用该组件可实现打开/保存指定文件案例JFileChooserDemo.java?拓展1——SWING高级组件文件选择组件
JFileCho任务2合理优化产品信息处理界面
问题分析
知识学习布局管理器任务实施执行效果任务2合理优化产品信息处理界面问题分析执行效果问题分析任务描述:编写一个程序,能够实现产品信息处理界面优化步骤分析:了解Java中布局类型常用布局管理器的应用方法按照产品信息处理界面设计,选择合理的布局进行优化编写代码编译执行问题分析任务描述:布局管理是决定容器中组件的大小和位置的过程。布局管理器(LayoutManager)负责管理容器中组件的布局。它指明了容器中构件的位置和尺寸大小。(由java.awt包提供)FlowLayout:流布局管理器BorderLayout:边界布局管理器GridLayout:格子布局管理器CardLayout:卡片布局管理器GridBagLayout:GridBag布局管理器知识学习——布局管理器布局管理是决定容器中组件的大小和位置的过程。知识学习——布局知识学习——布局管理器知识学习——布局管理器FlowLayout类是流布局管理器类,它是缺省布局管理器。流布局管理器可以自动依据窗口的大小,将组件由左到右、由上到下的顺序来排列。FlowLayout构造方法如下所示:FlowLayout()FlowLayout(intalign)FlowLayout(int
align,int
hgap,int
vgap)知识学习——布局管理器FlowLayout类是流布局管理器类,它是缺省布局管理器。例子:importjava.awt.*;importjavax.swing.*;publicclassSampleLayout{ ……… publicSampleLayout() { frame=newJFrame("SampleLayout"); //创建流布局管理器
f1=newFlowLayout(FlowLayout.LEFT); JPanelp1=newJPanel(); frame.getContentPane().add(p1); //容器p1使用流布局管理器 p1.setLayout(f1); ………… }}例子:BorderLayout:边界布局管理器可以让我们按东、西、南、北、中的方位来布置组件。BorderLayout类有以下构造函数:BorderLayout():创建边界布局管理器。BorderLayout(int
hgap,int
vgap):创建边界布局管理器,并指定控件的垂直与水平间隔。
知识学习——布局管理器BorderLayout:边界布局管理器可以让我们按东、西、例子:importjava.awt.*;importjavax.swing.*;publicclassSampleLayout2{ publicSampleLayout2() { JFrameframe=newJFrame("SampleLayout2"); JPanelpanel=newJPanel();
panel.setLayout(newBorderLayout()); panel.add(newJButton("North"),BorderLayout.NORTH); panel.add(newJButton("South"),BorderLayout.SOUTH); panel.add(newJButton("East"),BorderLayout.EAST); panel.add(newJButton("West"),BorderLayout.WEST); panel.add(newJButton("Center"),BorderLayout.CENTER); ……….. } }例子:BorderLayout管理器布局图BorderLayout管理器布局图GridLayout:格子布局管理器把显示区域编组为矩形格子组,然后将控件依次放入每个格子中,从左到右,自顶向下地放置。GridLayout类有以下构造函数:GridLayout(introws,intcols)
GridLayout(introws,intcols,inthgap,intvgap)
知识学习——布局管理器GridLayout:格子布局管理器把显示区域编组为矩形格子例子:importjava.awt.*;importjavax.swing.*;publicclassSampleLayout3{ publicSampleLayout3() { JFrameframe=newJFrame("SampleLayout3"); JPanelpanel=newJPanel();
panel.setLayout(newGridLayout(3,2));
panel.add(newJButton("1")); panel.add(newJButton("2")); panel.add(newJButton("3")); panel.add(newJButton("4")); panel.add(newJButton("5")); panel.add(newJButton("6")); ………… }
}例子:GridLayout管理器布局图GridLayout管理器布局图CardLayout卡片布局管理器是一个比较复杂的布局管理器。用这个管理器,可以使得容器象一个卡片盒,而容器中的页面象卡片盒中的卡片一样任意翻动显示。CardLayout布局管理器有以下构造函数:CardLayout():创建一卡片布局管理器CardLayout(int
hgap,int
vgap):创建一卡片布局管理器,并指定左右边距和上下边距。
知识学习——布局管理器CardLayout卡片布局管理器是一个比较复杂的布局管理器为了使得卡片能在容器中一个一个的显示,CardLayout类提供了以下方法:方法描述first(Containerparent)显示第一张卡片last(Containerparent)显示最后一张卡片next(Containerpare
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论