您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > JAVA图形用户界面设计与实现
图形用户界面的设计与实现教材第7章设计原则容器与布局标准组件事件处理自定义成分用户界面设计原则使用图形界面GUI(GraphicsUserInterface)字符界面—采用命令行方式与用户交互。图形界面—用多种媒体显示信息,用直观、方便的GUI标准组件来接收命令。控制权在用户(用户要由操作的主动权)界面与操作的风格一致性。宽容(容错)性。简洁与美观并重。界面构成容器标准组件用户自定义成分创建GUI各组成成分,并安排相互位置关系(包含,相邻,相交)。定义GUI各成分对不同事件的响应,实现与用户的交互与界面功能。界面元素容器是用来组织其他界面成分和元素的单元。可以形成容器的层次,构筑复杂结构Window(Frame、Applet、Dialog)组件是图形用户界面的基本单位,它里面不再包含其他的成分。GUI组件是图形用户界面标准化的结果。GUI组件的作用是完成与用户的交互。用户自定义成分文字、图形、图象…不能像标准组件一样被系统识别和承认,只起装饰作用。不能响应用户的动作,不具有交互功能。AWT包AbstractWindowsToolkit(抽象窗口工具)AWT类库中的各种操作是被定义为在一个并不存在的“抽象窗口”中进行的。抽取不同软硬件平台中所实现的窗口的公共特性。所设计的界面独立于具体的界面实现。提供与机器无关的基本GUI标准组件。选择类组件:单选按钮、复选框、下拉选单、列表框…文字处理类组件:标签、文本框、编辑框…命令类组件:按钮、工具栏、菜单…AWT类层次关系图ComponentContainerPanelAppletWindowFrameDialogButtonTextFieldTextAreaTextComponentCheckboxMenuComponentMenuMenuItemMenuBar其他组件独立不独立Component类可显示在屏幕上的图形对象,可与用户交互。方法:add(PopupMenupopup)加一弹出菜单addFocusListener(FocusListenerl)将发生在本组件上的事件注册给监听者,以进行事件处理。setSize(intwidth,intheight)设置组件尺寸paint(Graphicsg)重画组件setFont(Fontf)设置组件字体setBackground(Colorc)设置组件背景色setForeground(Colorc)设置组件前景色paint和repaint方法某组件的paint()和update()为系统自动调用的有关图形绘制的方法,不可人为编程调用;但可编程重新定义其操作内容。使用repaint()方法可以触发update()方法。paint()当某些操作破坏了显示,需重新绘制时第一次绘制repaint()编程控制1.擦除并填充成背景色update()调用2.调用paint()Font类java.awt.Font设计字体显示效果(创建字体对象)Fontfn=newFont(String字体,int风格,int字号);字体:TimesRoman,Courier,Arial等风格:三个常量Font.PLAIN,Font.BOLD,Font.ITALIC字号:字的大小(磅数)使用字体对象-如设置某组件当前使用的字体:setFont(Fontfn)获取组件当前使用的字体:getFont()Color类构造函数1(设置颜色)Colorc=newColor(intred,intgreen,intblue)范围:0~255newColor(200,200,200)newColor(255,0,100)构造函数2Colorc=newColor(intrgb)兰色:0~7位绿色:8~15位红色:16~23位颜色常量值publicstaticfinalColorblackColor.black,Color.blue,Color.gray,Color.redColor.white…Containers容器组件Window——不需要其他组件支撑,独立显示。FrameDialog–没有菜单条,不能改变大小Panel——必须放在Window组件中(或Web浏览器窗口)才能显示。它为一矩形区域,在其中可摆放其他组件,可以有自己的布局管理器。基本方法add(Componentcomp)将指定组件放到容器中add(Componentcomp,intindex)remove(Componentcomp)删除指定组件setLayout(LayoutManagermgr)设置容器布局paint画容器(及其上面的组件)容器的组件布局依靠布局管理器(layoutmanager)方式调用容器的setLayout方法,为容器指定某种布局管理器的一个对象。例:setLayout(newFlowLayout())该布局管理器对象负责确定容器中组件的位置和大小。当容器需要定位组件和确定组件大小时,就会给布局管理器对象发消息,让它完成该项工作。直接管理组件方式调用容器的setLayout(null)方法,关闭布局管理器。调用每一个组件的setLocation()方法决定组件位置。调用每一个组件的setSize()方法决定其大小。直接管理组件将失去平台无关性。布局管理器对象布局管理器种类FlowLayout:组件在一行中从左至右水平排列,排满后折行BorderLayout:北、南、东、西、中GridLayout:以行和列的网格形式安排组件GridBagLayout:更复杂、功能更强的网格布局CardLayout:每一个组件作为一个卡片,容器仅显示多个卡片中的某一个确定容器布局缺省的布局管理器Window、Frame、Dialog——BorderLayoutPanel、Applet——FlowLayout:选择布局管理器的方法建立布局管理器类的对象利用容器的setLayout为容器指定布局(即指定一个布局管理器的对象)例:将myFrame布局设定为FlowLayout类型myFrame.setLayout(newFlowLayout());FrameFrame(Stringtitle)构造一个新的不可见的frame隐含的布局管理器是:BorderLayoutsetLayout(…)设置新的布局管理器。add(Componentcomp)在容器上增加一个组件(在容器为不可见的状态时加)。voidsetSize(intwidth,intheight)setVisible(true)7-1aFrame—PanelFramefm1=newFrame(Hello);fm1.setSize(400,350);fm1.setBackground(Color.gray);fm1.setLayout(null);Panelpn1=newPanel();pn1.setSize(100,100);pn1.setBackground(Color.red);pn1.setLocation(0,50);fm1.add(pn1);…fm1.setVisible(true);7-1bFlowLayout布局管理器构造函数:FlowLayout();FlowLayout(intalign,inthgap,intvgap);align:对齐方式:LEFTCENTERRIGHThgap:组件水平间距(象素)vgap:组件垂直间距(象素)无参数的构造函数创建的FlowLayout对象,其对齐方式为CENTER居中方式,组件间的横纵间距都为5个像素。FlowLayout布局管理器Framef=newFrame(FlowLayout);f.setSize(400,300);//不起作用f.setBackground(Color.gray);f.setLayout(newFlowLayout(FlowLayout.LEFT,10,20));b1=newButton(button1);b2=newButton(button2);b3=newButton(button3);f.add(b1);f.add(b2);f.add(b3);f.setVisible(true);f.pack();7-1cBorderLayout布局管理器setLayout(newBorderLayout())add(b1,BorderLayout.NORTH);当容器大小改变,组件相对位置不会改变。CenterNorthSouthWestEastBorderLayout布局管理器f=newFrame(BorderLayout);f.setSize(200,200);b1=newButton(button1);…b5=newButton(button5);f.add(b1,BorderLayout.NORTH);f.add(b2,BorderLayout.SOUTH);f.add(b3,BorderLayout.WEST);f.add(b4,BorderLayout.EAST);f.add(b5,BorderLayout.CENTER);f.setVisible(true);7-1dBorder-PanelclassMyFrameextendsFrame{MyFrame(){Buttonb1=newButton(1);Buttonb2=newButton(2);Buttonb3=newButton(3);Buttonb4=newButton(4);Panelp=newPanel();p.add(b1);p.add(b2);add(p,BorderLayout.NORTH);add(b3,BorderLayout.WEST);add(b4,BorderLayout.CENTER);pack();setVisible(true);7-1eGridLayout布局管理器创建GridLayout对象作为布局编辑器,指定划分网格的行数和列数(网格大小一样)。setLayout(newGridLayout(行数,列数));setLayout(newGridLayout(行数,列数,行间隔,列间隔));调用容器的方法add()将组件加入容器,组件填入容器的顺序将按照第一行第一个格中、第一行第二个格中、……每个网格中都必须填入组件,如果希望某个网格为空白,可以为它加入一个空的标签:add(newLabel());GridLayout布局管理器f=newFrame(GridLayout);f.setLayout(newGridLayout(2,3));f.setSize(200,100);f.setBackground(Color.gray);b1=newButton(1);…b6=newButton(6);f.add(b1);…f.setVisible(true);7-1f布局例Framefm=newFrame()fm.setLayout(newFlowLayout());tf=newTextField(22);fm.add(tf);Panelp1=newPanel();p1.setLayout(newGridLayout(4,3));p1.add(…);Panelp2=newPanel();p2.setLayout(newGridLayout(4,3));p2.add(…);fm.add(p1);fm.add(p2);7-2布局GridBagLayout布局管理器每个GridBagLayout对象维护一个动态矩形网格,每个组件可占据一个或多个单元作为它的显示区域。每一个组件都与一个GridBagConstraints类的实例相连,以指定在显示区域中如何摆放,并可确定大小。步骤:setLayout(newGridBagLayout());GridBagConstraintsgbc=newGri
本文标题:JAVA图形用户界面设计与实现
链接地址:https://www.777doc.com/doc-4962833 .html