第8章 Swing图形用户界面程序设计
第8章图形界面
图形用户界面(Graphical User Interface) 图形用户界面
GUI编程的主要内容 编程的主要内容
图形界面对象及其框架:图形界面对象之间的包含关系 图形界面对象及其框架 图形界面对象之间的包含关系 图形界面对象的布局:图形界面对象之间的位置关系 图形界面对象的布局 图形界面对象之间的位置关系 图形界面对象上的事件响应:图形界面对象上的动作 图形界面对象上的事件响应 图形界面对象上的动作
AWT组件 组件
java.awt及相关包中包含了一个完整的类集以支持 及相关包中包含了一个完整的类集以支持GUI 及相关包中包含了一个完整的类集以支持 程序的设计,其中的类及相互关系可以用下图来描述: 程序的设计,其中的类及相互关系可以用下图来描述 ng.Object 事件类 字体类 Button Checkbox Graphics 颜色类 图象类 菜单类
public void setText(String label) 设置显示的字符串
import java.awt.*; public class LabelTest { public static void main(String args[]) { Label label1, label2; Frame f=new Frame("LabelTest"); f.setLayout(new FlowLayout()); label1=new Label(""); label1.setText("姓名 姓名"); 姓名 label2=new Label("年龄 年龄"); 年龄 f.add(label1); f.add(label2); f.setSize(200,100); f.setVisible(true); } }
8.1 Swing图形用户界面程序设计
第8章Swing图形用户界面程序设计8.0:GUI概述Java语言提供两种图形用户界面,即AWT(早期版本)和Swing(增强了功能、减少了平台相关性)。
一方面:Swing图形用户界面比AWT图形用户界面可以克服更多的操作系统不同所带来的图形界面或交互方式上的差别;另一方面:Swing图形用户界面还增加了功能,可以定制指定的操作系统风格的图形用户界面。
8.1:组件和容器组件和容器是Swing图形用户界面的组成部分。
在Swing图形用户界面程序设计中,要求按照一定的布局方式将组件和容器的组合添加到给定的容器中。
这样,通过组件和容器的组合就形成图形用户界面。
然后通过事件处理的方式实现在图形界面上的人机交互。
8.1.1 整体介绍容器本身也是组件。
按组件和容器的用途来分:顶层容器、一般容器、专用容器、基本控件、不可编辑信息组件和可编辑组件。
1:顶层容器主要有三种:小应用程序(Applet和JApplet)、对话框(Dialog 和JDialog)和框架(Frame和JFrame)。
这三种容器在AWT图形用户界面中对应的类分别是java.applet.Applet、java.awt.Dialog和java.awt.Frame;在Swing图形用户界面中对应的类分别是javax.swing.JApplet、javax.swing.JDialog和javax.swing.JFrame,这些名称均以“J”开头。
小应用程序主要用来设计嵌入在网页中运行的程序;对话框通常用来设计具有依赖关系的窗口;框架主要用来设计应用程序的图形界面。
2:一般容器包括面板(Jpanel)、滚动窗格(JScrollPane)、分裂窗格(JSplitPane)、选项卡窗格(JTabbedPane)和工具条(JtoolBar)。
面板通常是只有背景色的普通容器;滚动窗格具有滚动条;分裂窗格是用来装两个组件的容器;选项卡窗格允许多个组件共享相同的界面空间;工具条通常将多个组件(通常是带图标的按钮组件)排成一列或一排。
Java基础案例教程第8章 GUI(图形用户界面)
8.1 AWT概述
2.Panel Panel也是一个容器,但是它不能单独存在,只能存在其他容器(Window或其 子类)中,一个Panel对象代表了一个长方形的区域,在这个区域中可以容纳 其他组件。在程序中通常会使用Panel来实现一些特殊的布局。
案例代码
了解了AWT组件的相关类后,为了使读者对GUI有一个更直观的认识, 接下来通过一个案例来创建一个简单的图形界面,请查看教材文件8-1。
了对应的Java类,这些类都位于java.awt包中,接下来通过一个图例来描述这些
类的继承关系,如图所示。
从图的继承关系可以看出,在AWT中组件分为两大类,这两类的基类分别是 Component和MenuComponent。其中,MenuComponent是所有与菜单相关组 件的父类,Component则是除菜单外其他AWT组件的父类,它表示一个能以图 形化方式显示出来,并可与用户交互的对象。
8.2 布局管理器
GridBagLayout
GridBagLayout(网格包布局管理器)是最灵活、最复杂的布局管理器。与
GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,
而且允许一个组件跨越一个或者多个网格。 使用GridBagLayout布局管理器的步骤如下:
(1)创建GridbagLayout布局管理器,并使容器采用该布局管理器
(2)创建GridBagContraints对象(布局约束条件),并设置该对象的相关属性
8.2 布局管理器
(3)调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控 组件之间的关联
第八章 GUI(图形用户界面)
Java程序设计:第八章 Swing图形界面程序设计
原型 public FlowLayout(int align )
描述
FlowLayerout布局时,组件在容器以从左到右,从 上到下的方式排列。 align用于指定行对齐方式, FlowLayout.LEFT表示左 对齐,相应的有右对齐和居中对齐。
java.awt.Container的成员JLabel(2)
JFrame的成员方法
原型
public JFrame( ) public JFrame(String title) public void setDefaultCloseOperation( int operation) public void setSize(int width, int height) public void setVisible(boolean b) public Container getContentPane()
描述 构造一个无标题不可见的框架 构造一个标题为title的框架 设置当关闭框架时的操作,例如operation为 JFrame.EXIT_ON_CLOSE时表示退出程序
设置框架的大小
设置框架是否可见 返回当前框架的内容窗格
7
组件和容器 -JFrame和JLabel(3)
FlowLayout布局的成员方法:
4
组件和容器(3)
一般容器包括: 面板JPanel,滚动窗格JScrollPane,选项卡 窗格JTabbedPane和工具栏JToolBar。
专用容器包括:内部框架(JInternalFrame),分层窗格 (JLayedPane)、根窗格(JRootPane)、玻璃窗格(GlassPane )、内 容窗格(ContentPane)。
描述 构造一个父窗口为owner,标题为title,模式为 modal的对话框。Modal为true表示有模式,为false 表示无模式 设置对话框的大小
第八章 图形用户界面
方法
方法 public void repaint() public void stop() public void destroy()
调用时机和用途 在响应用户和Applet的交互时经常要 用到。通常只是调用,而不重写这个 方法。对于轻量级组件,它调用组件 的paint方法,对重量级组件它调用组 件的update方法,由update调用paint 用户离开Applet所在的HTML页时调 用该方法,它执行挂起Applet所需的所 有任务,例如停止动画和线程 用户关闭浏览器窗口,Applet将从内 存中移走的时候调用该方法
用当前色绘制实心三维矩形, 各参数含义同draw3DRect。 用xPoints,yPoints数组指定的 点的坐标依次相连绘制多边形, 共选用前nPoints个点。 绘制实心多边形,各参数含义 同drawPolygon。
public void fillPolygon(int[] xPoints, int [] yPoints, int nPoints) public void drawOval(int x, int y, int width, int height)
用指定的width和height绘制一个 矩形,该矩形的左上角坐标为 (x,y)
用指定的width和height绘制一个 实心矩形,该矩形的左上角坐标 为(x,y) 17
用指定的width和height,以当前背 public void clearRect(int x, int 景色绘制一个实心矩形。该矩形的 y, int width, int height) 左上角坐标为(x,y) public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
第8章 Swing组件
第8章Swing组件在第7章中,介绍了用AWT创建图形用户界面的基本原理。
在java.awt包中,提供了各种具体的组件,如Frame、Panel、Button、Label等。
AWT组件的优点是简单、稳定,同时兼容于任何JDK版本,缺点是依赖于本地操作系统的GUI,缺乏平台的独立性。
为了实现跨平台,使得用java创建的图形界面在不同操作系统中保持相同的外观,从JKD1.2版本开始引入了Swing组件,这些组件位于javax.swing包中, Swing GUI组件定义了相对于java.awt 包更多、更强的功能,可以使用户更加灵活方便的进行GUI的设计。
Swing组件时用纯Java语言编写的,不依赖于本地操作系统的GUI,Swing组件可以跨平台运行。
独立于本地平台的Swing组件被称为轻量级组件,而依赖于本地平台的AWT组件被称为重量级组件。
多数Swing组件的父类为javax.swing.JComponent,JComponent 的直接父类为java.awt.Container,与AWT中的Window与Panel处于同一个继承类层次。
多数Swing组件类都是以大写字母“J”开头,图8-1显示了Swing组件的类层次结构。
从图中可以看出,除JFrame外,其余的Swing组件都继承自JComponent类。
图8-1 Swing组件的类层次结构8.1 容器组件8.1.1 JFrameJFrame是用来替代AWT包中Frame的,可以实现与Frame相同的功能,包括作为容器容纳其他组件,显示组件等。
[例8-1]import javax.swing.*;import java.awt.*;class JFrameTest extends JFrame{private JButton button1 = new JButton("button1");private JButton button2 = new JButton("button2");public JFrameTest(String title){super(title);//设置标题this.setBounds(50,50,200,150);//获得与JFrame关联的contentPane,contentPane默认的布局管理器是BorderLayoutContainer contentPane = this.getContentPane();contentPane.setLayout(new FlowLayout(5));contentPane.add(button1);contentPane.add(button2);this.setVisible(true);//设置JFrame对关闭按钮的处理方式this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}public class Test8_1 {public static void main(String[] args) {new JFrameTest("JFrame测试");}}程序运行界面如下:图8-2 例8-1运行界面利用JFrame实现了与Frame相同的功能,但JFrame与Frame在使用上还是有很大区别的。
第八章图形用户界面设计
4、事件处理
要使图形界面上各种组件能处理命令,接收用户的操 作,就必须给各个组件加上事件处理机制。事件就是描述 发生了什么的对象,存在各种不同类型的事件类用来描述 各种类型的用户交互,最常见的如键盘键入、单击鼠标等。 事件处理是用户界面组件的基础,各种用户界面组件都是 通过事件来实现的。 1)事件处理机制
知识点
1.AWT 2.Swing 3.布局管理器 4.事件处理 5.基本图形用户界面设计
1、AWT
1)AWT简介 抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序
提供的建立图形用户界面GUI (Graphics User Interface)工具集。AWT中 定义了多种类和接口用于Java的applet和applications中进行GUI设计。 图形界面程序中可以使用各种各样的图形界面元素,如文本框、按钮、 对话框等,我们将这些图形界面元素称为GUI组件。AWT为各种GUI 组件提供了对应的Java组件类,这些组件类都是ponent的 直接或间接类。
Java AWT采取的事件处理机制是当事件发生时,事件源将事件 对象发送给所有已经注册了的事件监听器,事件监听器根据事件对象 封装的信息来响应事件。
1) 用getContentPane( )方法获得JFrame的内容面板,再对其加入组 件:frame.getContentPane().add(childComponent)
2) 建立一个Jpanel或 JDesktopPane之类的中间容器,把组件添加 到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
6)BoxLayout
第八章图形用户界面(Swing)解析
java.awt.event
事件处理
java.awt.font
关于字型的类
java.awt.geom
提供定义及操作2D几何对象所需的Java 2D类
java.awt.im
输入方法结构类
java.awt.im.spi
提供界面供开发输入方法,可用于任何执行阶段环境
java.awt.image
图像处理类
java.awt.image.renderable 制造rendering - independent图像所需的类
8.2.1 基本用户界面简介
Swing基本组件都是JComponent类的子类,这些组件可独立 存在于Applet和Application中,提供了小巧灵活的交互功能。 JComponent类包含了一些方法来设置组件的属性,如:改变背 景颜色、定义显示文本的字体等。JComponent的常用方法如下:
void setLocation (Point p)
使用屏幕坐标;否则使用该容器的坐标
Point getLocation ( )
获得组件的左上角位置。
Point getLocationOnScreen( )
获得组件左上角的位置。该值使用屏幕坐标
void setSize (int width,int height)或 重新设置组件的大小
第八章 图形用户界面
8.1 Java的图形用户界面简介 8.2 基本用户界面 8.3 组件布局管理器 8.4 事件处理 8.5 高级图形用户界面
8.1 Java的图形用户界面简介
• 图形用户界面(GUI)是一种方便的人机界面,它 通过图形的方式,借助菜单、按钮等图形界面组件 和鼠标操作,在用户和计算机之间进行交互。构成 GUI的基本要素是组件,组件分为基本的控制组件 和容器。
【兔惊喜】Java语言程序设计实验八第八章Swing图形用户界面程序设计实验任务一
实验报告课程Java语言程序设计实验名称第八章Swing图形用户界面程序设计实验任务(一)第页专业班级学号__ __ 姓名实验日期:2010 年11 月 2 日报告退发(订正、重做)一、实验目的•掌握框架、对话框、面板等容器的使用•掌握标签、按钮等组件的使用•初步了解java图形界面事件处理机制的原理二、实验环境1、微型计算机一台2、DOS或WINDOWS操作系统,j2se开发包三、实验内容1、创建一个框架类实例对象app作为窗体2、往窗体里添加三个按钮(b1、b2、b3)、两个标签(l1,l2)、三个文本输入框(t1、t2、t3),要求标签即包含一个图标也包含文本,且文本覆盖在图标的上面.3、可以在t1中输入文本信息,点击按钮b1后,标签l1的内容被设置为t1中的文本信息.4、点击按钮t2时,弹出一个有模一般对话框,对话框中包含一个文本编辑框(dt)和两个按钮(db1、db2),db1为确认按钮,db2为取消按钮,当点击对话框db1确定按钮时,将文本编辑框dt中的文本信息返回,当点击取消或直接关闭对话框,返回值为:“点击取消或关闭”.将对话框的返回值在t2中显示.5、点击按钮t3时,弹出一个选择输入对话框(标准对话框之一).要求将该对话框的返回值在t3中显示.6、设计一个计算器,要求见第八章习题6四、实验步骤和结果1.在Eclipse中新建名字为test7的工程.2.新建swingtest.java类.3.实验内容1至5程序如下所示:// swing1.javaimport java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import javax.swing.BoxLayout;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class swingtest extends JFrame{public static void main(String[] args){final JFrame app=new JFrame();// 创建按钮、标签、文本输入框这三类面板JPanel jpbt=new JPanel();JPanel jplabel=new JPanel();JPanel jptextfield=new JPanel();// 采用盒式布局管理器// 按钮在窗体南部,标签在北部,文本输入框在中部jpbt.setLayout(new BoxLayout(jpbt, BoxLayout.X_AXIS));//组件在容器中沿水平方向排列JButton b1=new JButton("b1");JButton b2=new JButton("b2");final JButton b3=new JButton("b3");jpbt.add(b1);jpbt.add(b2);jpbt.add(b3);jplabel.setLayout(new BoxLayout(jplabel, BoxLayout.X_AXIS));final JLabel l1=new JLabel("l1",newImageIcon("photo/22.jpg"),JLabel.LEFT);JLabel l2=new JLabel("l2",newImageIcon("photo/33.jpg"),JLabel.LEFT);l1.setHorizontalTextPosition(JLabel.CENTER);l2.setHorizontalTextPosition(JLabel.CENTER);jplabel.add(l1);jplabel.add(l2);jptextfield.setLayout(new BoxLayout(jptextfield, BoxLayout.X_AXIS));final JTextField t1=new JTextField("t1");final JTextField t2=new JTextField("t2");final JTextField t3=new JTextField("t3");jptextfield.add(t1);jptextfield.add(t2);jptextfield.add(t3);b1.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0){l1.setText(t1.getText());}});b2.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0){final JDialog jd=new JDialog(app,"对话框!",true);Container c=jd.getContentPane();c.setLayout(new FlowLayout());final JTextField jt=new JTextField(10);JButton db1=new JButton("db1");db1.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0){t2.setText(jt.getText());jd.dispose();}});JButton db2=new JButton("db2");db2.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0){t2.setText("点击取消或关闭");jd.dispose();}});/* //当点击"直接关闭对话框",返回值为:“点击取消或关闭”.* jd.addWindowListener(new WindowListener(){@Overridepublic void windowOpened(WindowEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void windowIconified(WindowEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void windowDeiconified(WindowEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void windowDeactivated(WindowEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void windowClosing(WindowEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void windowClosed(WindowEvent arg0) {// TODO Auto-generated method stubt2.setText("点击取消或关闭");}@Overridepublic void windowActivated(WindowEvent arg0) {// TODO Auto-generated method stub}});*/c.add(jt);c.add(db1);c.add(db2);jd.pack();jd.setLocationRelativeTo(app);jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);jd.setVisible(true);jd.setResizable(false);}});b3.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){if(e.getSource()==b3){String []s={"很轻松","还可以","很困难"};String x;x=(String)JOptionPane.showInputDialog(null, "学习Java轻松吗?","输入框",JOptionPane.QUESTION_MESSAGE,null,s,s[0]);t3.setText(x);}}});Container c=app.getContentPane(); //获取内容窗格app.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));//组件在容器中沿垂直方向排列c.add(jplabel);c.add(jptextfield);c.add(jpbt);app.setSize(400,150);app.setVisible(true);app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setResizable(false);app.setLocationRelativeTo(null); // 居中}}4. 实验内容1至5程序结果运行如下:5.计算器程序如下:// SumTool.javaimport java.awt.Container;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;public class SumTool extends JFrame {public static void main(String[] args) {JFrame jf=new JFrame("Sum");// 创建文本输入框面板JPanel jptextfield=new JPanel();// 采用盒式布局管理器jptextfield.setLayout(new BoxLayout(jptextfield,BoxLayout.X_AXIS));//组件在容器中沿水平方向排列final JTextField t1=new JTextField(7);JTextField t2=new JTextField("+");final JTextField t3=new JTextField(7);final JTextField t5=new JTextField(7);t1.setEditable(true);t2.setEditable(false);t3.setEditable(true);t5.setEditable(true);JButton t4=new JButton("=");t4.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent arg0){String s1=t1.getText();String s3=t3.getText();int m1=Integer.valueOf(s1);int m3=Integer.valueOf(s3);int m5=m1+m3;String s5=String.valueOf(m5);t5.setText(s5);}});jptextfield.add(t1);jptextfield.add(t2);jptextfield.add(t3);jptextfield.add(t4);jptextfield.add(t5);Container c=jf.getContentPane(); //获取内容窗格jf.setLayout(new BoxLayout(c, BoxLayout.X_AXIS));//组件在容器中沿水平方向排列c.add(jptextfield);jf.setSize(400,60);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setResizable(false);jf.setLocationRelativeTo(null); // 居中}}6.计算器结果如下:五、实验总结在这一章的AWT设计实验中,虽然Java设计界面用Swing设计会比较繁琐,但是对于了解Java底层设计,学习这章是必要的.在运用到各种控件编程,不仅可以使我们进行Swing设计,还使我们更好地了解Java的美妙,也让我们懂得了Eclipse工具的人性化服务平台所带来的乐趣.。
第8章Swing图形用户界面程序设计
27.02.2019 3
Swing整体介绍
• Swing GUI 组件
– 所在的包: javax.swing – Swing组件的平台相关性较小(lightweight)
• 早期版本的GUI组件
– 所在的包: java.awt – 与平台相关性较强
27.02.2019
4
JComponent
• 组件类的层次结构
– 为GUI提供文本(主要)或图像(也可以)信息 – 对应类(JLabel) (JComponent的子类) – 可以显示:
• 单行的只读的文本信息 • 图像 • 同时显示文本与图像信息
– 程序一般不修改标签的内容
27.02.2019 10
文本框(JTextField)
• 文本框(JTextField) – 显示单行的文本信息 – JTextField extends JTextComponent • 构造函数: Public JTextField(); Public JTextField(String text); Public JTextField(int columns); Public JTextField(String text,int columns); • String getText();//获得当前包含在文本框中的字符串 • void setText(String str);//为设置文本
网络程序设计java第08章Swing图形用户界面程序设计new
javax.swing.JButton
javax.swing. JToggleButton
javax.swing.JCheckBox
javax.swing.JRadioButton
2019/10/18
13
示例
【例8-3】J_Button.java,命令式按钮、复选框和单选按钮例程
2019/10/18
• 设置最多显示列表项的项数
– 滚动条(Scrollbar)会自动加上
2019/10/18
15
示例
【例8-4】J_Lines.java,组合框、列表框、文本区域和滚动窗格例程
2019/10/18
16
框架(JFrame)
• Swing组件从功能分可以分成三种,分别是顶层组件,中间 组件和基本组件。JFrame就是顶层组件,简单的描述也就是 可以独立显示的组件。而中间组件是可以充当载体,但是不 能独立显示的组件,可以把基础组件放在其中,但是还是要 依托在顶层容器内才可以显示。基础组件则是实现人机交互 的基本组件。
22
FlowLayout
• 是一种最基本的布局管理器 • 是 java.awt.Applet、java.awt.Panel 和
javax.swing.JPanel的默认布局方式 • 在容器中,从左到右依次放置GUI组件 • 当组件排到容器一行的末尾时,则从下一
行开始接着排列组件 • 每行组件的对齐方式可以是: 左对齐、中间
• 当鼠标左键单击按钮组件时,能触发特定 的事件
• 在Java中, 广义的按钮包括:
– 命令式按钮(JButton) – 复选框(JCheckBox) – 单选按钮(JRadioButton)
2019/10/18
8图形界面设计
3.2按钮
复选框在Swing组件中使用也非常广泛,它具有一个方块图标,外加一段描述性文字。与单选按钮唯一 不同的是复选框可以进行多选设置,每一个复选框都提供“选择”与“不选择”两种状态。复选框由 JCheckBox类的对象表示,它同样继承于AbstractButton类,所以复选框组件的属性设置也来源于 AbstractButton类。
ቤተ መጻሕፍቲ ባይዱ
3.2按钮
在默认情况下,单选按钮显示一个圆形图标,并且通常在该图标旁放置一些说明性文字,而在应用程序 中,一般将多个单选按钮放置在按钮组中,使这些单选按钮表现出某种功能,当用户选中某个单选按钮 后,按钮组中其他按钮将被自动取消。单选按钮是Swing组件中JRadioButton类的对象,该类是 JToggleButton的子类,而JToggleButton类又是AbstractButton类的子类,所以控制单选按钮的诸多方 法都是AbstractButton类中方法。
5事件处理
在java程序运行时,如果用户进行某个操作,比如单击鼠标键或输入字符,程序应当做出适当响应。用 户在程序界面进行的操作称为用户事件。对事件的响应称为事件处理。
5.1事件处理模型
java中,为了便于管理,系统将事件分类,称为事件类型。系统为每一个事件类型提供了一个侦听程序 接口,它规定了接收并处理该类型事件的方法和规范。为了接收并处理某类用户事件,组件必须注册相 应的事件处理程序,这种事件处理程序称之为事件侦听程序,它是实现了对应侦听程序接口的一个类。 要作为侦听程序对象的类必须实现相应的接口,并实现接口中对应的响应事件的方法。
4.4CardLayout布局管理器
由CardLayout类实现的布局管理器称为卡片布局管理器,用来操纵其所管理容器中包含的容器或组件。 每个直接添加到其所管理容器中的容器或组件为一个卡片,最先被添加到其所管理容器中的容器或组件 被认为是第一个卡片,最后被添加的则为最后一个卡片,初次运行时将显示第一个卡片。
第八章 Swing图形用户界面程序设计1[详版课资]
添加组件
myContainer.add( component, position ) component – 需要加入到容器中的组件
positions – (BorderLayout.NORTH)
➢ NORTH, SOUTH, EAST, WEST, CENTER
(底 (中间)
BorderLayout类
例:(GridBagApplet.html)
button1 button2 button3
button4
button5
button6
button7
button8 button9
public void init() { GridBagLayout layout=new GridBagLayout();
GridLayout
布局管理器GridLayout按行与列将容器等分 成网格
每个组件占用具有相同宽度和高度的网格 添加组件占用网格的顺序: 从上到下,从左到右 当一行满了,则继续到下一行,仍然是从左到右
CardLayout
CardLayout的布局方式有点象码“扑克牌” 一个组件压在另一个组件的上面,所以每次 一般只能看到一个组件
标签(JLabel)
标签
为GUI提供文本(主要)或图像(也可以)信息 对应类(JLabel) (JComponent的子类) 可以显示:
➢单行的只读的文本信息 ➢图像 ➢同时显示文本与图像信息
程序一般不修改标签的内容
文本框(JTextField)
文本框(JTextField)
显示单行的文本信息 JTextField extends JTextComponent
§8.1 简介
AWT包主要类的层次关系
天津科技大学Java第八章 基于Swing的图形化用户界面
JMenuItem
JButton
JCheckBox
JRadioButton
JMenu
Swing类库组织结构图
8.1 Java GUI概述----Swing
Swing 组件特点:
(1) Swing组件是用100%纯Java代码实现的轻量级(light-weight)组件. 没有本地代码,不依赖操作系统的支持,这是它与重量级组件 AWT的最大区别。
第8章 基于Swing的图形化用户界面
Java GUI概述 基于Swing的GUI构建 GUI中的事件处理 Swing组件
8.1 Java GUI概述
图形用户界面GUI(Graphical User Interfaces),给用户 提供了一个交互式的直观图形化操作界面。
ቤተ መጻሕፍቲ ባይዱ
button
8.1 Java GUI概述----容器介绍
在Java程序中可以作为容器的类,都继承自Container类。 AWT和Swing中的容器类的继承关系,如图所示:
Container
Window
Panel
JComponent
Frame
Dialog
Applet
JPanel
JScrollPane
JFrame
构建GUI的两种技术——AWT与Swing
AWT 出现较早 是Swing技术的基础 由java.awt及其子包提供支持,AWT组件与平台相关性较强 Swing 是对AWT技术的扩展 开发GUI的主流技术! 在界面构造方法、事件处理机制等方面与AWT基本一致 由javax.swing及其子包提供支持,Swing组件的平台相关性 较小 更加实用,比AWT提供了更加丰富的组件,增加了很多新的特 性与功能 开发GUI的主流技术
网络程序设计java第08章Swing图形用户界面程序设计new
2020/12/23
28
示例
【例8-7】J_Border.java,边界布局管理器例程
2020/12/23
29
CardLayout
• CardLayout的布局方式有点象 “扑克牌” • 一个组件压在另一个组件的上面,所以每
次一般只能看到一个组件
• JComponent——大多数Swing组件类父类
2020/12/23
5
Swing 组件
• 组件和容器是Swing图形用户界面的组成部分: • 容器
– 各种组件必须放在容器 – 容器本身也是一种组件 – 分类
• 顶层容器(小应用程序、对话框和框架) • 一般容器(面板、滚动窗格、分裂窗格、选项卡窗格、工具条) • 其它容器
2020j/1a2/v23a.swing.event 包中,类42 名通常以单词Listener结尾
事件处理机制
• 事件处理步骤
① 程序加入java.awt.event包: import java.awt.event;
② 给所需的事件源对象注册事件监听器: 事件源对象.addXXXListener(XXXListener);
事件处理模型
• 事件:对鼠标、键盘和其他输入设备的各 种操作,一般称为事件。
• GUI是由事件(event)驱动的
– 当用户与GUI交互可以产生事件(events) – 一些常见的交互方式
• 移动鼠标 • 用鼠标点击按钮 • 在文本框中输入数据 • 关闭窗口等
2020/12/23
40
事件处理机制
面板(JPanel)
• 一种中间容器,在面板中添加组件,然后 再将面板添加到其他容器中。
[兔年惊喜]Java语言程序设计实验九第八章Swing图形用户界面程
[兔年惊喜]Java语言程序设计实验九第八章Swing图形用户界面程实验报告课程Java语言程序设计实验名称第八章Swing图形用户界面程序设计实验任务(三)第页专业班级学号____姓名实验日期:2022年11月9日报告退发(订正、重做)一、实验目的布局管理器的使用二、实验环境1、微型计算机一台2、DOS或WINDOWS操作系统,j2e开发包三、实验内容创建一个框架类实例对象app作为窗体,请问窗体的内容窗格默认的布局管理器是什么?往窗体内容窗格的中心区域添加一个面板,请问面板的默认布局管理器是什么?往面板添加若干的按钮或其它的组件,然后改变窗口大小,观察组件位置的变化,体会FlowLayout布局管理器的特点。
默认采用的是居中,如何设置为左对齐?设置面板的布局管理器为BorderLayout,往5个区域分别添加5个组件,改变窗体大小,观察这5个区域的变化情况,体会BorderLayout布局管理器的特点。
设置面板的布局管理器为Bo某Layout,分别设置水平放置和垂直放置,往面板中添加组件,改变窗体大小,观察面板的变化,体会Bo某Layout的特点。
设置布局管理器为GridLayout,设置不同的行列,观察组建的摆放方式,体会GridLayout布局管理器的特点设置面板的布局管理器为GridBagLayout,按照不同的长宽放置组件,体会该布局管理器的作用和特点四、实验步骤和结果1.在Eclipe中新建名字为tet8的工程。
2.问题1:创建一个框架类实例对象app作为窗体,窗体的内容窗格默认的布局管理器是边界布局管理器(BorderLayout)3.问题2:往窗体内容窗格的中心区域添加一个面板,面板的默认布局管理器是流布局管理器(FlowLayout)4.FlowLayout布局管理器问题及实现①默认居中:importjava.awt.BorderLayout;importjava.awt.Container;importjava某.wing.JButton;importjava某.wing.JFrame;importjava某.wing.JPanel;publicclaFlowLayout1{publictaticvoidmain(String[]arg){JFramejf=newJFrame(\流布局管理器窗体\);Containerc=jf.getContentPane();JPanelp=newJPanel();p.add(newJButton(\));p.add(newJButton(\));p.add(newJButton(\ ));p.add(newJButton(\));p.add(newJButton(\));p.add(newJButton(\) );p.add(newJButton(\));p.add(newJButton(\));p.add(newJButton(\)) ;c.add(p,BorderLayout.CENTER);jf.etSize(300,300);jf.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);jf.etLocationRelativeTo(null);}}jf.etViible(true);②改变窗口大小,窗口中的组件位置会窗体的横向拉动而变化③左对齐5.BorderLayout布局管理器问题及实现importjava.awt.BorderLayout;importjava.awt.Container;importjava某.wing.JButton;importjava某.wing.JFrame;importjava某.wing.JPanel;publicclaBorderLayout1{publictaticvoidmain(String[]arg){JFramejf=newJFrame(\边界布局管理器窗体\);Containerc=jf.getContentPane();JPanelp=newJPanel();p.etLayout(newBorderLayout());p.add(newJButton(\),BorderLayout.EAST);p.add(newJButton(\),B orderLayout.WEST);p.add(newJButton(\),BorderLayout.SOUTH);p.add( newJButton(\),BorderLayout.NORTH);p.add(newJButton(\),BorderLayo ut.CENTER);c.add(p,BorderLayout.CENTER);jf.etSize(300,300);}jf.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);jf.etLocationRelativeTo(null);jf.etViible(true);}6.Bo某Layout布局管理器问题及实现①水平放置importjava.awt.BorderLayout;importjava.awt.Container;importjava某.wing.Bo某Layout;importjava某.wing.JButton;importjava某.wing.JFrame;importjava某.wing.JPanel;publicclaBo某Layout1{publictaticvoidmain(String[]arg){JFramejf=newJFrame(\盒式布局管理器窗体\);Containerc=jf.getContentPane();JPanelp=newJPanel();p.etLayout(newBo某Layout(p,Bo某Layout.某_A某IS));p.add(newJButton(\));p.add(newJButton(\));p.add(newJButton( \));p.add(newJButton(\));p.add(newJButton(\));c.add(p,BorderLayout.CENTER);jf.etSize(300,300);jf.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);jf.etLocationRelativeTo(null);}}jf.etViible(true);②垂直放置p.etLayout(newBo某Layout(p,Bo某Layout.Y_A某IS));7.GridLayout布局管理器问题及实现importjava.awt.BorderLayout;importjava.awt.Container;importj ava.awt.GridLayout;importjava某.wing.JButton;importjava某.wing.JFrame;importjava某.wing.JPanel;publicclaGridLayout1{publictaticvoidmain(String[]arg){JFramejf=newJFrame(\网格布局管理器窗体\);Containerc=jf.getContentPane();JPanelp=newJPanel();p.etLayout(newGridLayout(2,5,20,20));p.add(newJButton(\));p. add(newJButton(\));p.add(newJButton(\));p.add(newJButton(\));p.add(newJButton(\));c.add(p,BorderLayout.CENTER);jf.etSize(300,300);}}jf.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);jf.etLocationRelativeTo(null);jf.etViible(true);8.GridBagLayout布局管理器问题及实现importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.GridBagContraint;importjava.awt.GridBagLayout ;importjava.awt.GridLayout;importjava某.wing.JButton;importjava某.wing.JFrame;importjava某.wing.JPanel;publicclaGridBagLayout1{publictaticvoidmain(String[]arg){JFramejf=newJFrame(\网格包布局管理器窗体\);Containerc=jf.getContentPane();JPanelp=newJPanel();GridBagLayoutgr=newGridBagLayout();p.etLayout(gr);GridBagContraintgc=newGridBagContraint();gc.fill=GridBagCont raint.BOTH;gc.grid某=0;gc.gridy=0;gc.gridwidth=2;gc.gridheight=1;JButtonbt1=newJButton(\);gr.etContraint(bt1,gc);p.add(bt1,gc );gc.grid某=2;gc.gridy=0;gc.gridwidth=1;gc.gridheight=2;JButtonbt2=newJButton(\);gr.etContraint(bt2,gc);p.add(bt2,gc);gc.grid某=0;gc.gridy=1;gc.gridwidth=1;gc.gridheight=2;JButtonbt3=newJButton(\);gr.etContraint(bt3,gc);p.add(bt3,gc );gc.grid某=1;gc.gridy=1;gc.gridwidth=1;gc.gridheight=1;JButtonbt4=newJButton(\);gr.etContraint(bt4,gc);p.add(bt4,gc );gc.grid某=1;gc.gridy=2;gc.gridwidth=2;gc.gridheight=1;JButtonbt5=newJButton(\);gr.etContraint(bt5,gc);p.add(bt5,gc );c.add(p,BorderLayout.CENTER);jf.etSize(300,300);jf.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);}}jf.etLocationRelativeTo(null);jf.etViible(true);五、实验总结。
第八章图形用户界面(Swing)方案
2. 构造函数
JLabel(String label);
构造一个显示内容为label的标签
JLabel(Icon icon);
构造一个带有图标的标签
JLabel(String label,int alignment); 构造一个显示字符串label的标签,
并指定它的对齐方式: LEFT(左对齐)
CENTER(居中对齐)
返回当前的对齐方式 返回当前显示的内容 返回标签的图标 设置对齐方式 设置显示的字符串 设置标签的图标
4. 举例(LabelDemo.java)
JApplet是一个顶层容器,Swing组建不能直接加入到 JApplet,必须将组建加入到顶层容器的内容面板中。要获得一 个内容面板,可使用getContentPane()方法,要设置它的内容面 板可使用setContentPane()方法。
void setLocation (Point p)
使用屏幕坐标;否则使用该容器的坐标
Point getLocation ( )
获得组件的左上角位置。
Point getLocationOnScreen( )
获得组件左上角的位置。该值使用屏幕坐标
void setSize (int width,int height)或 重新设置组件的大小
• 组件(component)是构成GUI的基本要素,通过对 不同事件的响应来完成和用户的交互或组件之间的 交互。组件一般作为一个对象放置在容器 (Container)中。
• 容器是能容纳和排列组件的组件,要显示组件,用 户必须把它放置在容器里,通过容器的add()方法将 组件加入到容器中。容器本身也是组件,因此可以 将一个容器添加到另一个容器中实现容器的嵌套。
JAVA课件第8章 SWING界面设计
建立一个含有图标的标签组件,并指定其排列方式。
JLabel(String text) 建立一个含有文字的标签组件,默认排列方式为LEFT。
JLabel(String text,int horizontalAlignment) 建立一个含有文字的标签组件,并指定其排列方式。
JLabel(String text,Icon icon,int horizontalAlignment) 建立一个含有文字和图标的标签组件,并指定其排列方式。
14.
con.add(button2);
15.
con.add(button3);
16.
this.pack();
17.
this.show();
18.
}
19.
public static void main(String [ ] args){
20.
new JButtonApp();
21.
}
22.
}
示例
标签(JLabel)
grabFocus()
请求焦点
setEnable(boolean b)
设置按钮是否可用
setVisible(boolean b)
设置按钮是否可见
1.
import java.awt.*;
2.
import javax.swing.*;
3.
public class JButtonApp extends JFrame{
常用控件
上一节中我们简单介绍了Swing的初步知识,下面我们详 细介绍Swing中的组件。
Swing中的常用组件如下表所示:
组件类 JButton JLabel JTextField JTextArea JRadioButton JCheckbox
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.1.5.9 JDialog和JOptionPane
对话框常用来设计具有依赖关系的窗口 可以通过JDialog构造方法来创建一个对话框
public JDialog(Dialog owner,String title,boolean modal) public JDialog(Frame owner,String title,boolean modal)
11
常用的其他方法:
int getColumns( ) void setColumns(int columns) void setFont(Font f) String getText( ) Void setText(String t) Void setEditable(boolean b)
举例:J_Text.java
4
8.1.2 Swing整体介绍
Swing GUI 组件
所在的包: javax.swing Swing组件的平台相关性较小(lightweight) 比AWT图像用户界面功能多
早期版本的GUI组件
所在的包: java.awt 与平台相关性较强
5
8.1.3 JComponent
组件类的层次结构
ng.Object | +ponent | +--java.awt.Container | +--javax.swing.JComponent
和JFrame一样,定义好之后需要设置对话框的大小,可 见属性,在给对话框添加组件以前通常先要获取其内容 窗格以及设置布局方式,再向窗格添加组件。 常用的方法有: public void setSize(int width,int height) public void setVisible(boolean b) public Container getContentPane( ) 举例:J_FrameDialog.java
JComponent——大多数Swing组件类父类
6
8.1.4 Swing 组件
容器
各种组件必须放在容器 容器本身也是一种组件 分类 • 顶层容器(JApplet, JDialog, JFrame) • 其它容器(JPanel, JScrollPane, JToolBar等)
组件
基本控制组件(JButton, JRadioButton, JCheckBox,JComboBox, JList等) 不可编辑的信息显示组件(JLable等) 可编辑的信息显示组件(JTextField,JTextArea等)
关于JCheckBox和JRadioButton的 其它方法
两者都有以下方法:
Public void setSelected (boolean b) Public boolean isSelected( )
对于单选按钮,为了实现联动,还需要按钮组 (ButtonGroup类)
先构造按钮组:public ButtonGroup( ) 再通过按钮组的add方法将单选按钮依次添加上去: public void add(AbstractButton b)
程序一般不修改标签的内容
举例:J_LableFrame.java
10
8.1.5.3 文本框(JTextField)
文本框(JTextField)
显示单行的文本信息 JTextField extends JTextComponent JPasswordField为其子类
常用构造方法:
JTextField( ) JTextField(int columns) JTextField(String text) JTextField(String text, int columns)
JPanel的其它方法
Public void setBackground(Color bg) public void setPreferredSize(Dimension prefferedSize) public Dimension(int width,int height)
举例:P_JPanel.java
7
8.1.5 一些GUI组件
标签(JLabel) 文本框(JTextField) 按钮(JButton) 复选框(JCheckBox) 单选框(JRadioButton) 组合框(JComboBox) 文本(JTextArea) 密码框(JPassword) 列表框(JList) 框架(JFrame) 面板(JPanel) 对话框(JDialog)
8
8.1.5.1 框架(JFrame)
类 JFrame 是java.awt.Frame的子类 public class 类名 { 在Swing的组件中, JFrame 并不全是由Java编写的 … 是一种与平台关系比较密切的组件(Heavyweight component) public static void main(String args[ ]) ng.Object { | +ponent JFrame app = new JFrame( "框架" ); | app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +--java.awt.Container | app.setSize( 200, 100 ); +--java.awt.Window app.setVisible( true ); | +--java.awt.Frame … | } // 方法main结束 +--javax.swing.JFrame } // 类定义结束
3
8.1.1的图形显示形式 友好的交互方式 简化计算机软件的学习过程 GUI示例
• C:\Program Files\Java\jdk1.6.0\demo\jfc\SwingSet2 • GUI组件: Labels, Text fields, Buttons, 等等
Java程序设计 Programming in Java
1
第 8 章 Swing图形用户界面程序设计
8.1 基本GUI组件 8.2 布局管理器 8.3 事件处理模型 8.4 菜单 8.5 交互式小结&练习
2
8.1 基本GUI组件
8.1.1 GUI简介 8.1.2 Swing整体介绍 8.1.3 JComponent 8.1.4 Swing 组件 8.1.5 一些常用的GUI组件
18
滚动条(Scrollbar)会自动加上
8.1.5.6 列表框(JList)
列表框的创建
public JList(Object[] listData)
成员方法
public void setSelectionMode(int selectionMode) public void setSelectedIndex(int index) public void setSelectedIndices(int [] indices) public void setSelectionInterval(int anchor,int lead) public int getselectedIndex( ) public int[] getSelectedIndices( ) public Object getSelectedValue( ) 19 public Object[] getSelectedValues( )
15
JRadioButton的构造方法 public JRadioButton( ) public JRadioButton(Icon icon) public JRadioButton(Icon icon, boolean selected) public JRadioButton(String text) public JRadioButton(String text, boolean selected) public JRadioButton(String text ,Icon icon) public JRadioButton(String text ,Icon icon,boolean 16 selected)
举例:J_Button.java
17
8.1.5.5 组合框(JComboBox)
组合框(JComboBox) 可以从下拉式的列表框中选取其中的列表项 有时也称为下拉框(drop-down list) 类JComboBox的构造方法 JComboBox( ) JComboBox(Object[] items) 类JComboBox中的其它方法 int getSelectedIndex( ) void setMaximumRowCount( n ) void removeItemAt(int anIndex) void removeItem(Object anObject) void removeAllItems() void addItem(Object anObject) Object[] getSelectedObjects() void setEditable(boolean aFlag)
javax.swing.JButton
javax.swing. JToggleButton
javax.swing.JCheckBox javax.swing.JRadioButton
14
按钮组件的构造方法
JButton的常用构造方法 JButton( ) JButton(Icon icon) JButton(String text ) JButton(String text, Icon icon) JCheckBox的常用构造方法 JCheckBox(Icon icon, boolean selected) JCheckBox(String text, boolean selected) JCheckBox(String text, Icon icon) JCheckBox(String text) JCheckBox(String text, Icon icon, boolean selected)