Java图形用户界面设计.ppt

上传人:max****ui 文档编号:6359943 上传时间:2020-02-23 格式:PPT 页数:141 大小:1.66MB
返回 下载 相关 举报
Java图形用户界面设计.ppt_第1页
第1页 / 共141页
Java图形用户界面设计.ppt_第2页
第2页 / 共141页
Java图形用户界面设计.ppt_第3页
第3页 / 共141页
点击查看更多>>
资源描述
第9章图形用户界面 GUI 设计 9 1图形用户界面设计概述 9 1 1GUI支持包和简单GUI程序例1 java awt包Java语言在java awt包中提供了大量地进行GUI设计所使用的类和接口 包括绘制图形 设置字体和颜色 控制组件 处理事件等内容 AWT是Java语言进行GUI程序设计的基础 2 javax swing包Swing包是Java基础类库 JavaFoundationClasses JFC 的一部分 Swing提供了从按钮到可分拆面板和表格的所有组件 Swing组件是Java语言提供的第二代GUI设计工具包 它以AWT为基础 在AWT内容的基础上新增或改进了一些GUI组件 使得GUI程序功能更强大 设计更容易 更方便 Swing 是开发新组件的项目代码名 现在 这个名字常用来引用新组件和相关的API AWT组件和对应的Swing组件 从名称上很容易记忆和区别 例如 AWT的框架类 面板类 按钮类和菜单类 被命名为Frame Panel Button和Menu 而Swing对应的组件类被命名为JFrame JPanel JButton和JMenu 与AWT组件相比 Swing组件的名前多一个 J 字母 另外 AWT组件在java awt包中 而Swing组件在javax swing包中 3 一个JavaGUI简单程序 例9 1 一个简单的SwingGUI应用程序 在一个框架窗口中显示两个标签和一个按钮 上面的标签显示一串固定的文字信息 选择按钮后在下面的标签上显示系统现在的时间 importjava awt importjava awt event importjavax swing importjava util 继承JFrame类并实现ActionListener接口publicclassSwingDemoextendsJFrameimplementsActionListener JButtonb1 声明按钮对象JLabell1 l2 声明标签对象 SwingDemo 定义构造方法super Swing应用程序的例 调用父类的构造方法l1 newJLabel 一个GUI应用程序的例子 JLabel CENTER 定义标签 文字居中l2 newJLabel 定义无文字标签b1 newJButton 现在时间 T 定义按钮b1 setMnemonic KeyEvent VK T 设置按钮的快捷键b1 setActionCommand time 设置控制名b1 addActionListener this 注册按钮事件add l1 BorderLayout NORTH 添加标签l1add l2 BorderLayout CENTER 添加标签l2add b1 BorderLayout SOUTH 添加标签b1 对按钮引发事件编程publicvoidactionPerformed ActionEvente 捕获按钮事件Calendarc1 Calendar getInstance 获取系统日期和事件if e getActionCommand equals time 判断是否为所需的按钮事件l2 setText 现在时间是 c1 get Calendar HOUR OF DAY 时 c1 get Calendar MINUTE 分 设置标签文字l2 setHorizontalAlignment JLabel CENTER 设置标签标签文字居中对齐 elseSystem exit 0 publicstaticvoidmain Stringargs 主方法JFrame setDefaultLookAndFeelDecorated true 加此语句显示为运行结果图的右图JFrameframe newSwingDemo 创建JFrame对象 初始不可见frame setDefaultCloseOperation JFrame EXIT ON CLOSE 设置框架关闭按钮事件frame pack 压缩框架的显示区域frame setVisible true 显示框架主窗口 程序运行后显示的形式如下图 JavaSwingGUI应用程序中的基本代码如下 1 引入合适的包和类一般的SwingGUI应用程序应包含程序中的前三个引入语句 它们分别表示引入awt包 awt事件处理包和swing包 其他包按需引入 由于Swing组件使用AWT的结构 包括AWT的事件驱动模式 所以 使用swing组件的程序一般需要使用awt包 2 使用缺省的观感或设置自己的观感 LookandFeel 3 设置一个顶层的容器 4 根据需要 使用缺省的布局管理器或设置另外的布局管理器 5 定义组件并将它们添加到容器 6 对组件或事件编码 9 1 2容器 组件 布局和观感1 容器 Container 和组件 Component 一个Java的图形用户界面的最基本元素是组件 组件是可以以图形化的方式显示在屏幕上并能与用户进行交互的对象 如一个按钮 一个文本框等 在Java语言中 通常将组件放在一定的容器内使用 容器实际上是一种具有容纳其他组件和容器的功能的组件 抽象类Container是所有容器的父类 其中包含了很多有关容器的功能和方法 而类Container又是Java语言的组件类Component的子类 2 布局管理器 LayoutManager 为了使得图形用户界面具有良好的平台无关性 在Java语言中提供了布局管理器这个工具来管理组件在容器中的布局 而不使用直接设置组件位置和大小的方式 容器中的组件定位由布局管理器决定 每个容器都有一个缺省的布局管理器 当容器需要对某个组件进行定位或判断其大小尺寸时 就会调用其相应的布局管理器 但也可以不用缺省的布局管理器 在程序中指定其新的布局管理器 Java平台提供多种布局管理器 常用的有FlowLayout BorderLayout GridLayout CardLayout BoxLayout和GridBagLayout等 使用不同的布局管理器 组件在容器上的位置和大小都是很不一样的 在程序中安排组件的位置和大小时 应该注意 1 容器中的布局管理器负责各个组件的大小和位置 因此用户无法在这种情况下直接设置这些属性 若试图使用Java语言提供的setLocation setSize setBounds 等方法 则都会被布局管理器覆盖 2 若用户确实需要亲自设置组件的位置和大小 则应取消该容器的布局管理器 方法为 setLayout null 随后 用户必须使用setLocation setSize setBounds 等方法为组件设置大小和位置 但这种方法将会导致程序的系统相关 在一个GUI应用程序的界面上 除了可以见到上述的标准GUI元素外 还可以见到一些非交互的起到装饰 美化界面的作用的几何图形 图案 图像等内容 3 观感 LookandFeel Javaswing的一个重要特征是它的可插入的 观感 体系 一个Swing应用程序或一个最终用户可指明所需要的观感 使得Swing应用程序的外观和行为都可以被定制 Swing运行一个缺省的Java观感 也称为Metal观感 还实现了模仿Motif和Windows的观感 这样 一个Swing程序可拥有Java程序的独特外观 也可以拥有熟悉的Windows操作系统外观 在本章稍后部分的单选按钮的程序例中分别显示了Windows Motif和Metal三种不同风格的观感 一般在应用程序的JFrame的构造方法中或在JApplet的init 方法中进行观感的设置 例9 2 设置观感 importjavax swing importjava awt publicclassSetLAF publicstaticvoidsetNativeLookAndFeel try UIManager setLookAndFeel UIManager getSystemLookAndFeelClassName catch Exceptione System out println 设置nativeLAF错误 e publicstaticvoidsetJavaLookAndFeel try UIManager setLookAndFeel UIManager getCrossPlatformLookAndFeelClassName catch Exceptione System out println 设置JavaLAF错误 e publicstaticvoidsetMotifLookAndFeel try UIManager setLookAndFeel com sun java swing plaf motif MotifLookAndFeel catch Exceptione System out println 设置MotifLAF错误 e 因为setLookAndFeel 方法抛出异常 因此设置观感的代码应捕捉异常 本例创建的类SetLAF可在以后的程序中设置观感时使用 9 1 3事件处理在一个GUI程序中 为了能够接收用户的输入 命令的按键和鼠标操作 程序系统首先应该能够识别这些操作并做出相应的响应 通常一个键盘和鼠标操作将引发一个系统预先定义好的事件 用户程序只要编写代码定义每个事件发生时程序应做出何种响应即可 这些代码会在它们对应的事件发生时由系统自动调用 这就是GUI程序中事件和事件响应的基本原理 在Java语言中 除了键盘和鼠标操作 系统的状态改变也可以引发事件 可能产生事件的组件称为事件源 不同事件源上发生的事件种类是不同的 若希望事件源上引发的事件被程序处理 需要将事件源注册给能够处理该事件源上那种事件类型的监听器 监听器具有监听和处理某类事件的功能 它可以是包容事件源的容器 也可以是另外的对象 也就是说 事件源和事件处理是分开的 一般组件都不处理自己的事件 而将事件处理委托给外部的处理实体 这种事件处理模型称为授权处理模型 事件的行为多种多样 由不同的监听器处理 编写事件处理程序首先应确定关注的事件属于何种监听器类型 在AWT中 提供11种标准的监听器类型 见下表 监听器适配器类注册方法ActionListeneraddActionListenerAdjustmentListeneraddAdjustmentListenerComponentListenerComponentAdapteraddComponentListenerContainerListenerContainerAdapteraddContainerListenerFocusListenerFocusAdapteraddFocusListenerItemListeneraddItemListenerKeyListenerKeyAdapteraddKeyListenerMouseListenerMouseAdapteraddMouseListenerMouseMotionListenerMouseMotionAdapteraddMouseMotionListenerTextListeneraddTextListenerWindowListenerWindowAdapteraddWindowListener 在确定监听器类型后 要用事件源类的注册方法来注册一个监听器类的对象 这样 事件源产生的事件会传送给已注册的处理该类事件的监听器对象 该对象将自动调用相应的事件处理方法来处理该事件 具体的注册方法是 用监听器类的对象作为参数调用事件源本身的addXxxListener 方法 该方法的参数是一个监听器类的对象 有多种形式 例如 1 分离的监听器类 该类通常为继承相应事件适配器类的子类 类中包含了事件处理方法 参数是该类的一个对象 2 实现监听器接口 参数为this 表示本对象就是一个监听器类的对象 在本类中包含事件处理方法 3 有名内部类 参数形式为继承事件适配器类的子类对象 在子类中包含事件处理方法 4 匿名内部类 参数形式为用new开始的一个无名的类定义 其中包含事件处理方法 9 2布局管理器 在容器中所有组件的布局 位置和大小 由布局管理器来控制 在Java语言中提供了FlowLayout BorderLayout GridLayout CardLayout和GridBagLayout等多种布局管理器 每种容器都有自己缺省的布局管理器 缺省地 JPanel使用FlowLayout 而内容窗格ContentPane JApplet JDialog和JFrame对象的主容器 使用BorderLayout 如果不希望使用缺省的布局管理器 则可使用所有容器的父类Container的setLayout 方法来改变缺省的布局管理器 1 FlowLayoutFlowLayout布局是一种最基本的布局 这种布局指的是把组件一个接一个从左至右 从上至下地依次放在容器上 每一行中的组件缺省为居中对齐 当容器的尺寸改变后 组件的大小不变 但布局将会随之变化 FlowLayout是Applet和JPanel的缺省布局管理器 FlowLayout类的构造方法如下 FlowLayout 创建每行组件对齐方式为居中对齐 组件间距为5个像素单位的对象FlowLayout intalign 创建指定每行组件对齐方式 组件间距为5个像素单位的对象 align可取三个静态常量LEFT CENTER和RIGHT之一 分别表示左 中 右对齐方式 FlowLayout intalign inthgap intvgap 创建指定每行组件对齐方式的对象 该对象也使用参数vgap和hgap指定了组件间的以像素为单位的纵横间距 向使用FlowLayout布局的容器添加组件可简单地使用下面的语句 add 组件名 2 BorderLayoutBorderLayout是内容窗格的缺省布局管理器 内容窗格是框架JFrame 小程序JApplet和对话框JDialog的主容器 BorderLayout将容器的布局分为五个区 北区 南区 东区 西区和中区 这几个区的分布规律是 上北下南 左西右东 当容器的大小改变时 容器中的各个组件相对位置不变 其中间部分组件的尺寸会发生变化 四周组件宽度固定不变 BorderLayout类的构造方法如下 BorderLayout 创建组件间无间距的BorderLayout对象 BorderLayout inthgap intvgap 创建有指定组件间距的对象 向BorderLayout布局的容器添加组件时 每添加一个组件都应指明该组件加在哪个区域中 add 方法的第二个参数指明加入的区域 区域东南西北中可用五个静态常量表示 BorderLayout EAST BorderLayout SOUTH BorderLayout WEST BorderLayout NORTH和BorderLayout CENTER 例9 3 将五个按钮加入BorderLayout的五个区 importjava awt importjavax swing publicclassBorderLayoutDemoextendsJApplet publicvoidinit Containerc getContentPane c add newButton 北North BorderLayout NORTH c add newButton 南South BorderLayout SOUTH c add newButton 东East BorderLayout EAST c add newButton 西West BorderLayout WEST c add newButton 中Center BorderLayout CENTER 程序运行的结果见下图 3 GridLayoutGridLayout布局是将容器的空间分成若干行和列的一个个网格 可以给出网格的行数和列数 组件添加到这些网格中 当改变容器的大小后 其中的组件相对位置不变 但大小改变 容器中各个组件同高度 同宽度 各个组件缺省的排列方式为 从上到下 从左到右 GridLayout类的构造方法如下 publicGridLayout 创建单行每个组件一列的GridLayout对象 publicGridLayout introws intcols 创建指定行列数的GridLayout对象 publicGridLayout introws intcols inthgap intvgap 创建指定行列数的GridLayout对象 因为没有容器缺省使用GridLayout 因此在使用GridLayout前 要用setLayout 方法将容器的布局管理器设置为GridLayout 在向GridLayout添加组件时 组件加入容器要按序进行 每个网格中都必须加入组件 若希望某个网格为空 可以为该网格加入一个空的标签 add newJLabel 例9 4 GridLayout布局 importjava awt importjavax swing publicclassGridLayoutDemoextendsJApplet publicvoidinit Containerc getContentPane c setLayout newGridLayout 3 2 c add newButton 1 c add newButton 2 c add newButton 3 c add newButton 4 c add newButton 5 c add newButton 6 4 CardLayoutCardLayout布局管理器能够使得多个组件共享同一显示空间 这些组件之间的关系像一叠重叠的扑克牌 只有最上面的组件是可见的 注意 在一个显示空间 卡片 中只能显示一个组件 因此 可使用容器嵌套的方法来显示多个组件 例9 4运行的结果如下图所示 CardLayout类的构造方法如下 CardLayout 创建间距为零的对象 CardLayout inthgap intvgap 创建带有水平hgap和垂直vgap间距的对象 为了使用叠在下面的组件 可以为每个组件取一名字 名字在用add 方法向容器添加组件时指定 需要某个组件时通过show 方法指定该组件的名字来选取它 也可以顺序使用这些组件 或直接指明选取第一个组件 用first 方法 或最后一个组件 用last 方法 例9 5 CardLayout布局 importjava awt importjavax swing publicclassCardLayoutDemoextendsJApplet CardLayoutcl newCardLayout 20 40 组件在卡片中有边界JButtonb1 newJButton 卡片一 JButtonb2 newJButton 卡片二 JButtonb3 newJButton 卡片三 publicvoidinit getContentPane setLayout cl getContentPane add card1 b1 getContentPane add card2 b2 getContentPane add card3 b3 程序运行结果如下图所示 程序中的三个按钮组件顺序添加到卡片布局管理器的各个卡片上 它们共享同一显示区域 因此只能见到最上面的 卡片一 按钮 5 GridBagLayoutGridBagLayout是最复杂也最灵活的布局管理器 这个布局管理器将组件放入单元格中 但允许一些组件跨越单元格 可用GridBagLayout类的构造方法GridBagLayout 来创建一个GridBagLayout布局管理器 因GridBagLayout布局设置比较复杂 这里就不介绍了 请读者参看API说明或其他资料 6 自定义布局 若希望按照自己的要求来进行组件和界面图形元素的布局 可用容器的setLayout null 方法将容器的布局管理器设置为空 然后用下面的方法设置组件在容器中的位置和大小 setBounds inta intb intwidth intheight 其中 参数a和b指定矩形形状的组件左上角在容器中的坐标 width和height指定组件的宽和高 例9 6 设置自己的布局管理器 importjava awt importjavax swing classNullLayoutextendsJFrame NullLayout super 建设自己的布局管理器 Containerc getContentPane 也可不用内容窗格c setLayout null JButtonjb1 newJButton 按钮1 JButtonjb2 newJButton 按钮2 c add jb1 c add jb2 jb1 setBounds 10 10 100 30 jb2 setBounds 10 50 100 30 publicstaticvoidmain Stringargs NullLayoutnl newNullLayout nl setSize 200 150 nl setVisible true 程序的运行结果如下图所示 注意 采用这种方式的布局 组件的位置和大小将不随窗口大小的变化而变化 下图为例9 6的运行界面 9 3常用Swing组件 9 3 1容器组件1 JFrame框架框架 是JFrame类的对象 是swingGUI应用程序的主窗口 窗口有边界 标题 关闭按钮等 对Java应用程序 应至少包含一个框架 例9 1的应用程序即使用了框架 有时 小程序也使用框架 JFrame类继承于Frame类 JFrame类的构造方法如下 JFrame 创建无标题的初始不可见框架 JFrame Stringtitle 创建标题为title的初始不可见框架 例如 创建带标题 JavaGUI应用程序 的框架对象frame 可用语句 JFrameframe newJFrame JavaGUI应用程序 要显示框架对象代表的框架窗口 可使用方法setVisible 可用语句 frame setVisible true 可使得JFrame类对象frame表示的框架窗口显示到屏幕上 一般在显示框架前 可设置框架的初始显示大小可使用setSize 方法或pack 方法 例如 frame setSize 200 150 设置框架窗口初始大小为200 150点frame pack 设置框架窗口初始大小为刚好只显示出所有的组件 在向框架添加组件时 并不直接添加组件到框架 而是添加到内容窗格 contentpane 改变其他特性 布局管理器 背景色等 也对内容窗格进行 要存取内容窗格 可通过getContentPane 方法 若希望用自己的容器替换掉内容窗格 例如用JPanel 可以使用setContentPane 方法 选择框架的关闭按钮后 框架窗口将自动关闭 但若是应用单个框架的应用程序 为了在选择框架的关闭按钮时能退出程序 应添加WindowListener监听器或书写下列代码 frame setDefaultCloseOperation JFrame EXIT ON CLOSE JFrame的缺省观感为Java Metal 若要使用其他的观感 必须显式设置 JFrame 应该说是内容窗格 的缺省布局管理器是BorderLayout 2 JPanel面板JPanel是一种添加到其他容器使用的容器组件 可将组件添加到JPanel 然后再将JPanel添加到某个容器 JPanel也提供一个绘画区域 可代替AWT的画布Canvas 没有JCanvas javax swing JPanel类继承于javax swing JComponent类 其构造方法有 publicJPanel 创建具有缺省FlowLayout布局的JPanel对象 publicJPanel LayoutManagerlayout 创建具有指定布局管理器的JPanel对象 将JPanel作为画布的绘画区域使用时 要使用下面的两个步骤 首先 设置画布绘图区域的大小 其次 使用paintComponent 方法 不是paint 方法 来绘图 在该方法体中 首先调用方法super paintComponent 来清除显示区域 例如 publicvoidpaintComponent Graphicsg super paintComponent g JPanel可指定边界 可用的边界有titled etched beveled line matte compound和empty等 也可以创建自己的边界 可用JComponent类的setBorder 方法设置边界 其用法如下 publicvoidsetBorder Borderborder 其中 Border类的参数可用javax swing BorderFactory类中的方法获得 获取各种相应边界的方法为 createTitledBorder createEtchedBorder createBevelBorder createRaisedBevelBorder createLoweredBevelBorder createLineBorder createMatteBorder createCompoundBorder createEmptyBorder 例9 7 使用JPanel importjava awt importjavax swing classJPanelDemoextendsJPanel JButtonb1 newJButton JPanel JButtonb2 newJButton Demo publicJPanelDemo setBackground Color white add b1 add b2 publicstaticvoidmain String args 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 例9 7程序运行结果如下图所示 3 JAppletjavax swing JApplet类是java applet Applet类的子类 使用Swing组件的小程序需继承JApplet类 除了所处的java包不同外 JApplet与Applet的主要区别还有 1 缺省的布局管理器不同Applet缺省的布局管理器是FlowLayout 而JApplet 内容窗格 缺省的布局管理器是BorderLayout 2 加入组件的方式不同Applet可直接加入组件 而JApplet缺省使用内容窗格ContentPane作为主容器 加入Swing组件时 要先使用JApplet的方法getContentPane 获得一个Container对象 再调用这个对象的add 方法将Swing组件加入到JApplet的容器中 4 JTabbedPanejavax javax swing JTabbedPane类继承于javax swing JComponent 它的对象反映为一组带标签的面板 每个面板都可以存放组件 因此JTabbedPane是一容器组件 JTabbedPane类的构造方法有 JTabbedPane 创建空对象 该对象具有缺省的标签位置JTabbedPane TOP和缺省的布局策略JTabbedPane WRAP TAB LAYOUT JTabbedPane inttabPlacement 创建空对象 该对象具有指定的标签位置 JTabbedPane TOP JTabbedPane BOTTOM JTabbedPane LEFT或JTabbedPane RIGHT以及缺省的布局策略JTabbedPane WRAP TAB LAYOUT JTabbedPane inttabPlacement inttabLayoutPolicy 创建空对象 该对象具有指定的标签位置和布局策略 例9 8 使用JTabbedPane容器 importjava awt importjava awt event importjavax swing importjavax swing event publicclassJTabbedPaneDemo publicstaticvoidmain Stringargs newMyTabbedPane classMyTabbedPaneextendsJFrameimplementsChangeListener ActionListener JTabbedPanejt JButtonjb intindex 0 MyTabbedPane super 使用标签面板容器 jt newJTabbedPane jb newJButton 5 for inti 0 i 5 i jb i newJButton 第 i 页面板 jb i addActionListener this jt addTab 页标签 i jb i jt addChangeListener this getContentPane add jt BorderLayout CENTER setDefaultCloseOperation JFrame EXIT ON CLOSE setSize 300 200 setVisible true publicvoidstateChanged ChangeEvente if e getSource jt inti JTabbedPane e getSource getSelectedIndex jb index setVisible false jb i setVisible true index i publicvoidactionPerformed ActionEvente setTitle 响应单击 JButton e getSource getText 例9 8运行结果如下图所示 9 3 2按钮 JButton 按钮是GUI中非常重要的一种基本组件 按钮一般对应一个事先定义好的事件 执行功能 一段程序 当使用者单击按钮时 系统自动执行与该按钮联系的程序 从而完成预定的功能 JButton类提供对按钮的支持 它的类层次关系如下 java awt Container javax swing JComponent javax swing AbstractButton javax swing JButton JButton类有如下的构造方法 JButton 创建空按钮 JButton Iconicon 创建带图标的按钮 JButton Stringtext 创建带文字的按钮 JButton Stringtext Iconicon 创建带文字和图标的按钮 JButton组件与AWT的Button组件相比 增加了显示文本中可用HTML标记 可带图标等功能 在JButton按钮的使用中 常用到继承来的setMnemonic 设置快捷字母键 setActionCommand 设置动作命令 方法等 JButton组件引发的事件为ActionEvent 可实现ActionListener监听器接口的actionPerformed 方法 用addActionListener 方法注册 用getActionCommand 或getSource 方法确定事件源 例9 9 设计一个GUI应用程序 有两个标签l1 l2和三个按钮b1 b2 b3 l1标签显示固定的文字 l2标签的文字随选择不同的按钮而变化 选择b1按钮时 l2标签显示为 欢迎进入Java世界 选择b2按钮时 l2标签显示当前的日期 选择b3按钮时 退出该应用程序 程序如下 importjava awt importjava awt event importjavax swing importjava util publicclassJButtonDemoextendsJpanelimplementsActionListener JButtonb1 b2 b3 staticJLabell1 l2 JButtonDemo l1 newJLabel 这是一个演示按钮动作的程序 JLabel CENTER l2 newJLabel JLabel CENTER b1 newJButton 欢迎 w b1 setMnemonic KeyEvent VK W 设置按钮的快捷键b1 setActionCommand welcome b2 newJButton 日期 d b2 setMnemonic KeyEvent VK D 设置快捷字符为Db2 setActionCommand date b3 newJButton 退出 q b3 setMnemonic KeyEvent VK Q 设置快捷字符为Qb3 setActionCommand quit b1 addActionListener this b2 addActionListener this b3 addActionListener this add b1 add b2 add b3 publicvoidactionPerformed ActionEvente Calendarc1 Calendar getInstance if e getActionCommand equals welcome l2 setText 欢迎进入Java世界 elseif e getActionCommand equals date l2 setText 今天是 c1 get Calendar YEAR 年 c1 get Calendar MONTH 1 月 c1 get Calendar DATE 日 elseSystem exit 0 l2 setHorizontalAlignment JLabel CENTER 标签文字水平居中 publicstaticvoidmain Stringargs JFrameframe newJFrame 使用JButton frame getContentPane add newJButtonDemo BorderLayout SOUTH frame getContentPane add l1 BorderLayout NORTH frame getContentPane add l2 BorderLayout CENTER frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame pack frame setVisible true 本程序中命令按钮设置了快捷字母键 可用鼠标单击或按Alt 快捷字母来选择按钮 例9 9运行启动后选择 欢迎 按钮和选择 日期 按钮后显示的情况见下左图和下右图 例9 10 带图形和HTML文字的按钮 importjava awt importjavax swing publicclassJButtonDemo1extendsJFrame publicstaticvoidmain String args newJButtonDemo1 publicJButtonDemo1 super UsingJButton Containercontent getContentPane content setBackground Color white content setLayout newFlowLayout JButtonbutton1 newJButton Java content add button1 ImageIconim newImageIcon images newssms gif JButtonbutton2 newJButton im content add button2 JButtonbutton3 newJButton Java im content add button3 JButtonbutton4 newJButton Java im button4 setHorizontalTextPosition SwingConstants LEFT content add button4 setDefaultCloseOperation JFrame EXIT ON CLOSE pack setVisible true 程序中使用了类IconImage和指定图标图像文件名来创建图标图像对象 程序的运行结果如下图所示 9 3 3标签 JLabel 标签是用户不能修改只能查看其内容的组件 常用来在界面上输出信息 JLabel类提供了对标签的支持 它的类层次关系为 javax swing JComponent javax swing JLabel JLabel类的构造方法有 JLabel 创建一个空标签 JLabel Iconimage 创建一个带指定图像的标签 JLabel Iconimage inthorizontalAlignment 创建一个带指定图像和水平对齐方式的标签 JLabel Stringtext 创建一个带文字的标签 JLabel Stringtext Iconicon inthorizontalAlignment 创建一个带文字 图像和指定水平对齐方式的标签 JLabel Stringtext inthorizontalAlignment 创建一个带文字和指定水平对齐方式的标签 其中 horizontalAlignment水平对齐方式可以使用表示左对齐 右对齐 居中对齐的常量JLabel LEFT JLabel LEFT和JLabel CENTER 例9 11 具有文字对齐的标签 importjavax swing importjava awt publicclassJLabelAlignDemoextendsJApplet publicvoidinit Containerc getContentPane c add newJLabel 文字左对齐标签 JLabel LEFT BorderLayout NORTH c add newJLabel 文字右对齐标签 JLabel RIGHT BorderLayout CENTER c add newJLabel 文字居中标签 JLabel CENTER BorderLayout SOUTH 程序运行结果见下图 JLabel类常用方法有 publicvoidsetText Stringtext 定义这个组件将显示的单行文字 publicStringgetText 返回标签显示的文字 publicIcongetIcon 返回标签显示的图像 publicvoidsetIcon Iconicon 定义这个组件将显示的图标 例9 12 使用带图标的标签 importjavax swing importjava awt importjava awt event publicclassJLabelDemoextendsJApplet publicvoidinit Containerc getContentPane Iconicon newImageIcon images cup gif JLabellabel newJLabel Swing icon JLabel CENTER c add label BorderLayout CENTER 程序运行结果如下图所示 9 3 4复选框 JCheckBox JCheckBox类提供复选框按钮的支持 复选框按钮是具有开关或真假状态的按钮 JCheckBox类的层次关系为 javax swing AbstractButton javax swing JToggleButton javax swing JCheckBoxJCheckBox类的构造方法如下 JCheckBox 创建无文本的初始未选复选框按钮 JCheckBox Iconicon 创建有图像无文本的初始未选复选框按钮 JCheckBox Iconicon booleanselected 创建带图像和选择状态但无文本的复选框按钮 JCheckBox Stringtext 创建带文本的初始未选复选框按钮 JCheckBox Stringtext booleanselected 创建具有指定文本和状态的复选框按钮 JCheckBox Stringtext Iconicon 创建具有指定文本和图标图像的初始未选复选框按钮 JCheckBox Stringtext Iconicon booleanselected 创建具有指定文本 图标图像 选择状态的复选框按钮 其中 构造方法的参数selected若为真 则表示按钮初始状态为选中 JCheckBox类常用的方法有继承来的方法isSelected 其格式为 publicbooleanisSelected 当复选框按钮选中时返回true 否则返回false JCheckBox类的选择事件是ItemEvent 可实现ItemListener监听器接口的itemStateChanged 方法来处理事件 用addItemListener 方法注册 例9 13 选择粗体 斜体复选框按钮 改变文本框中显示文字的字形 importjavax swing importjava awt event importjava awt publicclassJCheckBoxDemoextendsJappletimplementsItemListener privateJTextFieldt privateJCheckBoxbold italic publicvoidinit t newJTextField 观察这里文字字形的变化 40 t setFont newFont Serif Font PLAIN 20 getContentPane add t BorderLayout NORTH bold newJCheckBox 粗体Bold bold addItemListener this getContentPane add bold BorderLayout CENTER italic newJCheckBox 斜体Italic italic addItemListener this getContentPane add italic BorderLayout SOUTH publicvoiditemStateChanged ItemEvente intb bold isSelected Font BOLD Font PLAIN inti italic isSelected Font ITALIC Font PLAIN t setFont newFont Serif b i 20 程序运行结果如下图所示 9 3 5单选按钮 JRadioButton 在一组单选按钮中 可进行选择其中一个的操作 即进行 多选一 JRadioButton类的类层次和构造方法的参数构成都与前面介绍的JCheckBox类相同 这里不再列出JRadioButton类的这些内容 因为单选按钮是在一组按钮中选择一个 因此 必须将单选按钮分组 即指明在一个组中包含哪些按钮 可用ButtonGroup创建按钮组对象 应用对象的add 方法顺序加入各个单选按钮 在单选按钮中也可以使用HTML代码 这是JavaSDK1 3版新增的功能 单选按钮的选择事件是ActionEvent类事件 例9 14 使用单选按钮来设置Swing应用程序的不同观感 importjava awt importjava awt event importjavax swing publicclassJRadioButtonDemoextendsJPanel staticJFrameframe staticStringmetal Metal staticStringmotif Motif staticStringwindows Windows JRadioButtonmetalButton motifButton windowsButton publicJRadioButtonDemo JButtonbutton newJButton Hello world button setMnemonic h metalButton newJRadioButton metal metalButton setMnemonic o metalButton setActionCommand metal motifButton newJRadioButton motif motifButton setMnemonic m motifButton setActionCommand motif windowsButton newJRadioButton windows windowsButton setMnemonic w windowsButton setActionCommand windows 将单选按钮设置为一组ButtonGroupgroup newButtonGroup group add metalButton group add motifButton group add windowsButton 对单选按钮设置监听器RadioListenermyListener newRadioListener metalButton addActionListener myListener motifButton addActionListener myListener windowsButton addActionListener myListener add button add metalButton add motifButton add windowsButton ActionListener监听器监听单选按钮 classRadioListenerimplementsActionListener 嵌套类publicvoidactionPerformed ActionEvente if e getActionCommand equals metal SetLAF setJavaLookAndFeel elseif e getActionCommand equals motif SetLAF setMotifLookAndFeel elseSetLAF setNativeLookAndFeel SwingUtilities updateComponentTreeUI frame frame pack publicstaticvoidmain Strings JRadioButtonDemopanel newJRadioButtonDemo frame newJFrame 使用JRadioButton选择观感 frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame getContentPane add Center panel frame pack frame setVisible true 程序运行时可用单选按钮选择三种不同的观感 运行结果如下图上 中和下所示 例9 14程序运行时选择不同单选按钮的界面 9 3 6文本框 JTextField JPassWord和JTextArea Java语言提供了单行文本框 口令框和多行文本框等文本框形式 它们都是人机交互的主要组件 1 单行文本框 JTextField 单行文本框一般
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!