#Java 核心技术卷一阅读笔记# 第十章 图形程序设计

AWT:抽象窗口工具,像事件处理这样的窗口工具箱的底层机制,其组件是由用户的窗口系统绘制,不同系统的观感不同。AWT类位于java.awt包中
Swing:“被绘制”的用户界面,组件绘制在画布上,可使不同的系统具有相同的观感,Swing类位于javax.Swing包中

1.框架(JFrame)

继承自AWT库的Frame类,由用户的窗口系统绘制,是用来储存组件(JComponent)的容器。
1.所有Swing组件都必须由事件分派线程进行配置
2.需要定义关闭框架时的相应动作
对于框架而言,坐标相当于整个屏幕,而对于框架中的组件来说,坐标相当于框架大小。
如果没有指定框架大小(setSize()),则默认大小为0x0像素。
为了确定合适的框架大小,可以先得出屏幕的大小,再确定窗口大小

//得出屏幕大小
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int width = screenSize.width;
int height = screenSize.height;
//将框架大小设置为屏幕的一半
setSize(width,height);
setLocationByPlatform(true);//窗口系统自己选用窗口的位置

这里写图片描述
其中JComponent类是所有Swing组件(除顶层窗口之外)的超类,组件必须要放在顶层窗口之中。
JPanel是一个可以包含其他组件的容器,同时也能在上面进行绘制。

2.在组件中绘制(draw)信息

1.构建一个扩展自JComponent的类
每个Swing组件都扩展于JComponent
2.覆盖paintComponent(Graphics g)
此方法是用来绘图(文字),当需要重新绘图时此方法会自动被调用。方法中的参数是Graphics类,用来保存用于绘制图像和文字的设置。Graphics类主要用来处理文字、图像。

class Text extends JComponent
{
    public void paintComponent(Graphics g)
    {
        g.drawString("HelloWorld",75,100);
    }
}

3.Graphics2D类

Graphics类可以类型转换为Graphics2D类,用来处理2D图像、使用颜色、使用特殊字体、文字、图像等
a.2D图像,Graphics2D类可以绘制Point2D/Rectangle2D/Ellipse2D/Line2D对象,后三种实现了Shape接口。

class Text extends JComponent
{
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
        Rectangle2D r = new Rectangle2D.Double(10.0,20.0,22.5,23.5);
        g2.draw(r)
    }
}

其中,Point2D/Rectangle2D/Ellipse2D/Line2D均含有内部类xx.Double和xx.Float,只需要在构造对象时用到,如果要节省空间使用float型。(因为Java在将double赋予float时必须进行类型转换,但是会损失精度,如float f = 1.2是错误的,double型的1.2转换为f会损失精度,只能这样处理float f = 1.2F或(double)强制类型转换,为了使用方便,出现了相应的内部类)
这里写图片描述
其中Point类和Rectangle类是用整型坐标储存点和矩形。
b.使用颜色
其setPaint()可以为图形环境上所有后续的绘制操作选择颜色

class Text extends JComponent
{
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
        g2.setPaint(Color.Red);//java.awt.Color类有13个预定义常量
        g2.drawString("Hellow",75,100);//字体为红色
        g2.setPaint(new Color(0,122,122));//自定义颜色
        Rectangle2D r = new Rectangle2D.Double(10.0,20.0,22.5,23.5);
        g2.fill(r);//长方形为指定颜色
    }
}

而Graphics使用setColor()来选择颜色
3.设置字体

class Text extends JComponent
{
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
        Font f = new Font("SansSerif",Font.BOLD,14);/*Font(String name, int style,int size) Creates a new Font from the specified name, style and point size.*/
        g2.setFont(f);
        g2.drawString("hello",75,100);
    }
}

猜你喜欢

转载自blog.csdn.net/zhou373986278/article/details/78197228