1.Graphics 类
源于网络的类方法:
1、画直线 drawLine(int x1,int y1,int x2,int y2); // 直线的两个点
2、画矩形边框 drawRect(int x,int y,int width,int height);
3、画椭圆边框 drawOval(int x,int y,int width,int height);
4、填充矩形 fillRect(int x,int y,int width,int height);
5、填充椭圆 fillOval(int x,int y,int width,int height);
6、画图片 drawImage(Image img.int x,int y,..);
7、画字符串 drawString(String str,int x,int y);
8、设置画笔的字体 setFont(Font font);
9、设置画笔的颜色 setColor(Color c);
2.分析项目
(1)shape类
package shapes;
import java.awt.Graphics; //导入graphics类
public abstract class Shape {
public abstract void draw(Graphics g); //抽象函数不能有{}
}
这里定义了一个抽象类,关键词是abstract。这个类中如果有一个函数是抽象的,那么则个类一定是抽象的。
shape这个类型是抽象的,它的子类如果继承了父类,那么子类中必须具体化父类中的所有方法。
牵扯到swt类的东西,昨晚开始学习。
主要分清楚,他们的子类父类:(借用前辈的图,侵权删除)
component 是组件的意思,然后子类是container 是容器。
然后window 和panel是不一样。
frame从容器上继承,可以添加panel。
然后frame默认为不可见,需要setvisabell()
Frame是框架窗体,有边框的;Panel是面板,无边框。一般把几个Panel加到一个Frame上。
frame 是顶级容器,不可以自身嵌套。panel不是则需要嵌套在顶级容器中得以显示,且可以自身嵌套。
另外一般在panel中置入组件。
我们用得最多的JFrame和JPanel,就是Frame和Panel在Swing下的扩展(JFrame是Fr
ame子类和JPanel是Panel的子类)。()这个就是shape中的重点
另外还有frame.pack()方法。用于设置最佳的尺寸。在AWT中,提供了五种布局管理器:BorderLayout FlowLayout GridLayout CardLayout GridBagLayout
BorderLayout FlowLayout GridLayout(已经分析过了,但是网站数据没有保存,好奇怪)
4.CardLayout (类似堆叠起来的扑克牌,只有最上面的一张会被看到)
构造器:
CardLayout ()默认构造器
CardLayout (int hgap,int vgap) hgap是指 有一点不一样的东西就是 hgap是指卡片与左右边界的距离,vgap是与上下边界的间距
first(container target) last(container target) previous(container target)显示前一个卡片 next(container target)显示最后一个卡片
show(container target,string name)显示名字为name的卡片
绝对定位:
可以直接将setlayout 直接设置成null 这样可以随意定位
gridbaglayout虽然功能强大,但是确实太复杂了,让我都没怎么看懂它。
BoxLayout(Container target,int axis):制定基于target容器创建的boxlayout布局管理器,该布局管理器按照axis方向排列。
axis有BoxLayout.X_AXIS 横向和BoxLayout.Y_AXIS 纵向两个方向。
boslayout 通常和box容器结合使用,box是一个特殊的容器。它有一点像panel容器,但该容器默认使用boxlayout
box提供了两个静态方法来创建box对象:
createHorizontalBox():创建一个水平排列组件的box容器
createVerticalBox():创建垂直排列组件的Box容器
一旦获得了BOX容器,就可以使用box来盛装普通gui组件,然后再将这些box组件添加到其他容器中。
create Horizontal/vertical Glue() glue是可以随着窗口变动的边距
create Horizontal(垂直可改变)/vertical(水平可改变) Strut(int width)
createRigidArea(Dimension d)创建指定宽度,高度的GigidArea 不可拉伸的间距
布局学完终于要开始学awt了,虽然这些也算awt。
awt常用的组件
基本:Button,Canvsa,Checkbox,CheckboxGroup,Choice,Frame,lable.list,
Panel(基本容器类),Scrollbar,ScrollPane(带水平垂直的滚动条)
TextArea(多行文本域),TextField(单行文本框)
通过学习这些组件,可以知道panel是可以嵌套在box中的,组件可以多重嵌套。
另外值得注意的是每个组件的构造器。
Checkbox male=new Checkbox("男",cbg,true); //成组的复选框,只能选定一个 Checkbox("",组,状态)
Checkbox female=new Checkbox("女",cbg,false);
Checkbox married=new Checkbox("是否已婚",false); //单个选框,中间的参数组去掉,只留下字段以及选中的状态
Choice colorChooser =new Choice();//定义一个下拉选框
List colorList=new List(6,true);
TextArea ta=new TextArea(5,20);//多行文本框,定义了5行 20列的文本框
TextField name=new TextField(50); //单行文本框
对话框
对话框非常依赖其他窗口,就是通常有一个parent的窗口
对话框有 nonmodel 以及model两种,当某个模式的对话框被打开以后,总是在它被以来的窗口上
在模式对话框被关闭之前,它依赖的窗口无法获得焦点。
对画框有多个重载的构造器,三个参数,好像暂时用不到
Dialog存在一个子类,叫做FileDialog,分别可支持parent,title,mode三个构造参数
其中parent,title指定文件对话框的所属父窗口和标题,而mode用于指定该窗口用于打开文件和保存文件
FileDialog提供如下两个方法,参数值:FileDialog.LOAD FileDialog.SAVE
getDirectory():采取被打开/保存的绝对路径
getFile():获取Filedialog 被打开/保存的文件名
终于学习到事件处理了,现在可以添加事件了。
在awt事件中所有事件的处理,必须由特定对象(事件监听器)来处理,而Frame和组件本身没有事件处理能力。
java事件模型的流程:
Event Source:事件源 :事件发生的场所,通常就是各个组件,例如按钮,窗口,菜单
Event 事件 事件封装了GUI组件上发生的特定事情(通常就是一次用户操作)
Event Listener 事件监听器 负责监听事件源所发生的事件,并对各种事情做出响应处理。