Java学习笔记6——图形编程

    AWT(Abstract Window Tool,抽象窗口工具箱)是JAVA中面向图形编程的基础,其中,AWT是JAVA 1.0提出的,其后,SWING是在JAVA1.2提出的新的界面库,但是SWING并不是说取代了AWT,在JAVA1.1中,AWT事件处理模型有了根本改变。而SWING仍然使用的是Java1.1的事件处理模型。
    AWT的分类为:基本组件及包容器(Container)
    基本组件是最小的单位,里面不包含其它的成分。
    包容器是一种特殊的组件,用来包含其它组件。
    简单组件包括:
    标签Label,有方法Label()、Label(String)、Label(String,int),其中,int表示对齐方式——Label.LEFT/Label.RIGHT/Label.CENTER
    setText()、getText()
    文本域TextField,有方法TextField()、TextField(int)、TextField(String)、TextField(String,int)、setText(String)、getText()、void setEchoChar()
    按钮Button,有方法Button()、Button(String,Label)
    复选框组件CheckBox,其方法有:Checkbox()、Checkbox(String,CheckboxGroup,boolean)、setLabel()、setState()
    复选框组组件CheckboxGroup,其方法有:CheckboxGroup()
    单选框组件
    滚动条组件ScrollBar
    多行文本组件TextArea,其方法有TextArea()、TextArea(int,int)、TextArea(String)、TextArea(String,int,int)、TextArea(String,int,int,int)、setRows(int)、setColumns(int)、setText(String)
    下拉列表组件Choice,其方法有Choice()、add(String)、remove(int)、select(String)、insert(String,int)
    列表组件List,其方法有List()、List(int)、List(int,boolean)、add(String)、select()、replaceItem(String,int)、remove(int)
    画布组件Canvas,我认为这个是特殊的,MFC中在我印象中似乎没有,Win32中在我印象中似乎也没有这个东西,而且,在JAVA中,它是图形操作的容器,却不能包含其它GUI组件,它只能为图形操作提供容器平台,进而在其上自由地进行图形操作。构造函数为Canvas(),其方法有print(Graphics)
    面板组件Panel 面板组件本身是一个矩形区域,是一个最简单的容器,在里面可以各种组件。

    在这里,还得澄清一些概念:
    窗口和菜单——框架窗口组件Frame是可独立运行的主窗口,主要方法有:void setIconImage(Image)、void setMenuBar(MenuBar)、void setTitle(String)、void setResizable(boolean)、void pack()、void show()、addWindowListener()、void add(组件)、void add(组件,对齐方式)
    对话框Dialog,与框架窗口一样,也是容器组件,可以在其上放置其它组件,对话框有模式对话框(Model Dialog)和非模式对话框(Modeless Dialog),这两个概念与MFC中一样。文件对话框FileDialog是主要用于打开与保存文件时让用户选择文件名,通常,文件对话框中,是操作系统提供的标准对话框。当然,这中间有就涉及到监听事件了,同时,Dialog有方法dispose()是做什么呢?Dialog必然还有方法show()
,文件对话框方法为:FileDialog(Frame实例,String, FileDialog.LOAD|)、setTitle(String)、setMode(FileDialog.SAVE)
    菜单Menu,它有方法:Menu(String)、addSeparator()、add(MenuItem)、MenuBar.add(Menu)、CheckboxMenuItem(String,boolean)
    上述容器组件虽然在里面可以放许多组件,但是却无法明确其放置的位置,因此,JAVA中有了布局管理器,它可以确定组件放的位置与大小,每个容器组件有一个默认的布局管理器,也可以通过setLayout()方法来设置其它布局管理器,布局管理器有:FlowLayout、BoarderLayout、GridLayout、GridBagLayout、CardLayout、null
1、FlowLayout布局管理器
  FlowLayout布局管理是一种最简单的布局管理方法,是Panel的默认布局
它以流式的方式,即组件按每行先后自左向右放置,一行放不下时再换行
FlowLayout的默认对齐方式为居中对齐
构造函数:
① FlowLayout():创建默认的FlowLayout布局管理器。
② FlowLayout(int):以指定的对齐方式创建FlowLayout布局管理器。其中的参数有FlowLayout.LEFT(左对齐)、FlowLayout.RIGHT(右对齐)、FlowLayout.CENTER(居中对齐)。
③ FlowLayout(int,int,int):以指定的对齐方式及间距创建FlowLayout布局管理器。其中第一个参数为对齐方式,第二个参数为组件间间距,第三个参数为列间距。
2、 BorderLayout布局管理器
BorderLayout是Frame和Dialog的默认布局
它将整个容器的区域分为东、西、南、北、中五个部分加入组件时,需指明放置的位置
构造函数
①BorderLayout():创建默认的BorderLayout。
② BorderLayout(int,int):以指定的行间距和列间距创建BorderLayout。
3、GridLayout
GridLayout布局将容器区域划分成m行*n列,大小相等的格子,而容器中的组件就放入这些格子中,占用大小完全相同的一格。
构造函数:
① GridLayout():创建默认的GridLayout布局,所有组件在一行中显示。
② GridLayout(int,int):按指定行数和列数创建GridLayout布局。
③ GridLayout(int,int,int,int):按指定行数、列数、行间距和列间距创建GridLayout布局。
4、GridBagLayout布局管理器
GridBagLayout布局将显示区域分成很多矩形小单元,每个组件可以占用一个或多个单元,从而可以指定每个组件所占空间的大小。
5、CardLayout
CardLayout将容器中的组件(通常是面板)像扑克牌一样排列,每次只能显示最上面的一张。
构造函数
① CardLayout():创建默认的CardLayout布局管理器。
② CardLayout(int,int):以指定的行间距和列间距创建CardLayout布局管理器。
主要方法:
 void first() 显示第一个加入到CardLayout的组件
void last()显示最后一个加入到CardLayout的组件
void next()显示当前组件的下一个组件,如当前是最后一个,则下一个为第一个
void previous()显示当前组件的前一个组件,如当前是第一个,则下一个为最后一个
6、null
null布局管理器将主动权交给用户,由用户使用坐标系统来放置每个组件,即调用组件的setBounds()方法来设置其放置位置和大小。
也就是说,所有的组件有setBounds()方法来设置其放置位置与大小
Java语言的类库中提供了丰富的绘图方法,其中大部分对图形、文本、图像的操作方法都定义在Graphics类中
在头部先写上:import java.awt. Graphics。
paint( )方法中有一个Graphics对象参数,因此,我们只要在这个对象上进行图形、文本及图像的绘制操作,就可以在屏幕上看到所显示的结果。
1、图形坐标
Java图形系统采用的二维
Java的坐标原点(0,0)在屏幕的左上角,水平向右为X轴的正方向,竖直向下为Y轴的正方向
每个坐标点的值表示屏幕上的一个像素点的位置,因此,所有坐标点的值都取整数。——这个与MFC中绘图是一样的。
2、颜色Color
构造函数:
Color(int r, int g, int b): 其中每个参数的值都在0到255之间,数值越大就表明这种颜色的成份越重。例如(0,0,0)代表黑色,(255,0,0)代表红色。
主要方法:
setColor(Color c)调用Graphics类中的setColor( )方法设置系统当前所用颜色
3、文本与字体Font
创建:
Font(String name, int style, int size):创建指定三个参数字体名、字体风格和尺寸大小的字体。
其中字体风格有如下三种:Font.BOLD(粗体)、Font.ITALIC(斜体)、Font.PLAIN(普通体)。也可以进行相加来生成复合字体风格,例如想让style既是粗体又是斜体:
Font fn = new Font("TimesRoman", Font.BOLD+Font.ITALIC, 28)
方法:
setFont(Font f)
4、Java中图形的绘制
①画线
在Java的Graphics类中提供画线功能的是drawLine( )方法,其调用格式如下:
drawLine(int x1,int y1,int x2,int y2)
该方法需要设置四个参数,其中x1,y1表示线段的一个坐标点,x2,y2表示线段的另一个坐标点。
②2.矩形的绘制
Graphics类中提供了三种类型的矩形,它们分别是普通矩形、圆角矩形和立体矩形。而每一种矩形都提供两种不同风格的方法,一种是仅画出矩形的边框;另一种是不仅画出边框,并且还用相同的颜色将整个矩形区域填满。
(1)普通矩形  画普通矩形需调用drawRect( )或fillRect( )方法,它们的调用格式如下:
    drawRect(int x, int y, int width, int height)           //边框型风格
    fillRect(int x, int y, int width, int height)           //填充型风格
其中头两个参数分别表示矩形左上角的x坐标和y坐标,后两个参数分别表示矩形的宽度和高度。
 (2)立体矩形  立体矩形也可以说是三维矩形。其实仅仅是在矩形的边框上增加一点阴影,使矩形看上去相对表平面好像有凸出或凹下的效果,其调用方法的格式如下:
draw3DRect(int x, int y, int width, int height, boolean raised)
fill3DRect(int x, int y, int width, int height, boolean raised)             
这两个方法中的前四个参数与drawRect( )方法中所用的参数含义是一样的,第五个参数raised便是定义该立体矩形是具有凸出(值为true)还是凹下(值为false)的效果。
(3)圆角矩形  也就是矩形的四个顶角呈圆弧状,每个圆弧其实是由四分之一的椭圆弧所构成。画圆角矩形的两个方法的调用格式如下:
    drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
    fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
我们可以看出,它们除了具有和普通矩形含义相同的前四个参数外,还多了两个用来描述圆角性质的参数。其中arcWidth代表了圆角弧的横向直径;arcHeight代表了圆角弧的纵向直径。
③椭圆的绘制
在Java中绘制椭圆的方法是给出该椭圆的外接矩形作为参数,其调用格式与画普通矩形的方法相似:
    drawOval(int x, int y, int width, int height)   //边框型风格
    fillOval(int x, int y, int width, int height)           //填充型风格
这里x和y不是椭圆的圆心坐标,而是该椭圆外接矩形的左上角。
4.画弧
弧是椭圆的一部分,因而画弧的方法就相当于先画一个椭圆,而后取该椭圆中所需要的一部分。它们的调用格式如下:
   drawArc(int x, int y, int width, int height,int startAngle, int arcAngle) //边框型风格
   fillArc(int x, int y, int width, int height,int startAngle, int arcAngle)  //填充型风格
其中前四个参数的含义与画椭圆一样,因此也必须用矩形的观点来确定弧在坐标系统中的位置。后两个参数就是用来定义椭圆的一部分:startAngle参数表示该弧从什么角度开始,arcAngle参数表示从startAngle开始转了多少度。
多边形的绘制
void drawPolygon(Polygon p)
参数是多边形对象Polygon ,先定义Polygon对象,然后将点加入到该对象中,然后利用drawPolygon进行多边形的绘制:
Polygon p = new Polygon;
p.addPoint(x1, y1);
p.addPoint(x2, y2);
...
g.drawPolygon(p);
复制与清除图形
copyArea(int x, int y, int width, int height, int dx, int dy)
 g.clearRect(0, 0, size( ).width, size( ).height);
早期版本的 AWT 提供了简单的绘制包,对于复杂的图形、文本或图像,其功能却不够全面。Java 2D增强了抽象窗口工具包 (AWT) 的图形、文本和图像功能,可以开发更为强大的用户接口和新型的 Java 应用程序
Java 2D API 类分为以下几个包:
1)java.awt:java.awt包含了一些新增的2D API 类别和接口。
2)java.awt.geom:包含可以勾勒任何形状的 GeneralPath类别。
3)java.awt.font:包含用于文本布局和字体定义的类和接口。
4)java.awt.color:包含用于颜色空间定义和颜色监视的类和接口。
5)java.awt.image和 java.awt.image.renderable:包含用于图像定义和绘制的类和接口。
6)java.awt.print:包含用于打印所有基于 Java 2D 的文本、图形和图像的类和接口。     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值