资源预览内容
第1页 / 共104页
第2页 / 共104页
第3页 / 共104页
第4页 / 共104页
第5页 / 共104页
第6页 / 共104页
第7页 / 共104页
第8页 / 共104页
第9页 / 共104页
第10页 / 共104页
亲,该文档总共104页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,第八章 Swing图形用户界面程序设计,浙江工业大学 计算机学院 赵小敏 zxm http:/211.155.231.249:8009,2,主要内容,简介 容器组件 基本组件 布局管理器 事件处理模型 高级图像用户界面,3,8.1简介,图形用户界面(GUI) 数据的图形显示形式 友好的交互方式 简化计算机软件的学习过程 GUI示例 jdk1.6demojfcSwingSet2 GUI组件: Labels, Text fields, Buttons等等,4,1、关于Swing GUI 组件,Swing GUI 组件 所在的包: javax.swing Swing组件的平台相关性较小(lightweight) 早期版本的GUI组件 所在的包: java.awt 与平台相关性较强,5,2、Swing特性,100%的纯Java实现 可插入的外观感觉(Pluggable Look and Feel,PL&F) Swing组件的多样化 支持键盘操作 设置边框 使用图标(Icon) 可存取性支持 MVC(Model-View-Control)体系结构,6,3、Swing的组件,在javax.swing包中,定义了两种类型的组件:容器和组件。 容器 各种组件必须放在容器 容器本身也是一种组件 分类 顶层容器,如JFrame,JApplet,JDialog和JWindow 其它容器,如JPanel,JScrollPane,JSplitPane,JToolBar 组件 基本控制组件,如JButton, JComboBox, JList, JMenu, JSlider, JTextField 不可编辑的信息显示组件,如JLabel, JProgressBar, JToolTip 可编辑的信息显示组件,如JColorChooser, JFileChooser, JTable, JTextArea,7,4、Swing的类层次结构,Swing的类层次结构 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,5、 JComponent类的功能,1) 边框设置:使用setBorder()方法可以设置组件外围的边框,使用一个EmptyBorder对象能在组件周围留出空白。 2) 双缓冲区:使用双缓冲技术能改进频繁变化的组件的显示效果。与AWT组件不同,JComponent组件默认双缓冲区,不必自己重写代码。 3) 提示信息:使用setTooltipText()方法,为组件设置对用户有帮助的提示信息。,9,5、 JComponent类的功能(续),4) 键盘导航:使用registerKeyboardAction( ) 方法,能使用户用键盘代替鼠标来驱动组件。JComponent类的子类AbstractButton还提供了setMnemonic( )方法指明一个字符,通过这个字符和一个当前L&F的特殊修饰共同激活按钮动作。 5) 可插入L&F:每个JComponent对象有一个相应的ComponentUI对象,为它完成所有的绘画、事件处理、决定尺寸大小等工作。 ComponentUI对象依赖当前使用的L&F,用UIManager.setLookAndFeel( )方法可以设置需要的L&F。 6) 支持布局:通过设置组件最大、最小、推荐尺寸的方法和设置X、Y对齐参数值的方法能指定布局管理器的约束条件,为布局提供支持。,10,8.2 容器组件,JFrame JPanel JScrollPane JSplitPane,11,1、JFrame(框架),类 JFrame 是java.awt.Frame的子类 在Swing的组件中, JFrame 并不全是由Java编写的 是一种与平台关系比较密切的组件(Heavyweight component) java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-javax.swing.JFrame,12,例1:基于AWT实现的框架界面,import java.awt.*; public class FrameDemo Frame f; Button b; public FrameDemo() f=new Frame(“Frame Demo“); b=new Button(“Press me“); f.add(b); f.setSize(200,200); f.setVisible(true); public static void main(String args) new FrameDemo(); ,13,例2:基于Swing实现的框架界面,import java.awt.*; import javax.swing.*; public class JFrameDemo JFrame f; JButton b; Container c; public JFrameDemo() f=new JFrame(“JFrame Demo“); b=new JButton(“Press me“); c=f.getContentPane(); c.add(b); f.setSize(200,200); f.setVisible(true); public static void main(String args) new JFrameDemo(); ,14,在JFrame中加入组件的方法,1) 用getContentPane( )方法获得JFrame的内容面板,再对其加入组件: Container c=frame.getContentPane() c.add(childComponent) 2) 建立一个JPanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板: JPanel contentPane=new JPanel( ); /把其它组件添加到Jpanel中; frame.setContentPane(contentPane); /把contentPane对象设置成为frame的内容面板,15,2、JPanel(面板),一种中间容器,用来组成其它组件 可以添加各种组件(包括面板组件) 面板(JPanel)的大小由它所包含的组件决定 当组件个数增加,面板(JPanel)也会随之而增大,16,例3:利用JPanel创建界面,import java.awt.*; import javax.swing.*; public class JPanelDemo extends JFrame public JPanel getGUI() JPanel p=new JPanel(); p.add(new JButton(“Press me“); return p; public JPanelDemo() super(“JPanel Demo“); setContentPane(getGUI(); setSize(200,200); setVisible(true); public static void main(String args) new JPanelDemo(); ,import java.awt.*; import javax.swing.*; public class JPanelDemo extends JFrame public JPanel getGUI() JPanel p=new JPanel(); p.add(new JButton(“Press me“); return p; public static void main(String args) JPanelDemo jp=new JPanelDemo(); jp.setTitle(“JPanel Demo“); jp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jp.setContentPane(jp.getGUI(); jp.setSize(200,200); jp.setVisible(true); ,17,3、 JScrollPane(滚动窗口面板),JScrollPane是带滚动条的面板,主要是通过移动JViewport(视口)来实现的。 JViewport是一种特殊的对象,用于查看基层组件,滚动条实际就是沿着组件移动视口,同时描绘出它在下面“看到“的内容。,18,滚动窗口(JScrollPane)效果图,19,4、JSplitPane(分隔板),JSplitPane提供可拆分窗口,支持水平拆分(JSplitPane.HORIZONTAL_SPLIT)和垂直(JSplitPane.VERTICAL_SPLIT)拆分并带有滑动条。 常用方法有: JSplitPane (int newOrientation, Component newLeftComponent, Component newRightComponent) 创建一个具有指定方向和指定组件的新 JSplitPane。 addImpl(Component comp,Object constraints,int index)/增加指定的组件 setTopComponent(Component comp) /设置顶部的组件 setDividerSize(int newSize) /设置拆分的大小 setUI(SplitPaneUI ui) /设置外观和感觉,20,分隔板(JSplitPane)效果图,21,8.3基本组件,标签(JLabel) 文本框(JTextField) 按钮(JButton) 组合框(JComboBox) 文本(JTextArea) 列表JList(单选列表和多选列表),22,1、标签(JLabel),标签 为GUI提供文本(主要)或图像(也可以)信息 对应类(JLabel) (JComponent的子类) 可以显示: 单行的只读的文本信息 图像 同时显示文本与图像信息 程序一般不修改标签的内容,23,例4:JLabel的演示例子,import java.awt.Container; import java.awt.FlowLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class JLabelDemo extends JFrame public JLabelDemo( ) super( “框架和标签例程“ ); String s = “文本标签“, “文字在图标的左侧“, “文字在图标的下方“; ImageIcon ic = null, new ImageIcon( “img1.gif“ ), new ImageIcon( “img2.gif“ ); int ih = 0, JLabel.LEFT, JLabel.CENTER; int iv = 0, JLabel.CENTER, J
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号