null面向对象技术导论面向对象技术导论第四章 SWING图形用户界面设计第四章 SWING图形用户界面设计概述
常用容器
事件处理
布局设计
基本控制组件
概述概述 图形用户界面(Graphics User Interface,缩写GUI)是指以图形的显示方式与用户实现交互操作的应用程序界面。Java提供了十分完善的图形用户界面功能,使得软件开发人员可以轻而易举地开发出功能强大、界面友善、安全可靠的应用软件。
发展历史:
命令行——》图形用户界面
概述概述 在Java语言中,有两个包(java.awt和javax.swing)囊括了实现图形用户界面的所有基本元素,这些基本元素主要包括容器、组件、绘图工具和布局管理器等。
java.awt是java1.1用来建立GUI的图形包, “awt”是抽象窗口工具包(Abstract Window Toolkit)的缩写,其中的组件常被称为AWT组件。javax.swing是Java2提出的AWT的改进包,它主要改善了组件的显示外观,增强了组件的控制能力。概述概述早期版本的AWT组件
在java.awt包里,包括Button、Checkbox、Scrollbar等,都是Component类的子类
大部分含有native code,所以随操作系统平台的不同会显示出不同的样子,而不能进行更改,是重量级组件(heavyweight components)
没有弹性、缺乏效率
概述概述较新的Swing组件
其名称都是在原来AWT组件名称前加上J,例如JButton、JCheckBox、JScrollbar等,都是JComponent类的子类
Java1.2推出,架构在 AWT 之上,是AWT的扩展而不是取代,AWT仍然是Swing的一个必备补充
完全是由java语言编写的,其外观和功能不依赖于任何由宿主平台的窗口系统所提供的代码,是轻量级组件(lightweight components)
可提供更丰富的视觉感受,被越来越多地使用概述概述 在Java语言中,用户界面由三部分构成:
(1)顶层容器:每个图形用户界面Java程序都必须至少有一个顶层容器,别的组件都必须放在这个顶层容器上才能显现出来。顶层容器有:
JFrame,JDialog,浏览器;
(2)中间容器:存在的目的仅仅是为了容纳别的组件,使界面有条理,美观,易于控制。中间容器有:
JPanel, JScrollPane等
(3)基本控制组件:基本功能是和用户交互信息,而不像前两种组件那样是用来容纳别的组件的。基本控制组件:
JLabel、JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、 JTexComponent等
第五章 SWING图形用户界面设计第五章 SWING图形用户界面设计概述
常用容器
事件处理
布局设计
基本控制组件
常用容器常用容器窗体(JFrame)
JFrame是一种具有边框的容器,它是Java Application程序的图形用户界面的最外层容器。
特点:
(1)有边框
(2)能被移动、缩放和关闭
(3)作为最外层容器,不能被其它容器所包含
(4)默认布局:边界布局(BorderLayout)
常用容器常用容器JFrame的继承结构
java.lang.Object
└ java.awt.Component
└ java.awt.Container
└ java.awt.Window
└ java.awt.Frame
└ javax.swing.JFrame
每个包含Swing 组件的主窗口都应用JFrame 来实现常用容器常用容器构造函数
格式:JFrame()
功能:建立一个无标题的Frame。
格式:JFrame(String title)
功能:建立一个标题为title的Frame。
常用
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
String getTitle(); 获取窗口标题
void setTitle(String s); 设置窗口标题
void setVisible(boolean b); 设置窗口可见性
void setBounds(int a, int b, int width, int height); 设置窗口位置和大小
void setBackground(Color c); 设置窗口背景颜色
void pack(); 用紧凑方式显示窗口
void setSize(int width , int height); 设置窗口大小
常用容器常用容器创建窗体有两种方式:
(1)直接创建JFrame的对象,适合于简单窗体;
(2)继承JFrame类,在继承类中编写代码对窗体进行详细的刻画,适合窗体比较复杂的情况。
大多数情况下开发人员都用第二种方法。
注意:窗体创建以后是不可见的,必须调用Window类的show( )方法或Component类的setVisible( )方法显示该窗体。
见以下两个例子:常用容器常用容器import javax.swing.*;
public class Sample5_1 {
public static void main(String[] args){
// 创建一个窗体对象
JFrame myWindow = new JFrame();
// 向窗体中添加一个标签
myWindow.add(new JLabel("这是一个窗体,演示了JFrame类的基本功能"));
// 设置窗体的标题
myWindow.setTitle("自定义的窗体");
// 设置窗体的大小
myWindow.setBounds(80,80,480,180);
// 根据接收的boolean设置窗体是否可以调整大小
myWindow.setResizable(false);
// 设置窗体的可见性
myWindow.setVisible(true);
}
}直接创建JFrame的对象常用容器常用容器import javax.swing.*;
class MyWindow extends JFrame{
// 定义无参构造函数
public MyWindow(){}
public MyWindow(boolean b){
// 向窗体中添加一个标签
this.add(new JLabel("这是一个窗体,演示了JFrame类的基本功能"));
// 设置窗体的标题
this.setTitle("自定义的窗体");
// 设置窗体的大小
this.setBounds(80,80,480,180);
// 根据接收的boolean设置窗体是否可以调整大小
this.setResizable(b);
// 设置窗体的可见性
this.setVisible(true);
}
}
public class Sample5_2{
public static void main(String[] args){
// 创建MyWindow类的对象,并传递False值使得窗体不能调整大小
new MyWindow(false);
}
}继承JFrame类常用容器常用容器import javax.swing.*;
public class MyWindow extends JFrame{
// 定义无参构造函数
public MyWindow(){}
public MyWindow(boolean b){
// 向窗体中添加一个标签
this.add(new JLabel("这是一个窗体,演示了JFrame类的基本功能"));
// 设置窗体的标题
this.setTitle("自定义的窗体");
// 设置窗体的大小
this.setBounds(80,80,480,180);
// 根据接收的boolean设置窗体是否可以调整大小
this.setResizable(b);
// 设置窗体的可见性
this.setVisible(true);
}
public static void main(String[] args){
new MyWindow(false);
}
}常用容器常用容器对话框(JDialog)
对话框(JDialog)与JFrame一样,都是有边框和标题的独立使用的容器,不能被其它容器所包容。
与JFrame的不同之处:不能作为程序的最外层容器,它必须属于某个JFrame,由该JFrame弹出。
对话框可以接受用户的输入,实现与用户的交互作用。常用容器常用容器JDialog的继承结构
java.lang.Object
└ java.awt.Component
└ java.awt.Container
└ java.awt.Window
└ java.awt.Dialog
└ javax.swing.JDialog
要实现对话框,需要从JDialog派生一个类常用容器常用容器构造函数
JDialog(Frame owner)
功能:建立无标题的通用对话框,它属于窗口owner,可以响应其它窗口。
JDialog(Frame owner,boolean d)
功能:建立无标题的通用对话框,它属于窗口owner,若d为true则不能响应其它窗口。
JDialog(Frame owner,String txt)
功能:建立标题为txt的通用对话框,它属于窗口owner,可以响应其它窗口。
JDialog(Frame owner,String txt,boolean d)
功能:建立标题为txt的通用对话框,它属于窗口owner,若d为true则不能响应其它窗口。
常用容器常用容器常用方法
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
列出了通用对话框JDialog类的几个常用的方法。
常用容器常用容器面板(JPanel)
无边框容器
特点:
(1)最简单的一种容器
(2)没有边框
(3)不能被移动、缩放和关闭
(4)通常作为一个容器组件被加到其它容器中,如JApplet,JFrame等
(5)默认布局:顺序布局(FlowLayout)
JApplet是JPanel的子类,是一种特殊的JPanel
常用容器常用容器JPanel常用方法:第五章 SWING图形用户界面设计第五章 SWING图形用户界面设计概述
常用容器
事件处理
布局设计
基本控制组件
事件处理事件处理界面设计 (静态)
界面动起来
通过事件触发对象的响应机制
一些常见的事件包括:
移动鼠标
单双击鼠标各个按钮
单击按钮
在文本字段输入
在菜单中选择菜单项
在组合框中选择、单选和多选
拖动滚动条
关闭窗口
……
事件处理委托事件模型中传递及处理事件对象的
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
事件处理事件处理事件处理编写事件处理程序时,要注意三个概念
事件源
与用户进行交互的GUI组件,表示事件来自于哪个组件或对象
比如要对按钮被按下这个事件编写处理程序,按钮就是事件源
事件监听器
负责监听事件并做出响应
一旦它监视到事件发生,就会自动调用相应的事件处理程序作出响应
事件对象
封装了有关已发生的事件的信息
例如按钮被按下就是一个要被处理的事件,当用户按下按钮时,就会产生一个事件对象。事件对象中包含事件的相关信息和事件源
事件处理事件处理事件的层次结构图:事件处理事件处理程序员应完成的两项任务
实现事件监听的接口类
为事件源注册一个事件监听器
实现事件处理方法事件处理事件处理一个事件源可以注册多个事件监听器,每个监听器又可以对多种事件进行相应,例如一个JFrame事件源上可以注册
窗口事件监听器,响应
窗口关闭
窗口最大化
窗口最小化
鼠标事件监听器,响应
鼠标点击
鼠标移动
事件处理事件处理事件监听器
是一个对象,通过事件源的add×××Listener方法被注册到某个事件源上
不同的Swing组件可以注册不同的事件监听器
一个事件监听器中可以包含有对多种具体事件的专用处理方法
例如用于处理鼠标事件的监听器接口MouseListener中就包含有对应于鼠标压下、放开、进入、离开、敲击五种事件的相应方法mousePressed、mouseReleased、mouseEntered、mouseExited、mouseClicked,这五种方法都需要一个事件对象作为参数
事件处理事件处理通常我们用到的事件对象有
ActionEvent
发生在按下按钮、选择了一个项目、在文本框中按下回车键
ItemEvent
发生在具有多个选项的组件上,如JCheckBox、JComboBox
ChangeEvent
用在可设定数值的拖曳杆上,例如JSlider、JProgressBar等
WindowEvent
用在处理窗口的操作
MouseEvent
用于鼠标的操作事件处理事件处理事件处理事件处理事件处理事件处理事件监听器接口和事件监听器适配器类
事件监听器接口
例如MouseListener是一个接口,为了在程序中创建一个鼠标事件监听器的对象,我们需要实现其所有五个方法,在方法体中,我们可以通过鼠标事件对象传递过来的信息(例如点击的次数,坐标),实现各种处理功能
事件监听器适配器类
有时我们并不需要对所有事件进行处理,为此Swing提供了一些适配器类×××Adapter,这些类含有所有×××Listener中方法的默认实现(就是什么也不做),因此我们就只需编写那些需要进行处理的事件的方法。例如,如果只想对鼠标敲击事件进行处理,如果使用MouseAdapter类,则只需要重写mouseClicked方法就可以了
事件处理事件处理三种实现事件处理的方法
实现事件监听器接口
这种方法需要实现接口中所有的方法,对我们不需要进行处理的事件方法,也要列出来,其方法体使用一对空的花括号
继承事件监听器适配器类
只需要重写我们感兴趣的事件
使用匿名内部类
特别适用于已经继承了某个父类(例如主类必须继承JFrame类),则根据java语法规则,就不能再继承适配器类的情况,而且使用这种方法程序看起来会比较清楚明了
nullimport java.awt.event.*; //载入MouseListener类所在的包
import javax.swing.*; //载入JFrame所在的包
public class ActionDemo implements MouseListener{
JFrame f;
public ActionDemo() {
f=new JFrame(); //新建一窗口
f.setSize(400,300);
f.setVisible(true);
f.addMouseListener(this); //为窗口增加鼠标事件监听器
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){
f.setTitle("点击坐标为 ("+e.getX()+", "+e.getY()+")");
}
public static void main(String[] args){ new ActionDemo();}
}
创建一窗口,当鼠标在窗口中点击时,在窗口标题栏中显示点击位置坐标。
方法一:实现MouseListener接口方法二:继承MouseAdapter类方法二:继承MouseAdapter类import java.awt.event.*; //载入MouseAdapter所在的包
import javax.swing.*;
public class ActionDemo extends MouseAdapter{
JFrame f;
public ActionDemo() {
f=new JFrame();
f.setSize(300,150);
f.setVisible(true);
f.addMouseListener(this);
f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
public void mouseClicked(MouseEvent e){
f.setTitle("点击坐标为 ("+e.getX()+", "+e.getY()+")");
}
public static void main(String[] args){ new ActionDemo();}
}方法三:使用匿名内部类方法三:使用匿名内部类import java.awt.event.*;
import javax.swing.*;
public class ActionDemo{
JFrame f;
public ActionDemo() {
f=new JFrame();
f.setSize(300,150);
f.setVisible(true);
f.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
f.setTitle("点击坐标为 ("+e.getX()+", "+e.getY()+")");
}
}); //为窗口添加鼠标事件监听器语句结束
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});//为窗口添加窗口事件监听器语句结束
}
public static void main(String[] args){ new ActionDemo(); }
}事件处理事件处理采用三种不同方法的程序,其运行效果都是一样的,当鼠标在窗口中点击的时候,窗口标题栏将出现所点位置的坐标信息事件处理事件处理事件类、对应的接口及接口中的方法null第五章 SWING图形用户界面设计第五章 SWING图形用户界面设计概述
常用容器
事件处理
布局设计
基本控制组件
布局设计布局设计决定组件在界面中所处的位置和大小
如何将下级组件有秩序地摆在上一级容器中
六种布局管理器(Layout Manager)
两种简单布局
java.awt.FlowLayout 顺序布局
java.awt.GridLayout 网格布局
两种特定用途布局
java.awt.BorderLayout 边界布局
java.awt.CardLayout 卡片布局
两种灵活布局
java.awt.GridBagLayout 复杂网格布局
javax.swing.BoxLayout
javax.swing.SpringLayout布局设计布局设计1、顺序布局
顺序布局(FlowLayout)是最基本的一种布局,是面板(Panel)和它的子类Applet的缺省布局方式。Panel是一个容器,可以容纳多个组件,作为它的子类,Applet也具有容纳组件的能力。
顺序布局指的是把组件一个接一个地从左到右顺序排列,一行排满后就转到下一行继续排列,直到把所有组件都显示出来。它将根据容器的大小随时调整它里面的组件的大小,包括高度和宽度,这个管理器不会约束组件的大小,而是允许他们获得自己的最佳大小。布局设计布局设计FlowLayout的构造方法:
(1) FlowLayout();
(2) FlowLayout(int align);
(3) FlowLayout(int align, int hgap, int vgap);
参数说明:
align:对齐方式 (默认为FlowLayout.CENTER )
FlowLayout.LEFT 左对齐
FlowLayout.RIGHT 右对齐
FlowLayout.CENTER 居中对齐
hgap, vgap: 组件的水平间距和垂直间距
单位为象素,默认值为5
加入组件的方法:
add(<组件名称>);
布局设计布局设计例 FlowLayout布局管理 nullimport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class FlowLayoutDemo extends JFrame implements ActionListener{
JButton left,center,right;
public FlowLayoutDemo() {
setTitle("FlowLayoutDemoFrame");
setSize(600,200);
setLayout(new FlowLayout());
left=new JButton("左对齐");
left.addActionListener(this);
add(left);
center=new JButton("中间对齐");
center.addActionListener(this);
add(center);
right=new JButton("右对齐");
right.addActionListener(this);
add(right);
setVisible(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}null public void actionPerformed(ActionEvent e) {
int align=FlowLayout.LEFT;
if(e.getSource() == left)
align=FlowLayout.LEFT;
else if(e.getSource() == center)
align=FlowLayout.CENTER;
else if(e.getSource() == right)
align=FlowLayout.RIGHT;
setLayout(new FlowLayout(align));
this.validate(); //更新容器中的布局
}
public static void main(String[] args) {
FlowLayoutDemo frame = new FlowLayoutDemo();
}
}布局设计布局设计2、边界布局
边界布局(BorderLayout)把容器(这里是Applet)分为五个区:北区、南区、东区、西区和中区。这几个区的分布规律是“上北下南,左西右东”,与地图的方位相同。组件可以指定自己放在那个区内,因为只有5个区,所以最多只能容纳5个组件,否则要采取其它布局方式。布局设计布局设计BorderLayout的构造方法:
(1) BorderLayout();
(2) BorderLayout(int hgap, int vgap);
参数说明:
hgap, vgap: 组件的水平间距和垂直间距
单位为象素,默认值为0
加入组件的方法:
add(<组件名称>,<位置参数>);
add(<位置参数>,<组件名称>);
其中<位置参数>是BorderLayout.CENTER, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.WEST,BorderLayout.EAST等5个静态变量
或直接写”Center”,”North”,”South”,”West”,”East”等5个字符串布局设计布局设计例 使用边界布局添加5个组件,如图所示。nullimport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class BorderLayoutDemo extends JFrame implements ActionListener{
String names[]={"北","南","东","西","中"};
Button but[]=new Button[names.length];
public BorderLayoutDemo() {
setTitle("BorderLayoutDemo");
setSize(400,300);
setLayout(new BorderLayout(10,10));
for (int i = 0; i
,<组件名称>);
<组件代号>为一个字符串
常用方法:
show(<容器名称>,<组件名称>); //显示组件
first(<容器名称>); //显示容器中的第一个组件
last(<容器名称>); //显示容器中的最后一个组件
next(<容器名称>); //显示容器中的下一个组件布局设计布局设计4、网格布局
网格布局(GridLayout)将容器划分成为若干行和若干列的网格框,组件被放置在小网格区中。
布局设计布局设计GridLayout的构造方法:
GridLayout(int rows, int Columns, int hgap, int vgap);
参数说明:
rows, Columns: 行数和列数
hgap, vgap: 组件的水平间距和垂直间距
单位为象素,默认值为0
加入组件的方法:
add(<组件名称>);
布局设计布局设计例布局设计布局设计import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test{
public static void main(String args[]){
Calculator myCal = new Calculator();
}
}
class Calculator extends JFrame implements ActionListener, WindowListener{
static String names[]=
{"7","8","9","/","CE",
"4","5","6","*","C",
"1","2","3","-","退格",
"0","+/-",".","+","="};
String resultStr;
JButton buts[] = new JButton[names.length];
JPanel pa1;
JTextField text;布局设计布局设计public Calculator() {
super("我的计算器");
this. resultStr=new String();
this.setSize(350,300);
this.setLayout(new BorderLayout());
this.pa1=new JPanel();
this.text=new JTextField("0",12);
pa1.setLayout(new GridLayout(4,5,5,5));
this. setFont(new Font("Arial",Font.BOLD,12));
for (int i=0;i
本文档为【第04章-SWING图形用户界面设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。