Download presentation
Presentation is loading. Please wait.
Published byDamian Kolbe Modified 6年之前
1
Java 程 序 设 计 基于Swing的GUI开发 浙江工业大学软件学院 主讲教师:赵小敏
2
Swing概述 Swing是Java Foundation Classes(JFC) 的重要组成部分。JFC包括了开发GUI所需的组件和服务,包含如下五部分: AWT Java 2D Accessibility Drag and Drop Swing
3
Swing特性 1、100%的纯Java实现 AWT中,有部分代码是C编写的。
Swing组件是用100%纯Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。
4
Swing特性 2、可插入的外观感觉(Pluggable Look and Feel,PL&F)
在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。Swing使得程序在一个平台上运行时能够有不同的外观。用户可以选择自己习惯的外观。
5
Swing特性 3、Swing组件的多样化 Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件以“J”开头,除了有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。
6
Swing特性 4、支持键盘操作 在Swing组件中,使用JComponent类的registerKeyboardAction()方法,能使用户通过键盘操作来替代鼠标驱动GUI上Swing组件的相应动作。有些类还为键盘操作提供了更便利的方法。(热键)
7
Swing特性 5、设置边框 对Swing组件可以设置一个和多个边框。Swing中提供了各式各样的边框供用户选用,也能建立组合边框或自己设计边框。一种空白边框可以增大组件,协助布局管理器对容器中的组件进行合理的布局。
8
Swing特性 6、使用图标(Icon) 与AWT的部件不同,许多Swing组件如按钮、标签,除了使用文字外,还可以使用图标修饰自己。
9
基于Swing应用程序的一般结构 引入Swing包 选择“外观和感觉” 设置顶层容器 设置按钮和标签 向容器中添加组件 在组件周围添加边界
进行事件处理
10
例子:显示一个按钮,并显示按钮的单击次数,p367 12-2
基于Swing的应用程序 例子:显示一个按钮,并显示按钮的单击次数,p
11
Swing组件-主要内容 JLabel JTextField和JPasswordField JButton
JCheckBox和JRadioButton JComboBox JList 多选列表 键盘事件处理 JTextArea Jpanel JSlider JPopupMenu
12
JLabel(标签) 作用:在GUI显示文本或提示信息。 特点: 1、只显示一行只读文本,一个图像或带图像的文本。
JLabel类支持Icon的显示。 JLabel类中自带了许多设置其自身特性的方法。
13
JTextField和JPasswordField
在JTextField和JPasswordField中输入数据后按Enter键会激发一个事件。 如果程序注册了相应的事件监听器,监听器负责处理事件。
14
Jbutton(按钮) 按钮是用于触发特定动作的组件,Java提供了多种按钮。 点击按钮时,会产生一个ActionEvent事件。
GUI可以有多个按钮,但每个按钮必须有不同的标签。 JButton 可以显示Icon。
15
JCheckBox和JRadioButton
Swing GUI 组件中包含了3种状态按钮,即JToggleButton(切换按钮)、JCheckBox(复选框)和JRadioButton(单选按钮)。它们有开/关或真/假值. 单击JCheckBox (复选框)产生ItemEvent事件,并由ItemListener处理。 ItemListener必须定义itemStateChanged()方法。 JRadioButton(单选按钮)通常成组使用,一个按钮在同一时刻只能有一个被选中。单击JRadioButton产生ItemEvent事件。 例:CheckboxTest.java、RadioButtonTest.java
16
JComboBox(下拉列表) JComboBox为用户提供项目列表以供选择。 JComboBox产生ItemEvent事件。
例:ComboBoxTest.java
17
JList(列表) JList显示出一系列选项,用户可以从中选择一个或多项。 JList激发ListSelectionEvent事件。
例:ListTest.java
18
多选列表 多选列表可以在JList中选择多个选项,方法是按住shift键或ctrl键。
多选列表没有和多个选择相关的事件。通常由另一个GUI组件生成的事件(外部事件)来指定处理JList中的多个选择。 例:MultipleSelection.java
19
键盘事件处理 在键盘上的按键被按下或释放时,生成按键事件。 按键事件的事件监听器接口是KeyListener。
如果需要判断键盘上的特定键,KeyEvent类提供了键盘上每个键的常量用来判断是否按下了特定的键。
20
JTextArea 支持多行文本的操作 java.lang.Object -java.awt.Component
--java.awt.Container ---javax.swing.JComponent ----javax.swing.text.JTextComponent -----javax.swing.JTextArea 构造方法如下: JTextArea() JTextArea(int rows, int columns) JTextArea(String text) JTextArea(String text, int rows, int columns)
21
滑动条(JSlider) 滑动条使得用户能够通过一个滑块的来回移动来输入数据
JSlider(int min,int max,int value);
22
根面板(JRootPane)
23
根面板(JRootPane) 根面板由一个玻璃面板(glassPane)、一个内容面板(contentPane)和一个可选择的菜单条(JMenuBar)组成,而内容面板和可选择的菜单条放在同一分层。玻璃面板是完全透明的,缺省值为不可见,为接收鼠标事件和在所有组件上绘图提供方便。
24
根面板(JRootPane) JRootPane提供的方法:
Container getContentPane(); //获得内容 setContentPane(Container); //设置内容面 JMenuBar getMenuBar( ); //活动菜单条 setMenuBar(JMenuBar); //设置菜单条 JLayeredPane getLayeredPane(); //获得分层面板 setLayeredPane(JLayeredPane); //设置分层面板Component getGlassPane(); //获得玻璃面板setGlassPane(Component); //设置玻璃面板
25
分层面板(JLayeredPane) 两种分层面板:JLayeredPane,JDesktopPane。 JDesktopPane是JLayeredPane的子类,专门为容纳内部框架(JInternalFrame)而设置。 向一个分层面板中添加组件,需要说明将其加入哪一层,指明组件在该层中的位置:add(Component c, Integer layer, int position)
26
常用中间容器 1.面板(JPanel) 面板(JPanel)是一个轻量容器组件,用法与Panel相同,用于容纳界面元素,以便在布局管理器的设置下可容纳更多的组件,实现容器的嵌套。Jpanel, JscrollPane, JsplitPane, JinteralFrame都属于常用的中间容器,是轻量组件。Jpanel的缺省布局管理器是FlowLayout。
27
常用中间容器 2.滚动窗口(JScrollPane)
JscrollPane是带滚动条的面板,主要是通过移动JViewport(视口)来实现的。JViewport是一种特殊的对象,用于查看基层组件,滚动条实际就是沿着组件移动视口,同时描绘出它在下面"看到"的内容。
28
滚动窗口(JScrollPane)效果图
29
常用中间容器 3.分隔板(JSplitPane)
JSplitPane提供可拆分窗口,支持水平拆分和垂直拆分并带有滑动条。常用方法有: addImpl(Component comp,Object constraints,int index)//增加指定的组件 setTopComponent(Component comp) //设置顶部的组件 setDividerSize(int newSize) //设置拆分的大小 setUI(SplitPaneUI ui) //设置外观和感觉
30
分隔板(JSplitPane)效果图
31
常用中间容器 4.选项板(JTabbedPane)
JTabbedPane提供一组可供用户选择的带有标签或图标的开关键。常用方法: add(String title,Component component) //增加一个带特定标签的组件 addChangeListener(ChangeListener l) //选项板注册一个变化监听器
32
选项板(JTabbedPane)效果图
33
常用中间容器 5.工具栏(JToolBar) JtoolBar是用于显示常用工具控件的容器。用户可以拖拽出一个独立的可显示工具控件的窗口。常用方法有: JToolBar(String name) //构造方法 getComponentIndex(Component c) //返回一个组件的序号 getComponentAtIndex(int i) //得到一个指定序号的组件
34
工具栏(JToolBar)效果图 工具栏在左上角
35
常用中间容器 6.内部框架(JInternalFrame)
36
常用中间容器 6.内部框架( JInternalFrame) 如同一个窗口在另一个窗口内部
frame=new JFrame(“InternalFrameDemo”); JDesktopPane desktop=new JDesktopPane(); MyInternalFrame myframe=new MyInternalFrame(); desktop.add(myframe); myframe.setSelected(true); frame.setContentPane(desktop);
37
常用中间容器 6.内部框架( JInternalFrame)特点
(1)必须把内部框架添加到一个容器中(通常为JDesktopPane),否则不显示; (2)不必调用show()或setVisible()方法,内部框架随所在的容器一起显示; (3)必须用setSize()或pack()或setBounds方法设置框架尺寸,否则尺寸为零,框架不能显示;
38
常用中间容器 6.内部框架(JInternalFrame)
(4)可以用setLocation()或setBounds( ) 方法设置内部框架在容器中的位置,缺省值为0,0,即容器的左上角; (5)象顶层JFrame一样,对内部框架添加组件也要加在它的内容面板上; (6)在内部框架中建立对话框,不能使用JDialog作为顶层窗口,必须用JOptionPane或JInternalFrame; (7)内部框架不能监听窗口事件,可以通过监听与窗口事件类似的内部框架(JInternalFrameEvent)处理内部框架窗口的操作。
39
文件选择器(JFileChooser)
40
菜单( JMenu ) JMenu与AWT的菜单Menu的不同之处是它可以通过
setJMenuBar(menubar)将菜单放置到容器中的任意地方
41
菜单 JMenuBar类(JComponent的子类)包含所有菜单栏所必须的方法
JMenuItem类(AbstractButton的子类)包含管理菜单项所必须的方法 JMenu类(JMenuItem的子类)包括管理菜单所必须的方法 JCheckBoxMenuItem类(JMenuItem的子类)包括管理具有开关状态的菜单项所必须的方法,当选中某个JCheckBoxMenuItem时,会在菜单项的左边出现一个对号。
42
进程条(JProgressBar) 进程条是提供一个直观的图形化的进度描述, 从"空"到"满"的过程。
JProgressBar(int min,int max);
43
表格(JTable) 表格是Swing新增加的组件,主要功能是把数据以二维表格的形式显示出来。使用表格,依据M-V-C的思想,最好先生成一个MyTableModel类型的对象来表示数据,这个类是从AbstractTableModel类中继承来的,其中有几个方法是一定要重写,例如getColumnCount,getRowCount,getColumnName,getValueAt。因为Jtable会从这个对象中自动获取表格显示所必需的数据,AbstractTableModel类的对象负责表格大小的确定(行、列)、内容的填写、赋值、表格单元更新的检测等等一切跟表格内容有关的属性及其操作。JTable类生成的对象以该TableModel为参数,并负责将TableModel对象中的数据以表格的形式显示出来。
44
表格(JTable) JTable类常用的方法有: getModel() //获得表格的数据来源对象
JTable(TableModel dm) //dm对象中包含了表格要显示的数据 //下列两个构造方法,第一个参数是数据,第二个参数是表格第一行中显示的JTable(object[][]rowData,object[]columnNams); JTable(Vector[][]rowData,Vector[]columnNams);
45
树(JTree) 要显示一个层次关系分明的一组数据,用树状图表示能给用户一个直观而易用的感觉,JTree类如同Windows的资源管理器的左半部,通过点击可以“打开”、“关闭”文件夹,展开树状结构的图表数据。JTree也是依据M-V-C的思想来设计的,Jtree的主要功能是把数据按照树状进行显示,其数据来源于其它对象。 构造方法: JTree(Object[] value); JTree(Vector value);
46
树(JTree)显示效果
47
作业 利用Swing组件编写一个用户登录功能 利用Swing组件编写一个带菜单的标准版计算器功能。
Similar presentations