Java基础学习笔记 第二部分 part 1

1.Java GUI API

* Component是所有用户界面类的父亲
* Container用于对组件进行归类
* JComponent是所有轻量级Swing组件的父类     (打亮的类及其子类放置在javax.swing, 其他类放在java.awt包中
* JFrame是不包含在其他窗口内的窗口。它是承载java图形应用程序中的其他s
* .wing用户界面组件的容器
* JDialog是下拉窗口或者消息框,通常用作接收来自用户的附加信息或者提供事件产生的通告的临时窗口
* JPanel是承载用户界面组件的不可见容器
* Grapgics是提供绘制字符串,线条和简单形状的图形上下文的抽象类
* Color处理GUI组件的颜色
* Font指定文本和GUI组件上图形的字体
* Dimension将组件的宽度和高度(精确到整数)封装在一个单独的对象中

GUI可分为3组:容器类,组件类和帮助类
swing GUI组件的命名以前缀J开始



2.框架

创建框架

(JFrame在javax.swing程序包中,所以语句import javax.swing.*使用javax.swing程序包中的所有类可用)
两个构造方法创建JFrame对象:
(1)public JFrame() 构造无标题的JFrame对象
(2)public JFrame(String title)构造指定标题的对象
方法:
(3)frame.setVisible(true) 应用后才会显示框架
(4)frame.setSize(400,300) 指定框架的尺寸为400像素宽300像素高
(5)frame.setDefaultOperation(JFrame.EXIT_ON_CLOSE) 控制程序的终止
(6)frame.setLocation(x,y) 指定框架的位置,将框架的左上角置于(x,y)
注意:屏幕的宽度和高度可以使用java.awt.Toolkit类获得 eg.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;

(7)frame.getSize() 获得框架的尺寸
将框架居中:(结合上面那段代码)
注意:-getSize方法定义在Component类中。java.awt.Dimension类将组件的宽度和高度封装在一个单独的对象中
-内容面板是Container的子类
(8)getContentPane() 返回框架的内容面板 ,得到框架下的container容器


布局管理器(java的GUI组件放置在容器中,在其中由容器的布局管理器对他们进行排列)

设置布局管理器: container.setLayout(new SpecificLayout());
add() 向容器添加组件
remove() 从容器中删除组件
(1)FlowLayout (组件在容器中按照添加的顺序由左至右排列,一行放满之后,重新开始新行)
3个可以指定组件排列方式的常量:FlowLayout.RIGHT FlowLayout.CENTER FlowLayout.LEFT
3个构造函数:
.1)public FlowLayout(int align,int hGap,int vGap) 以指定的排列,水平间距和垂直间距构造一个新的FlowLayout。间距是组件间的像素距离
.2) (int alignment)以指定的排列和默认的5像素水平间距和5像素垂直间距
.3) ()默认居中排列。。。。。。
(2)GridLayout(管理器按照构造函数定义的行数和列数以网格(矩阵)格式排列组件)
3个构造函数:
.1)public GridLayout(int rows,int columns,int vGap) 指定行数和列数,以及容器中组件之间指定的水平和垂直间距
.2) (int rows,int columns)指定行数和列数
.3) ()在一行的一列上构造新的GridLayout

可以指定网格中的行列数,基本规则如下:
1.如果其中一个为0,另一个不为0,不为0的维数固定,而0维数由布局管理器动态确定

(3)BorderLayout(将窗口划分为东南西北和中间)
通过使用add(Component,index)将组件添加到BorderLayout,这里的index是固定的BorderLayout.EAST,,,BorderLayout.CENTER
.1)public BorderLayout(int hGap,int vGap)指定水平垂直间距
.2)public BorderLayout()构造没有水平和垂直间距的新的BorderLayout
注意:使用BorderLayout要指定组件放置的位置
如果从程序中删除东区的按钮,并重新运行,将看到中间的组件向右拉伸,填充东区
BorderLayout将默认的index参数指定为BorderLayout,CENTER
如果向容器中添加如下两个组件:container.add(component1); container.add(component2); 那么,只显示最后一个组件


在面板中绘制图形(JPanel的另一个重要的应用

在面板内进行绘制,需要创建扩展JPanel的新类,并使用paintComponent方法告诉面板如何进行绘制
public void paintComponent(Graphics g) 图形对象g由Java运行时,系统自动创建,该对象控制信息的绘制
在显示新的图形前,有必要调用super.paintComponent(g)清空浏览区域,若无,前面的图形不会清空

Color类:颜色由红绿蓝组成,每种元素以从0(最深)到255(最浅)的字节值代表它的亮度

      创建颜色对象的语法:Color color = new Color(r,g,b);

Font和FontMetrics类:字体和字体度量

创建Font对象:Font myFont=new Font(name,style,size);
找系统上可用的字体,需要使用java.awt.GraphicsEnvironment的静态方法getLocalGraphicsEnvironment()创建它的实例,GraphicsEnvironment是描述特定系统上图形环境的一个抽象类,可以使用它的getAllFonts()方法获得系统上所有的可用字体,使用它的getAvailableFontFamilyNames()方法获得所有可用字体的名称

       FontMetrics可以用于计算字符串的确切长度和宽度
       public FontMetrics getFontMetrics(Font f) 返回指定字体的字体度量
       public FontMetrics getFontMetrics()返回当前字体的字体度量
       public int getAscent() 返回从基线到字符顶端的字符高度
       public int getDescent() 返回从基线到字符底部的距离
       public int getLeading() 返回文本行之间的空间
       public int getHeight() 返回以上三个的总和

注意:MessagePanel类使用属性xCoordinate和yCoordinate指定显示在面板上的信息的位置,不要使用属性名x和y,因为他们已经定义在Component类中,用于指定父坐标系统中组件的位置

绘制几何图形(Graphics类中)
drawLine(x1,y1,x2,y2); 绘制一条直线
矩形:参数x和y代表矩形左上角坐标,而w和h是矩形的宽度和高度
drawRect(x,y,w,h); 绘制一般矩形
fillRect(x,y,w,h); 绘制用填充色的矩形
drawRoundRect(x,y,w,h,aw,ah); 绘制圆角矩形 参数aw是边角圆弧的水平直径,ah是垂直直径
fillRoundRect(x,y,w,h,aw,ah); 绘制带填充色的圆角矩形
draw3DRect(x,y,w,h,raised); 最后一个参数是布尔值,表明矩形是凸出还是凹下
椭圆:是基于外切矩形来画的,所以x和y是外切矩形的左上角坐标
drawOval(x,y,w,h);
fillOval(x,y,w,h);
圆弧
drawArc(x,y,w,h,angle1,angle2); angle1是起始角,2是跨度角,逆时针代表正角
fillArc(x,y,w,h,anglle1,angle2);
多边形(有直接方法和使用Polygon对象)
直接方法:
drawPolygon(x,y,n); 参数x和y是代表x坐标和y坐标的数组,n代表顶点的个数
fillPolygon(x,y,n);
使用Polygon对象:
(1)Polygon poly=new Polygon();
Polygon.addPoint(x1,y1); addPoint方法添加一个顶点
Polygon.addPoint(x2,y2);
g.drawPolygon(poly);
(2)Polygon poly=new Polygon(x,y,n); 这里的参数和drawPolygon对应的参数含义相同


事件驱动编程(事件可以定义为表示某件事发生的程序符号)
事件产生所在的GUI组件称为源对象。例如,对单击按钮动作事件来说,按钮就是源对象。
事件是事件类的一个实例,事件类的根类是java.util.EventObject
可以使用EventObject类中的getSource()实例方法,标识事件的源对象
这里写图片描述这里写图片描述

注意:除ListSelectionEvent包含在javax.swing.event程序包中之外,都包含在java.awt.event程序包中


事件注册,侦听和处理
注册方法依赖于事件类型,对ActionEvent事件,注册方法为addActionListener()
eg. A.addXXXListener(B); 当A发生XXXEvents事件时,对象B能得到通知(B为侦听器),并将调用相应的方法处理该事件
标准事件处理程序:定义在相应的接口中,侦听器必须实现相应的接口
这里写图片描述这里写图片描述

附加: e.getActionCommand()返回从按钮返回动作命令,默认情况下,按钮的动作命令就是按钮的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值