资源预览内容
第1页 / 共110页
第2页 / 共110页
第3页 / 共110页
第4页 / 共110页
第5页 / 共110页
第6页 / 共110页
第7页 / 共110页
第8页 / 共110页
第9页 / 共110页
第10页 / 共110页
亲,该文档总共110页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第8章图形用户界面设计 Java图形用户界面(GUI)设计主要涉及AWT,Swing两大类库,Swing是AWT的扩展和功能加强。8.1.2 Swing类层次结构Swing软件包(也叫SwingAPI)提供了开发GUI所需的所有组件,SwingAPI除了有最常用的javax.swing包和javax.swing.event包外,还有javax.swing.border包,javax.swing.text包,javax.swing.table包,javax.swing.tree包和javax.swing.filechooser包等。 Swing组件都是AWT的Container类的直接子类或间接子类。关系如图8.1。 -java.lang.Object -java.awt.Component -java.awt.Container -java.awt.Window -java.awt.Frame-javax.Swing.JFrame -javax.Dialog-javax.Swing.JDialog -javax.Swing.JWindow -java.awt.Applet-javax.Swing.JApplet -javax.Swing.Box-javax.Swing.JComponet 图8.1Swing类层次关系 由此可见Object类是上述所有类的超类,Component类是Object类的子类,Container类是Component的子类,JComponent类又是Container类的子类。 其中JComponent类是大多数Swing组件的超类,Swing中几乎所有组件都是从Jcomponent类继承而来,但以下几个组件不是由JComponent继承而来:JFrame、JDialog、Jwindow和JApplet,Swing中的JFrame类继承原有AWT中的Frame类,而不是继承JComponent类。同样,JApplet类继承原有AWT中的JApplet类,也不是继承JComponent类。 为了方便大家对GUI编程有个初步的了解,下面用一个简单的例子来说明。 见例8.1 程序运行结果如下所示.程序说明:程序的第1行引入所需的软件包javax.swing.*(这里不需要javax.swing.event.*);第4行创建一个顶级容器JFrame;第5行创建一个基本组件Label标签用来显示文本信息;第6行先调用getContentPane方法得到顶层容器的一个内容面板,再用add方法将标签加进去(在AWT中可直接使用add方法添加组件); 第7行调用setDefaultCloseOperation方法(JFrame.EXIT_ON_CLOSE是参数)使点击窗口右上角的关闭按钮能完整的退出程序;第8行中的pack方法用来自动的设定窗口的大小,另一个设定窗口大小的方法是setSize,利用它可以由编程者人为的指定窗口的大小,如将该行内容改为frame.setSize(300,200)设定窗口大小为宽300,高200,单位为像素;第9行的setVisible(true)方法使窗口能显示在屏幕上,与该方法等价的是show()方法,二者选其一使用即可。 8.2 Swing组件与容器 8.2.1 Swing组件概述 Swing的组件类型繁多,为了方便使用,可按功能分类如下。 (1)顶层容器:包括JFrame、JApplet、JDialog和JWindow,分别用于设计框架、小应用程序、对话框和窗体,其中JWindow是AWT的Window类的Swing版本,但没有多大用处。它们位于包体系的顶部,所有的GUI组件都包含在顶层容器里。 (2)中间容器:包括JPanel,JScrollPane,JSplitPane,JTabbedPane和JToolBar等,中间容器可以添加在顶层容器中,也可以容纳其他组件,介于顶层组件和原子组件之间。 (3)特殊容器:在GUI上起特殊作用的中间层,包括JInternalFrame,JLayeredPane,JRootPane等,它们也是中间容器,但有着特殊的作用。 (4)基本组件:实现人机交互的组件,包括JButton,JComboBox,JList,JMenu,JSlider,JCheckBox,JList和JTextComponent等。 上面列出的常用Swing组件,随后几节将详细讨论。 8.2.2 顶层容器 组件必须加在容器中,而容器本身具有层次性的关系. 因此若想在JFrame上加入任何组件时,必须先取得JFrame的容器来放置这些组件。由于JFrame、JDialog、JWindow与JApplet是显示Swing组件的根组件,所以称它们为顶层容器。 以JFrame为例,顶层容器和其他容器的区别在于:它包含一个内容面板,Swing组件可以加入到内容面板里,但不能直接加入到顶层容器中。 其中内容面板是Container类的一个对象,向Frame中添加组件首先要用getContentPane()方法获得JFrame的内容面板,再使用add方法向内容面板中添加其他组件。例如向窗体对象frame中添加一个标签label组件,使用如下语句:frame.getContentPane().add(label);(请见例8.1第6行)。 例2的运行结果就是一个什么东西都没有加的框架,也就是一个空窗口,见图8.3。说明: 显示一个窗口只需要做三件事:生成实例(对象)-设置大小-显示,即程序中的第5,8和9行代码。 按默认的规定,当用户关闭窗口后,窗口消失(隐藏),但仍然存在,程序还在运行,例2中使用setDefaultCloseOperation方法来实现结束程序的运行,该方法需使用下面参数之一: DO_NOTHING_ON_CLOSE: HIDE_ON_CLOSE: DISPOSE_ON_CLOSE: EXIT_ON_CLOSE: 创建JFrame窗口可使用其构造方法JFrame()JFrame(String str),后一个构造方法中参数为窗口的标题。JFrame的一些其它方法有:setTitle(String str):设置窗口标题;setIconImage(Image image):设置窗口的图标;setResizable(Boolean boolean):设置窗口是否可自动调整大小(默认为可调整);setSize(int width,int height):设置窗口的宽度和高度;setBounds(int x,int y,int width,int height):设置窗口左上角的坐标和窗口宽度和高度;pack():用紧凑方式自动设定窗口大小。 8.3 标签与按钮 8.3.1 标签(JLabel) 标签用来显示提示或信息。标签除可以显示文本外,也可以显示图标。 标签类JLabel是JComponent类的子类,用于创建标签。 一共有六个构造方法,分别是: JLabel() JLabel(Icon image) JLabel(Icon image,int horizontalAlignment) JLabel(String text) JLabel(String text,Icon icon,int horizontalAlignment) JLabel(String text,int horizontalAlignment) 其中不带参数的构造方法是创建一个没有文字和图标的空白标签,参数text和image用来设置标签的显示内容,horizontalAlignment用来指明标签内容(包括文本和图标)在水平方向的对齐方式,应为JLabel.LEFT/CENTER/RIGHT/LEADING/TRAILING中的一种。 标签内容的对齐方式可以通过调用setHorizontalAlignment(intalign)和setVerticalAlignment(intalign)来设定和修改。通过调用setText(Stringtext)和setIcon(Iconicon)来设定标签的文本和图标,图标可用的文件后缀名包括.gif、.png和.jpg。 例3介绍了标签的使用. 见例3 程序运行效果如下.说明: 程序创建一个LabelDemo类,是JFrame的子类,继承了JFrame类的通用的方法和特征;第10行创建内容面板Container对象cp;第19到21行是向内容面板cp中添加标签组件,其中add方法中的第二个字符串参数是用来设定窗口中的显示布局,分别将标签显示在窗口的顶部,中部和底部,这里使用默认的边界布局管理器(可参见第8.6节内容)。 当标签只含有文本时,其默认的对齐方式是左对齐;只含图标时,默认为中间对齐。调用标签的setToolTipText方法可以使当鼠标停留在标签上时,自动弹出一行提示信息,如图中显示的“第三个JLabel标签”。另外运行该程序后,我们发现标签并没有明显的边界显示。 8.3.2 按钮(JButton) 按钮JButton类是AbstractButton类(javax.swing包)的子类,用于创建命令按钮。它常用的构造方法有: JButton(Icon icon):按钮上显示图标; JButton(String text):按钮上显示文本; JButton(String text, Icon icon) :按钮上既显示图标又显示文本。 按钮上显示的文本相对于图标的上下和左右对齐方式可以分别用setVerticalTextPosition和setHorizontalTextPosition方法来设定,方法的参数分别为AbstractButton.TOP/CENTER/BOTTOM和AbstractButton.LEFT/CENTER/RIGHT,默认的参数值是CENTER和RIGHT。 下面创建一个JButton类的button对象,文本居中显示,图标显示在文本正上方。 JButton button = new JButton(“显示图标的按钮”,new ImageIcon(“images/left.gif”); button.setVerticalTextPosition(AbstractButton. BOTTOM);/去掉则文字和图标重合 button.setHorizontalTextPosition(AbstractButton.CENTER);/设置文本居中对齐 使用setEnabled方法可指定按钮的状态,若参数为true,按钮可操作,参数为false时,按纽不可操作,默认状态为有效可操作状态。判断一个按钮是否处于有效状态使用isEnabled方法。除此还可以为按钮设置快捷键,方法是setMnemonic,参数是KeyEvent.VK_X,其中VK_后面的字母X代表键盘上的键(大写),例如:VK_C指定快捷键ALT+C。 当用户单击命令按钮时,它将产生一个ActionEvent事件,该动作事件在actionPerformed方法中处理,用getSource方法来返回产生事件的对象(事件源)。关于Java的事件处理将在下一节中详细介绍。 见例4学习按钮的使用.说明: 第4行定义ButtonDemo类,并声明该类将实现ActionListener接口。第6行声明一个JButton类对象button;ButtonDemo的构造函数将按钮和对象实例化;第12行创建ImageIcon对象buttonIcon;第13行使用JButton构造方法创建一个包含文本和图标的按钮;第15和16行分别设置按钮文本相对于图标的上下和左右对齐方式为居中和左对齐;第17行设置按钮快捷键为ALT+M;第18行为按钮注册监听器,当用户单击按钮时触发动作事件(ActionEvent);事件处理程序在actionPerformed方法中实现;第20行设置窗口布局为流式布局(组件从左到右依次排列)。按钮在显示效果上与标签非常相似,它们具有许多共同的方法。更多的方
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号