java里的swing教程.ppt

上传人:xiao****1972 文档编号:22710275 上传时间:2021-05-30 格式:PPT 页数:41 大小:1.03MB
返回 下载 相关 举报
java里的swing教程.ppt_第1页
第1页 / 共41页
java里的swing教程.ppt_第2页
第2页 / 共41页
java里的swing教程.ppt_第3页
第3页 / 共41页
点击查看更多>>
资源描述
GUI入门 了解 AWT以及 java.awt包 了解 Swing组件和 javax.swing包 手工编码实现 GUI程序 掌握常用基本 Swing组件的使用方法 掌握常用布局管理器 流式布局( FlowLayout) 边界布局( BorderLayout) 网格布局( GridLayout) 使用面板( JPanel)实现复杂布局 GUI入门 手工编码实现 GUI程序 掌握常用基本 Swing组件的使用方法 掌握常用布局管理器 流式布局( FlowLayout) 边界布局( BorderLayout) 网格布局( GridLayout) GUI的概念 到目前为止,我们在 C和 Java中编写的都是基于控制台的 程序; GUI( Graphical User Interface)即图形用户界面,它 能够使应用程序看上去更加友好; Java语言之所以如此流行的一个主要原因,就是因为它支 持 GUI; AWT简介 上一章我们已经知道,实现 GUI编程是由一系列图形化组 件来完成的(即一系列定义好的类),这些组件也被称为 控件; 在 Java的早期版本中, GUI组件由名为 AWT( Abstract Window Toolkit,抽象窗口工具包)的标准库来提供; 除了 GUI组件外, AWT还包括其它功能来支持图像绘画、处 理剪切 /复制类型的数据传送,以及其它相关操作。 java.awt包 java.awt包是 Java内置的包,属于 Java基础类库( JFC) 的一部分,其中包括以下内容: 便于用户输入的一组丰富的界面组件; 将组件放置在适当位置的几种布局管理器; 事件处理模型; 图形和图像工具等等。 要使用到该包中的类,则必须显式地声明如下语句: import java.awt.*; AWT组件的类体系结构 Component Button Checkbox Container Choice Canvas TextComponent Label Panel Applet Frame Dialog Window TextArea TextField AWT编程示例 AWT组件最大的缺陷是它依赖于操作系统,也就是说, AWT 程序运行在不同的操作上会有不同的外观和行为,这一点 对于 Java的平台无关性来讲,是无法容忍的。 Swing简介以及 javax.swing包 Swing组件是在 AWT组件基础上发展而来的轻量级组件,与 AWT相比不但改进了用户界面,而且所需的系统资源更少; Swing是纯 Java组件,使得应用程序在不同的平台上运行 时具有相同外观和相同的行为。 javax.swing包中包含了一系列 Swing组件,如果要使用该 包中的类,则必须显式地声明如下语句: import javax.swing.*; Swing组件的类体系结构 JFrame Frame JDialog Dialog Window JComponent Container Component Object JOptionPane JMenuBar JList JLabel JComboBox JText JPanel JScrollBar AbstractButton JMenuItem JButton JToggleButton JMenu JRadioButton JCheckBox JTextField JTextArea 常用的基本 Swing组件 在 Swing编程中,有一些经常要使用到的组件,其中包括: JFrame(窗体,框架) JButton(按钮) JLabel(标签) JTextField(文本框) javax.swing.JFrame JFrame组件用于在 Swing程序中创建窗体; JFrame类的构造方法有 4种重载方式,以下是常用的几种: 构 造 方 法 说 明 JFrame() 创建新窗体,该窗体初始为不可见 JFrame(String title) 创建新窗体,使用参数 title指定标题,该窗体初始为不可见 JFrame的常用方法 方 法 原 型 说 明 void setTitle(String title) 设置窗体标题,标题内容由参数 title指定 void setSize(int width, int height) 设置窗体的大小,参数 width指定宽度,参数 height指定高度,单位为像素 void setResizable(boolean resizable) 设置窗体能否调整大小,由参数 resizable决定 void setVisible(boolean b) 设置窗体是否为可见,由参数 b决定, true为可见,false为不可见 Container getContentPane() 获得当前窗体的内容面板 void setDefaultCloseOperation(int operation) 设置窗体在关闭时默认执行的操作 void dispose() 释放当前窗体及其所有子组件所占用的资源,即卸载窗体 void repaint() 重新绘制当前窗体 创建窗体 对于类似于窗体这样的容器组件,我们一般自定义一个类, 继承于 JFrame类,然后将窗体中的子组件作为类中成员进 行声明,以方便操作,如: public class MyFrame extends JFrame 容器组件是指可以容纳其它组件的组件。 创建窗体示例 import javax.swing.*; /导入必要的包 /*自定义窗体类,继承于 JFrame类 */ public class MyFrame extends JFrame /*构造方法 */ public MyFrame() /super(这是我的第一个窗体 ); /利用父类的构造方法设置标题 this.setTitle(这是我的第一个窗体 ); /设置窗体的标题 this.setSize(300, 200); /设置窗体的大小 this.setVisible(true); /设置窗体为可见,即显示窗体 /*main方法,程序入口 */ public static void main(String args) MyFrame mf = new MyFrame(); /创建窗体实例 窗体的内容面板 一个完整的窗体是由外部框架和内容面板两部分组成的; 外部框架是指由标题栏和四边所组成空心边框,它主要用 来控制窗体的大小和外观; 我们实际操作的是内容面板,如设置窗体的背景色,设置 窗体的布局,往窗体中添加其它组件等等; 使用 getContentPane方法获得当前窗体的内容面板,该方 法的返回值是 Container(容器)类对象,如: Container contentPane = getContentPane(); Container类在 java.awt包中。 java.awt.Container Container类通常用于操作 JFrame的内容面板,其常用的 方法有: 方 法 原 型 说 明 void setBackground(Color bg) 设置容器的背景色,由参数 bg指定颜色 void setLayout(LayoutManager mgr) 设置容器的布局,参数是布局管理器 Component add(Component comp) 往容器中添加一个组件 Component add(Component comp, int index) 将指定组件添加到容器中的指定位置上 void remove(Component comp) 从容器中移除指定的组件 void removeAll() 从容器中移除所有组件 void repaint() 重新绘制当前容器 内容面板示例 import java.awt.*; /Container类和 Color类在此包中 import javax.swing.*; public class ContentPaneDemo extends JFrame public ContentPaneDemo() super(内容面板示例 ); /获得当前窗体的内容面板 Container contentPane = this.getContentPane(); /设置内容面板的背景色为红色 contentPane.setBackground(Color.RED); setSize(300, 200); setResizable(false); /设置窗体不可调整大小 setVisible(true); public static void main(String args) ContentPaneDemo cpd = new ContentPaneDemo(); java.awt.Color Color类用于创建颜色对象,其构造方法共有 7种重载方式, 以下是常用的几种: Color类中还提供一系列静态的颜色常量: 构 造 方 法 说 明 Color(int r, int b, int g) 使用指定的红、蓝、绿的色值( 0255)创建 sRGB颜色对象 常 量 颜 色 常 量 颜 色 Color.BLACK 黑色 Color.BLUE 蓝色 Color.CYAN 青色 Color.DARK_GRAY 深灰色 Color.GRAY 灰色 Color.GREEN 绿色 Color.LIGHT_GRAY 浅灰色 Color.MAGENTA 洋红色 Color.ORANGE 桔黄色 Color.PINK 粉红色 Color.RED 红色 Color.WHITE 白色 Color.YELLOW 黄色 javax.swing.JButton 在 Swing程序中,按钮可能是使用量最大的组件之一, JButton则是用来创建按钮的; JButton类的构造方法有 5种重载方式,以下是常用的几种: 构 造 方 法 说 明 JButton() 创建一个空按钮 JButton(String text) 创建一个带文本的按钮 JButton(Icon icon) 创建一个带图标的按钮 JButton(String text, Icon icon) 创建一个带文本和图标的按钮 JButton的常用方法 方 法 原 型 说 明 void setText(String text) 设置按钮上的文本 String getText() 获得按钮上的文本 void setBackground(Color bg) 设置按钮的背景色 Color getBackground() 获得按钮的背景色 void setEnabled(boolean b) 设置启用(或禁用)按钮,由参数 b决定 void setVisible(boolean b) 设置按钮是否为可见,由参数 b决定 void setToolTipText(String text) 设置按钮的悬停提示信息 void setMnemonic(int mnemonic) 设置按钮的快捷键 javax.swing.JLabel JLabel是最简单的 Swing组件之一,用于在窗体上显示标 签, JLabel既可以显示文本,也可以显示图像; JLabel类的构造方法有 6种重载方式: 构 造 方 法 说 明 JLabel() 创建一个空的标签 JLabel(String text) 创建一个带文本的标签 JLabel(String text, int ha) 创建一个带文本的标签,并指定其对齐方式,可以是JLabel.LEFT、 JLabel.CENTER和 JLabel.RIGHT JLabel(Icon image) 创建一个带图像的标签 JLabel(Icon image, int ha) 创建一个带图像的标签,并指定其对齐方式 JLabel(String text, Icon image, int ha) 创建一个带文本和图像的标签,并指定其对齐方式 JLabel的常用方法 方 法 原 型 说 明 void setText(String text) 设置标签上的文本 String getText() 获得标签上的文本 void setIcon(Icon icon) 设置标签中的图像 Icon getIcon() 获得标签中的图像 void setHorizontalAlignment(int alignment) 设置标签中文本的对齐方式 void setVisible(boolean b) 设置标签是否为可见 javax.swing.JTextField JTextField是文本框组件,主要用来接受用户的输入; JTextField类的构造方法有 5种重载方式,以下是常用的 几种: 构 造 方 法 说 明 JTextField() 创建一个空的文本框 JTextField(String text) 创建一个带文本的文本框 JTextField(int columns) 创建一个指定列数的空文本框 JTextField(String text, int columns) 创建一个带文本,并指定列数的文本框 JTextField的常用方法 方 法 原 型 说 明 void setText(String text) 设置文本框中的文本 String getText() 获得文本框中的文本 void setHorizontalAlignment(int alignment) 设置文本框中文本的对齐方式,可以是 JTextField.LEFT、JTextField.CENTER和 JTextField.RIGHT void setEditable(boolean b) 设置文本框是否可以编辑,由参数 b决定 void setEnabled(boolean enabled) 设置启用(或禁用)文本框 void setVisible(boolean b) 设置文本框是否为可见 布局管理器 用户界面上的组件可以按照不同的方式进行排列,例如: 可以依序水平排列,或者按网格方式进行排列; 每种方案都是指组件的一种 布局 ,要管理这些布局,就需 要使用布局管理器; 布局管理器是一组实现了 java.awt.LayoutManager接口的 类,由这些类自动定位组件; 布局管理器类在 java.awt包中。 几种常用布局 流式布局 java.awt.FlowLayout 边界布局 java.awt.BorderLayout 网格布局 java.awt.GridLayout 流式布局示例 import java.awt.*; /布局管理器在此包中 import javax.swing.*; public class FlowLayoutDemo extends JFrame private JTextField txt1, txt2, txt3, txt4; /声明 4个文本框 public FlowLayoutDemo() super(流式布局示例 ); /使用父类的构造方法设置窗体标题 txt1 = new JTextField(文本框 1); /分别实例化 4个文本框 txt2 = new JTextField(文本框 2); txt3 = new JTextField(文本框 3); txt4 = new JTextField(文本框 4); Container me = getContentPane(); /获取当前窗体的内容面板 me.setLayout(new FlowLayout(); /设置内容面板的布局为流式布局 me.add(txt1); /分别将 4个文本框添加到内容面板中 me.add(txt2); me.add(txt3); me.add(txt4); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); public static void main(String args) new FlowLayoutDemo(); /实例化窗体,匿名对象 边界布局示例 public class BorderLayoutDemo extends JFrame private JButton btn1, btn2, btn3, btn4, btn5; /声明 5个按钮 public BorderLayoutDemo() btn1 = new JButton(北边按钮 ); /分别实例化 5个按钮 btn2 = new JButton(南边按钮 ); btn3 = new JButton(西边按钮 ); btn4 = new JButton(东边按钮 ); btn5 = new JButton(中间按钮 ); Container me = getContentPane(); me.setLayout(new BorderLayout(); /设置内容面板的布局为边界布局 me.add(btn1, BorderLayout.NORTH); /分别将按钮添加到内容面板的各个方位 me.add(btn2, BorderLayout.SOUTH); me.add(btn3, BorderLayout.WEST); me.add(btn4, BorderLayout.EAST); me.add(btn5, BorderLayout.CENTER); setTitle(边界布局示例 ); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); public static void main(String args) new BorderLayoutDemo(); 网格布局示例 import java.awt.*; import javax.swing.*; public class GridLayoutDemo extends JFrame private JButton btnAry; /声明按钮数组 public GridLayoutDemo() btnAry = new JButton9; /创建有 9个按钮引用的数组 Container me = getContentPane(); me.setLayout(new GridLayout(3, 3); /将内容面板设置为 3行 3列的网格布局 /循环实例化按钮,并逐一将按钮添加到内容面板上 for (int i = 0; i btnAry.length; i+) btnAryi = new JButton(按钮 + (i + 1); me.add(btnAryi); setTitle(网格布局示例 ); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setVisible(true); public static void main(String args) new GridLayoutDemo(); 复杂布局 单独使用某种布局管理器很难实现相对复杂的布局效果, 这往往需要多个布局管理器配合使用; 如下面的 “ 猜数字游戏 ” 界面,就是边界布局配合网格布 局实现的效果。 整个窗体的 内容面板采 用边界布局 边界布局的南 面嵌套 1行 3列 的网格布局 javax.swing.JPanel JPanel提供面板组件,它是轻量级的容器组件; 面板中可以添加其它组件,也可以设置布局,我们一般使 用面板来实现布局嵌套; JPanel类的构造方法有 4种重载方式,以下是常用的几种: 构 造 方 法 说 明 JPanel() 创建一个空面板 JPanel(LayoutManaer layout) 创建带有指定布局的面板 JPanel的常用方法 JPanel(面板)的操作方式与 Container(内容面板)很 相似,以下是一些常用方法: 方 法 原 型 说 明 void setBackground(Color bg) 设置面板的背景色,由参数 bg指定颜色 void setLayout(LayoutManager mgr) 设置面板的布局,参数是布局管理器 Component add(Component comp) 往面板中添加一个组件 Component add(Component comp, int index) 将指定组件添加到面板中的指定位置上 void remove(Component comp) 从面板中移除指定的组件 void removeAll() 从面板中移除所有组件 void repaint() 重新绘制当前面板 事件处理 对于采用了图形用户界面的程序来说,事件控制是非常重 要的; 到目前为止,我们编写的图形用户界面程序都仅仅只是完 成了界面,而没有任何实际的功能,要实现相应的功能, 必须进行事件处理; 用户与 GUI组件进行交互就会发生事件,如:按下一个按 钮、用键盘输入一个字符、点击鼠标等等; 当前我们要关注的并不是 “ 事件是如何产生的 ” ,而是讨 论当发生事件后,我们应当 “ 如何处理之 ” 。 事件处理模型 Java中,事件处理的基本思路如下: 一个源(事件源)产生一个事件(事件对象)并把它送到 监听器那里,监听器只是简单地等待,直到它收到一个事 件,一旦事件被接受,监听器将处理这些事件; 一个事件源必须注册监听器以便监听器可以接受关于一个 特定事件的通知。 事件源与事件 当在一个图形用户界面点击鼠标或者按下键盘时,都是针 对于具体组件而发生的动作,如:使用鼠标点击某个按钮; 按下键盘向文本框输入内容等等; 我们把动作所操纵的对象称为 事件源 ,请注意:事件源一 定是指某个组件; 当针对于事件源发生动作时,就会产生一个事件 。 监听器与监听器接口 针对每一类型的事件,都有与之相对应的 监听器 ,用于监 听事件的发生; 在 Java中,监听器由一系列接口来提供; 实际上,事件监听器就是实现了事件监听接口的类,监听 器不断监听事件源的动作,当事件源产生一个事件后,监 听器接收到事件源的通知,就调用特定的方法,以执行指 定的动作。 特定的事件监听器只对特定的事件感兴趣。 java.awt.event包 java.awt.event包中包含了一系列与事件处理相关的类和 接口,其中包括:监听器接口,事件对象和事件适配器等; 一般来说,编写图形用户界面程序都必须显式地导入此包; 每种事件监听器接口都是以类似于 XxxListener 的形式来命名的,如: ActionListener、 MouseListener、 ItemListener等; ActionListener接口 按钮被点击是图形编程中最普遍的事件,我们经常要处理; ActionListener被称为活动监听器,一般用来监听按钮的 点击事件; 该接口中包含有一个抽象方法,原型如下: public void actionPerformed(ActionEvent ae); 实现该监听器接口必须重写上面的方法。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDemo extends JFrame implements ActionListener private JLabel lblMsg; private JButton btnClick; public EventDemo() lblMsg = new JLabel(请点击下面的按钮 .); btnClick = new JButton(请点击我 ); Container cpMe = getContentPane(); cpMe.setLayout(new BorderLayout(); cpMe.add(lblMsg, BorderLayout.CENTER); cpMe.add(btnClick, BorderLayout.SOUTH); setTitle(ActionListener Demo); btnClick.addActionListener(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setResizable(false); /设置不允许用户自行调整窗口大小 setVisible(true); public void actionPerformed(ActionEvent ae) lblMsg.setText(我被点击了! ); /设置标签中的文本 public static void main(String args) new EventDemo(); import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDemo extends JFrame private JLabel lblMsg; private JButton btnClick; public EventDemo() lblMsg = new JLabel(请点击下面的按钮 .); btnClick = new JButton(请点击我 ); Container cpMe = getContentPane(); cpMe.setLayout(new BorderLayout(); cpMe.add(lblMsg, BorderLayout.CENTER); cpMe.add(btnClick, BorderLayout.SOUTH); setTitle(ActionListener Demo); btnClick.addActionListener(new MyListener(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setResizable(false); /设置不允许用户自行调整窗口大小 setVisible(true); class MyListener implements ActionListener public void actionPerformed(ActionEvent ae) /实现事件处理函数 lblMsg.setText(我被点击了! ); public static void main(String args) new EventDemo(); import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDemo extends JFrame private JLabel lblMsg; private JButton btnClick1; private JButton btnClick2; public EventDemo() lblMsg = new JLabel(请点击下面的按钮 .); btnClick1 = new JButton(确定 ); btnClick2 = new JButton(取消 ); Container cpMe = getContentPane(); cpMe.setLayout(new FlowLayout(); cpMe.add(lblMsg); cpMe.add(btnClick1); cpMe.add(btnClick2); setTitle(ActionListener Demo); btnClick1.addActionListener(new MyListener(); btnClick2.addActionListener(new MyListener(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setResizable(false); /设置不允许用户自行调整窗口大小 setVisible(true); class MyListener implements ActionListener public void actionPerformed(ActionEvent ae) /实现事件处理函数 if(ae.getSource()=btnClick1) lblMsg.setText(确定! ); if(ae.getSource()=btnClick2) lblMsg.setText(取消! ); public static void main(String args) new EventDemo();
展开阅读全文
相关资源
相关搜索

最新文档


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


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

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


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