java 中swing结构与布局管理器.ppt_第1页
java 中swing结构与布局管理器.ppt_第2页
java 中swing结构与布局管理器.ppt_第3页
java 中swing结构与布局管理器.ppt_第4页
java 中swing结构与布局管理器.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十二讲 Swing结构与布局管理器 2 目标 了解Swing的结构了解SwingGUI的容器掌握Jframe和Jpanel的使用掌握用户界面组件的使用方法掌握常用Swing布局管理器的使用 3 Swing介绍 Java1 2发布了SwingGUI组件库 Swing类被放在javax swing包及其子包中 在Java2平台上 Swing已经成为核心层次的一部分 不再是扩展了 但javax的名字被保留了下来 尽管Swing独立于AWT 但它并没有完全取代AWT Swing只是提供了更好的用户界面组件而已 Swing组件除了AbstractButton类之外都以J开头 4 Swing结构 Object Component JFrame Container Window Frame Dialog JDialog JText JComboBox JLabel JList JMenuBar JOptionPane JPanel JScrollBar AbstractButton JToggleButton JMenuItem JButton JCheckBox JRadioButton JComponent JMenu 5 Swing中的容器 Swing中的容器有两类 顶级容器 中间容器顶级容器一般是一个顶层窗口 框架 中间容器需要包含在顶层容器中使用的容器 6 顶级容器 JFrame 用于框架窗口的类 此窗口带有边框 标题 用于关闭和最小化窗口的图标等 带GUI的应用程序通常至少使用一个框架窗口 JDialog 用于对话框的类 JApplet 用于使用Swing组件的JavaApplet的类 7 中间容器 JPanel 面板 它是最灵活 最常用的中间容器 JScrollPane 与JPanel类似 但还可在大的组件或可扩展组件周围提供滚动条 JTabbedPane 包含多个组件 但一次只显示一个组件 用户可在组件之间方便地切换 JToolBar 按行或列排列一组组件 通常是按钮 8 SwingGUI框架 你好 世界 菜单栏 顶级容器 GUI组件 GUI组件 内容窗格 9 基本的Swing应用程序 importjavax swing publicclassHelloSwing publicstaticvoidmain String args JFrameframe newJFrame HelloSwing JLabellabel newJLabel 你好 Swing frame getContentPane add label frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame setSize 300 200 frame setVisible true 导入必要的包 一般还需导入importjava awt importjava awt event 设置一个顶级容器 创建一个Swing组件 将组件添加到容器内容窗格 实现了在单击 关闭 按钮时 可以关闭窗口 10 框架JFrame 是放置其他Swing组件的顶级容器JFrame组件用于在Swing程序中创建顶层窗口它的构造函数 JFrame JFrame StringTitle 默认情况下 框架的尺寸是没有实际意义的0X0像素 为了设定合适的框架大小 要调用框架的setSize方法默认情况下 框架在建立时是不可见的 为了显示框架 要调用框架的show 方法默认情况下 当用户关闭一个框架时 该框架会隐藏起来 程序不会终止 11 创建一个空框架 importjavax swing publicclassFirstFrame publicstaticvoidmain String args SimpleFrameframe newSimpleFrame 设置用户关闭框架时的响应动作frame setDefaultCloseOperation JFrame EXIT ON CLOSE 显示该框架frame show classSimpleFrameextendsJFrame publicSimpleFrame 设置框架大小setSize WIDTH HEIGHT publicstaticfinalintWIDTH 300 publicstaticfinalintHEIGHT 200 运行结果 12 JFrame类的继承层次 13 改变框架的外观 Jframe类本身只有几个改变框架外观的类 但通过继承 从不同的超类中继承来很多用于处理框架大小和位置的方法 对于框架外观的操作比较重要的方法如下 setSize 设置窗口的大小 Component类 setIconImage 窗口最小化 在Java中称为图标化 时 把一个Image对象用作图标 Frame类 setTitle 设置窗口中标题栏的文字 Frame类 setResizable 设置用户是否可以改变框架大小 Frame类 dispose 关闭窗口 并回收该窗口的所有资源 Window类 setLocation 设置组件的位置 Component类 setBounds 重新设置组件大小和位置 Component类 show 显示窗口 使窗口可见 Window类 14 得到屏幕大小 对于一个专业应用程序来说 你应该检查用户屏幕的分辨率 并且根据它来编写代码来重新设置框架大小使用下面的步骤 可以得到屏幕的大小 1 调用Toolkit类的static方法getDefaultToolkit得到一个Toolkit对象 Toolkitkit Toolkit getDefaultToolkit 2 调用Toolkit对象的getScreenSize方法把屏幕尺寸作为一个Dimension对象返回 Dimensionscreensize kit getScreenSize 3 从对象的实例变量width和height中获得屏幕的宽度和高度 intscreenWidth screensize width intscreenHeight screensize height Toolkit类是一个工具类 包含很多和本地窗口系统打交道的方法 如果想使用图标 因为图像表现是和系统相关的 所以需要使用来装入图像 Imageimg kit getImage icon gif Dimension类封装了一个组件的宽度和高度信息 把它们保存在实例变量width和height中 15 框架外观设置示例 FrameSizeSet javaimportjava awt importjavax swing publicclassFrameSizeSet publicstaticvoidmain String args FrameSizeframe newFrameSize frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame show classFrameSizeextendsJFrame publicFrameSize 设置标题setTitle 框架尺寸 获得屏幕的相关尺寸Toolkittk Toolkit getDefaultToolkit DimensionscreenSize tk getScreenSize intscreenHeight screenSize height intscreenWidth screenSize width 设置框架的尺寸 大小不可调setSize screenWidth 3 screenHeight 3 setResizable false 设置图标Imageimg tk getImage icon gif setIconImage img 图标 标题 最大化按钮失效 16 在框架中绘制信息 JFrame的结构相当复杂 JFrame中包含了四个窗格 RootPane LayeredPane GlassPane和ContentPane 如果需要将一些图形元素加入到框架中 我们需要在面板组件 JPanel 中进行绘制 然后将该面板组件加入到框架的内容窗格 ContentPane 中 相应的代码如下 得到JFrame的内容窗格对象ContainercontentPane frame getContentPane Componentc 将组件加入到内容窗格中contentPane add c 17 面板Jpanel2 1 Jpanel类具有两个有用的特性 本身是一个中间容器 能够容纳按钮 滚动条 文本框等用户界面元素有一个能够在上面进行绘制的表面 用来画文本和图形为了能在面板中进行绘制 你需要 定义一个继承Jpanel的新类覆盖paintComponent方法classMyPanelextendsJpanel publicvoidpaintComponent Graphicsg super paintComponent g 相关的绘制代码 18 面板Jpanel2 2 paintComponent方法实际上定义在Jcomponent类中 该方法有一个Graphics类型的参数 Graphics对象存储了一个用于绘制图形和文本的设置集合 如字体和当前颜色 Java中所有的绘制都必须使用Graphics对象 该对象拥有绘制图形和文本的方法 paintComponent方法是自动执行的 当窗口需要被重新绘制时 如用户缩放窗口 或还原已最小化的窗口时 系统就会自动调用该方法 在框架中显示 绘制 文本信息的方法 g drawString text x y 注意 坐标原点 0 0 在屏幕 或组件 的左上角 坐标单位是像素 19 在框架中显示信息示例 HelloWorldimportjavax swing importjava awt publicclassHelloWorld publicstaticvoidmain String args TextFrameframe newTextFrame frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame show classTextFrameextendsJFrame publicTextFrame setTitle HelloWorld setSize WIDTH HEIGHT 将panel加入到frameTextPanelpanel newTextPanel ContainercontentPane getContentPane contentPane add panel publicstaticfinalintWIDTH 300 publicstaticfinalintHEIGHT 200 classTextPanelextendsJPanel publicvoidpaintComponent Graphicsg super paintComponent g 固定写法 确保超类完成自己的那份工作g drawString Hello World x y 显示文本 publicintx 100 publicinty 100 20 向框架 Jframe 中添加组件 不能直接把组件添加到框架中 只能把组件添加到内容窗格ContentPane中向框架中加入一个组件的步骤 获得框架的内容窗格对象生成所需组件的实例对内容窗格对象调用add 组件对象 方法 把组件添加到框架中或者 获得框架的内容窗格对象生成所需组件的实例使用add 组件对象 方法把组件对象添加到面板对象中对内容窗格对象调用add 面板对象 方法 把面板对象添加到框架中此add方法是在Container类中定义的 一般使用第二种方式 21 按钮组件JButton 按钮是任何GUI都不可或缺的组件 是用来捕捉用户操作的最为简便的方式JButton类允许用图标 字符串或两者同时构造一个按钮 构造函数如下 JButton JButton Iconicon icon表示使用的图标JButton Stringtext text表示使用的字符串JButton Stringtext Iconicon 例 JButtonbtnOk newJButton 确定 JButtonbtnCancel newJButton 取消 创建一个带图标的JButtonImageIconbuttonIcon1 newImageIcon on gif JButtonb1 newJButton FirstButton buttonIcon1 22 向框架中添加组件示例 importjava awt importjavax swing classPanelDemoextendsJFrame publicPanelDemo Stringtitle 构造函数super title Containerc getContentPane 得到内容窗格JPanelcpane newJPanel 生成面板对象JButtonok newJButton 确定 JButtoncancel newJButton 取消 cpane add ok 把按钮添加到面板中cpane add cancel c add cpane BorderLayout SOUTH 将面板增加到内容窗格c publicstaticvoidmain String args PanelDemopd newPanelDemo JPanel测试 pd setSize 300 200 pd show 23 布局管理器 容器内的组件可以按不同方式进行排列 Java使用布局管理器来管理这些排列方式 每当需要重新调整屏幕大小或重新绘制屏幕上的任一项目时 就要用到布局管理器 Java提供一组用来进行布局管理的类 称为布局管理器 所有布局管理器都实现LayoutManager接口 24 布局管理器类型 Java中的布局管理器类型包括以下几种 FlowLayout 流式布局 BorderLayout 边界布局 GridLayout 网格布局 GridBagLayout 网格组布局 CardLayout 卡片布局 BoxLayout 箱式布局 SpringLayout 弹簧布局 25 布局类型的选用 每个布局管理器都有自己特定的用途 要按行和列显示几个同样大小的组件 GridLayout会比较合要在尽可能大的空间里显示一个组件 就要选择BorderLayout当需要在水平和垂直方向上把组件排列整齐时 需要选用GridBagLayout 26 如何设置布局 每个容器 Container对象 都有一个与它相关的缺省的布局管理器 在没有设置新的布局前 在容器中添加组件都按照该容器的缺省布局排列 可以通过setLayout LayoutManagerm 方法为容器设置新的布局 27 流布局管理器FlowLayout 在一行上水平排列组件 直到该行没有足够的空间为止 然后另起一行继续排列 当用户缩放容器时 布局管理器将进行自动控制 重新排列 我们可以指定流布局管理器的组件排列方式 如居中 默认 左对齐 右对齐等 FlowLayout的构造函数有 FlowLayout 生成一个默认的流式布局FlowLayout intalign 可以设定每一行组件的对齐方式FlowLayout intalign inthorz intvert 可以设定组件间的水平和垂直距离 horz vert 以像素为单位 如果为负 则强制进行重叠 如 setLayout newFlowLayout FlowLayout LEFT 左对齐setLayout newFlowLayout FlowLayout RIGHT 右对齐setLayout newFlowLayout FlowLayout CENTER 居中面板的缺省布局就是FlowLayout 28 流布局管理器示例 importjava awt importjava awt event importjavax swing publicclassFlowLayoutTest publicstaticvoidmain String args if args length 1 System out println Usage javaFlowLayoutTestNUMBER System exit 0 StringbuttonString args 0 从命令行的参数输入得到显示的按钮数目intbuttonNumber Integer parseInt buttonString ButtonFrameframe newButtonFrame buttonNumber frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame show classButtonFrameextendsJFrame publicButtonFrame intbuttonNumber buttons buttonNumber setTitle FlowLayoutTest setSize WIDTH HEIGHT JPanelbuttonPanel newJPanel 增加相应的按钮for inti 0 i buttons i JButtonaddButton newJButton add i buttonPanel add addButton ContainercontentPane getContentPane contentPane add buttonPanel publicstaticfinalintWIDTH 350 publicstaticfinalintHEIGHT 200 privateintbuttons 29 边界布局管理器BorderLayout2 1 边界布局管理器的布局分为五个位置 CENTER EAST WEST NORTH SOUTH 我们可以把组件放在这五个位置的任意一个 如果未指定位置 则缺省的位置是CENTER 采用边界管理器进行布局时 四周的组件先被放置 剩余的空间由位于中间的组件占用 当容器的大小改变时 四周组件的厚度不会被改变 而中间组件的大小需要改变 它是窗口 框架的内容窗格和对话框等的缺省布局 30 边界布局管理器BorderLayout2 2 下面是BorderLayout所定义的构造函数 BorderLayout 生成默认的边界布局 BorderLayout inthorz intvert 可以设定组件间的水平和垂直距离BorderLayout类定义了几个常量值以指定相应区域 BorderLayout NORTH 对应容器的顶部BorderLayout EAST 对应容器的右部BorderLayout SOUTH 对应容器的底部BorderLayout WEST 对应容器的左部BorderLayout CENTER 对应容器的中部加入组件方法 voidadd ComponentObj intregion Region的取值为上面的5个常量之一 31 边界布局管理器示例 importjava awt importjavax swing classBorderFrameextendsJFrame publicBorderFrame Strings super s JButtonbtnEast newJButton 东 JButtonbtnWest newJButton 西 JButtonbtnNorth newJButton 北 JButtonbtnSouth newJButton 南 JButtonbtnCenter newJButton 中 ContainercontentPane getContentPane contentPane add btnEast BorderLayout EAST contentPane add btnWest BorderLayout WEST contentPane add btnNorth BorderLayout NORTH contentPane add btnSouth BorderLayout SOUTH contentPane add btnCenter BorderLayout CENTER publicstaticvoidmain String args BorderFrameframe newBorderFrame 边界布局演示 frame setSize 400 200 frame show 32 网格布局管理器GridLayout 用于将容器区域划分为一个矩形网格 按行列来排列所有的组件 各个单元总是一样的大小GridLayout的构造函数如下所示 GridLayout 生成一个单列的网格布局 GridLayout introw intcol 生成一个设定行数和列数的网格布局 GridLayout introw intcol inthorz intvert 可以设置组件之间的水平和垂直间隔在实际应用中 小的网格 通常仅仅一行或者一列 在组织窗口的局部区域比较有用 例如 如果你想有一行相同尺寸的按钮 那么你可以把按钮放在一个面板里面 该面板使用只有单行的网格布局进行管理 33 网格布局示例 importjava awt importjavax swing classGridFrameextendsJFrame publicGridFrame Strings super s Buttonbtn 声明按钮数组Stringstr 1 2 3 4 5 6 7 8 9 Containercontentpane getContentPane contentpane setLayout newGridLayout 3 3 btn newButton str length 创建按钮数组for inti 0 i str length i btn i newButton str i contentpane add btn i publicstaticvoidmain String args GridFramegl newGridFrame 网格布局演示 gl setSize 200 200 gl show gl setVisible true 34 GridBagLayout网格组布局 网格组布局是所有的布局管理器之母 可看作是没有限制的网格布局 它按行列来排列组件 但是行和列的大小都是可变的 并且可以合并相邻的单元格来适应更大的组件 组件不需要填充整个单元格区域 并且可以指定单元格内的对齐方式 使用网格组布局管理器进行布局的步骤如下 创建一个GridBagLayout类型的对象 不必指定网格的行数和列数 布局管理器会根据后面所给的信息来猜把此对象设成容器的布局管理器创建一个GridBagConstraints类型的对象 该对象指定组件如何在网格组中布局 对于每一个组件 填充GridBagConstraints对象 最后 使用add component constraints 方法来添加组件和约束 例如 GridBagLayoutlayout newGridBagLayout panel setLayout layout GridBagConstraintsconstraints newGridBagConstraints Constraints weightx 100 Constraints weighty 100 Constraints gridx 0 Constraints gridy 2 Constraints gridwidth 2 Constraints gridheight 1 contentPane add style bold 35 GridBagConstraints类2 1 成员变量列表 gridx gridy 指定添加组件左上角的行和列的位置 坐标从0开始gridwidth gridheight 指定组件将占用多少行和多少列weightx weighty 区域放大时的增量参数 网格布局中的每个区域都需要设置 如果设置为0 那么该区域将永远保持它的初始尺寸不变 如果你需要一行或一列保持固定大小 那么你需要把该行或该列的所有组件的增量都设置为0 这些变量的缺省值为0ipadx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论