您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 10-GUI编程在界面上排列组件并响应用户输入
《Java程序设计》重庆交大207:21上一章内容回顾9.GUI编程:使用Swing和创建Swing界面创建GUI应用程序创建界面开发框架创建组件将组件加入到容器中使用组件图标、标签、文本框、文本区域、可滚动窗格复选框和单选按钮、组合框、列表Swing的特性标准对话框、滑块、可滚动窗格、工具栏进度条、菜单、选项卡窗格307:2110.GUI编程:在界面上排列组件并响应用户输入10.1基本的界面布局布置界面、顺序布局—FlowLayout、方框布局—BoxLayout网格布局—GridLayout、边框布局—BorderLayout10.2Java的事件处理10.2.1Java的事件处理机制10.2.2事件监听器10.2.3将事件监听器添加到组件10.2.4事件处理方法10.3使用方法行为事件—实现接口ActionListener、焦点事件—实现接口FocusListener选项事件—实现接口ItemListener、键盘事件—实现接口KeyListener鼠标事件—实现接口MouseListener、鼠标移动事件—MouseMotionListener窗口事件—实现接口WindowListener10.4Graphics2D类10.5绘制文本10.6颜色10.7绘制直线和多边形407:2110.1基本的界面布局在Java中,要设置界面的格式,必须使用一组被称为布局管理器(Layoutmanager)的类。本章将首先介绍如何使用布局管理器来排列界面上的组件。您将利用Java用户界面功能的灵活性,这些功能可用于很多支持Java的平台。当一种布局无法满足需要时,可以将多个布局管理器用于同一个界面。507:2110.1基本的界面布局10.1.1布置界面布局管理器决定了组件被加入到容器中时将被如何排列。面板的默认布局管理器是FlowLayout类。这个类按该组件加入到容器的顺序从左向右依次排列。第一行排满后,则从第二行开始,继续按从左到右的顺序排列。Java提供了一系列通用的布局管理器:FlowLayout、GridLayout、BorderLayout、CardLayout和GridBagLayout。要创建布局管理器,首先需要调用布局管理器的构造函数,如下例所示:FlowLayoutflo=newFlowLayout();创建布局管理器后,要将其用作容器的布局管理器,可调用容器的方法setLayout()。将组件加入到容器前,必须设置容器的布局管理器。如果没有指定布局管理器,将使用容器的默认布局:对于面板,默认为FlowLayout;对于框架,默认为BorderLayout。607:2110.1基本的界面布局10.1.1布置界面第9章的程序都没有指定布局管理器。如果没有指定布局管理器,将使用容器的默认布局:对于面板,默认为FlowLayout;对于框架,默认为BorderLayout。【练习及思考】:组件可以直接放到框架上,因此可以修改程序chapter09\ButtonFrame.java,将3个命令按钮直接放到框架上、而不是先放到面板上再将面板添加到框架上,看一下效果是怎样的。为什么没有达到预期的效果?注意面板和框架默认的布局管理器是不一样的。707:2110.1基本的界面布局10.1.1布置界面下面的语句位于框架的开头,它使用一个布局管理器来控制加入到框架的组件的排列方式:设置布局管理器后,便可以向它管理的容器中加入组件。对诸如FlowLayout等布局管理器而言,组件的加入顺序非常重要。有关这方面的内容,将在后面讨论各种布局管理器时介绍。importjava.awt.*;importjavax.swing.*;publicclassStarterextendsJFrame{publicStarter(){super(ExampleFrame);FlowLayoutmanager=newFlowLayout();setLayout(manager);//addcomponentshere}}807:2110.1基本的界面布局10.1.2顺序布局—FlowLayout类FlowLayout是最简单的布局管理器,位于java.awt包中。它排列组件的方式与排列英语单词的方式相同。从左到右排列,到达行尾后,进入下一行开头。默认情况下,如果调用构造函数FlowLayout()时没有提供任何参数,每行的组件将居中排列。要让组件右对齐或左对齐,可将类变量FlowLayout.LEFT或FlowLayout.RIGHT作为唯一的参数传递给构造函数,如下面的语句所示:FlowLayoutrighty=newFlowLayout(FlowLayout.RIGHT);类变量FlowLayout.CENTER用于将组件居中。907:2110.1基本的界面布局10.1.2顺序布局—FlowLayout顺序布局管理器FlowLayout使用默认的水平间距(5像素)和垂直间距(5像素)。可以在调用构造函数FlowLayout()时,提供其他的参数来修改水平间距和垂直间距;也可以调用顺序布局管理器的方法setVgap(int)和setHgap(int)并指定所需的水平间距和垂直间距。构造函数FlowLayout(int,int,int)接受如下3个参数。对齐方式必须是FlowLayout的5个类变量之一——CENTER、LEFT、RIGHT、LEADING或TRAILING。组件间的水平间距,单位为像素。组件间的垂直间距,单位为像素。下面的构造函数创建了一个顺序布局管理器,它将组件居中,组件间的水平间距为30像素,垂直间距为10像素。FlowLayoutflo=newFlowLayout(FlowLayout.CENTER,30,10);1007:2110.1基本的界面布局10.1.2顺序布局—FlowLayout以下程序清单所示的应用程序Alphabet使用顺序布局管理器排列了6个按钮。由于调用构造函数FlowLayout()时将类变量FlowLayout.LEFT作为参数,因此从应用程序窗口的左边界开始排列这些组件。程序清单:chapter10\Alphabet.java。【注意】拖动窗口边界,组件将重新排列。1107:2110.1基本的界面布局10.1.3方框布局—BoxLayout方框布局(boxlayout)管理器将组件从左到右或从上到下排列,它是由javax.swing包中的BoxLayout类表示的,对顺序布局做了改进——不管容器的大小如何变化,组件总是排列成一行或一列。(运行后面的Stacker程序,改变框架大小观察效果)使用构造函数创建方框布局管理器时,必须提供两个参数:它将管理的容器和指定水平还是垂直排列的类变量。排列方式是使用BoxLayout的类变量指定的:X_AXIS表示按从左到右的顺序水平排列;Y_AXIS表示按从上到下的顺序垂直排列。下面的代码指定面板采用垂直方框布局:JPaneloptionPane=newJPanel();BoxLayoutbox=newBoxLayout(optionPane,BoxLayout.Y_AXIS);optionPane.setLayout(box);1207:2110.1基本的界面布局10.1.3方框布局—BoxLayout加入到容器中的组件将按指定方式排列,并以最合适的大小显示。水平排列时,方框布局管理器将试图让每个组件的高度相同;垂直排列时,则试图让每个组件的宽度相同。以下程序清单所示的应用程序Stacker包含一个面板,面板中的按钮以方框布局的方式排列。程序清单:chapter10\Stacker.java。1307:2110.1基本的界面布局10.1.4网格布局—GridLayout网格布局管理器将组件放置到由行和列组成的网格中,就像在包含整年的日历中放置日期。首先,组件被加入到网格的第一行,并从最左边的单元格开始,依次向右排列。第一行的单元格排满后,接下来的组件将加入到第二行最左边的单元格中(如果有第二行的话),并依次类推。网格布局是使用类GridLayout创建的,这个类位于java.awt包中。调用构造函数GridLayout时,提供两个参数:网格的行数和列数。下面的语句创建一个10行3列的网格布局管理器:GridLayoutgr=newGridLayout(10,3);1407:2110.1基本的界面布局10.1.4网格布局—GridLayout与顺序布局一样,可提供另外两个参数以指定组件间的垂直间距和水平间臣,还可调用方法setHgap()和setVgap()来设置这些间距。下面的语句创建一个10行3列的网格布局,并将水平间距和垂直间距分别设置为5像素和8像素:GridLayoutgr2=newGridLayout(10,3,5,8);默认情况下,网格布局组件间的垂直间距和水平间距都为0。下面的程序清单所示的应用程序Bunch创建了一个3行3列的网格,并将组件间的水平间距和垂直间距都设置为10像素。程序清单:chapter10\Bunch.java。1507:2110.1基本的界面布局10.1.5边框布局—BorderLayout前面介绍的布局管理器相当简单,接下来介绍边框布局(borderlayout),它使用的布局更复杂。这种布局是使用java.awt包中的BorderLayout类创建的,它将容器分成5部分:北、南、东、西和中央。下图说明了这5个部分是如何排列的。1607:2110.1基本的界面布局10.1.5边框布局—BorderLayout在边框布局中,位于4个罗盘方位的组件将根据需要占据相应的空间,余下的空间属于中央区域。通常,这样的结果是,中央是一个大组件,四周是4个小组件。这种布局管理器不根据最佳大小设置组件的尺寸。要创建边框布局,可使用构造函数BorderLayout()或BorderLayout(int,int)。在第一个构造函数创建的边框布局中,组件间的间距为零,而第二个构造函数使用参数指定了水平间距和垂直间距。另外,还可使用setYgap()和setHgap()来设置这些间距。1707:2110.1基本的界面布局10.1.5边框布局—BorderLayout创建边框布局并将其指定为容器的布局管理器后,便可以调用方法add()将组件添加到容器中,但该方法的调用方式与前面介绍的有所不同:add(Component,String)其中,第一个参数是要加入到容器中的组件。第二个参数是BorderLayout的一个类变量,指定将组件加入到边框布局的哪个区域。可用来指定该参数的类变量包括NORTH、SOUTH、EAST、WEST和CENTER。默认为CENTER。1807:2110.1基本的界面布局10.1.5边框布局—BorderLayout下面的语句将一个名为quitButton的按钮加入到边框布局的NORTH区域:JButtonquitButton=newJButton(quit);add(quitButton,BorderLayout.NORTH);下图所示的GUI是由以下程序请单所示的应用程序Border生成的。程序清单:chapter10\Border.java。运行Border应用程序时,窗口变大时,中央的组件将相应地增大,而其他组件的大小保持不变。这是网格布局管理器和边框布局管理器的优点之一。1907:2110.1基本的界面布局10.1.5边框布局—BorderLayout【练习及思考】在BorderLayout布局中,东西南北中每个位置只能放置一个组件?如果要在东西南北中某个区域放置多个组件,该怎么办?2007:2110.2Java的事件处理10.2.1Java的事件处理机制如果用户在Java程序的图形用户界面(GUl)上什么都不能做,这样的界面将用处不大。要让程序充分发挥其作用,必须让界面能够接收用户
本文标题:10-GUI编程在界面上排列组件并响应用户输入
链接地址:https://www.777doc.com/doc-3055133 .html