Java how to program(Third Edition) ——手记(六)

Java how to programThird Edition II

                     ——手记

第十一章 图形和Java2D

1.由于窗口最左上角的坐标(00)实际上是标题栏的后面。所以,使用坐标绘制图形时应该调整它到窗口边框的里面。Container类(java中所有窗口类的超类)中有一个专门针对该目的的方法getInsets,它能返回一个Insets对象(java.awt包)。Insets对象中有4public成员——top,bottom,leftright,它们代表了窗口中可绘制区域的四条边。

2Graphics是一个抽象类,这是由Java的可移植性决定的。在支持Java的各个平台上,绘图的实现是不同的,还没有一个能在所有系统上实现绘图功能的类。在各种平台上使用Java时,系统创建Graphics的一个派生类,由它来实际实现所有的绘图功能,为用户提供界面Graphics类,使我们能够编写以独立与平台的方式使用图形的程序,将其实现隐蔽起来。

3Color方法和与颜色相关的Graphics方法:

   1public Color(int r,int g,int b)  //在红、绿、蓝颜色含量的基础上创建一种颜色,每种含量都用0~255之间的一个整数表示;

   2public Color(float r,float g,float b)  //在红、绿、蓝颜色含量的基础上创建一种颜色,每种含量都用0.0.~1.0之间的一个浮点数表示;

   3public int getRed()  //返回一个0255之间表示红色含量的值;

   4public Color getColor()   //返回一个代表图形上下文当前颜色的Color对象;

   5publc setColor(color c)   //设置图形上下文设置当前绘图颜色。

4Java选择颜色的GUI控件JcolorChooser(javax.swing)

 JcolorChooser类的static方法showDialog显示颜色选择对话框。该方法返回被选择的Color对象(如果按下cancel键,或没有按下OK键就关闭了对话框,则返回null)。

 showDialog方法有三个参数,第一个指向其父控件,String为对话框标题栏显示的信息,最后一个为对话框中选中的初始颜色。

5.字体的构造函数和Graphics类方法setFont

   1public Font(String name, int style,int size)  //用指定的字体,风格和大小创建一个Font对象。

   2public int getStyle();   public String getName();   public int getSize();

public String getFamily();

   3public boolean isPlain();  pulbic boolean isBold();  public boolean isItalic();

   4public Font getFont();   //返回一个字体对象的引用,表示但前字体;

   5public void setFont(Font f);  //设置当前字体为Font对象指定的字体,风格和大小;

6.用于绘制直线、矩形和椭圆的Graphics方法:

   1public void drawLine(int x1,int y1,int x2,int y2);

   2public void drawRect(int x,int y,int width,int height);  //用指定的参数画一个空心的矩形

   3public void fillRect(int x,int y,int width,int height);   //用指定的参数画一个实心的矩形

   4public void clearRect(int x,int y,int width,int height);  //用当前背景色绘制一个矩形;

   5public void drawRoundRect(int x,int y,int with,int height,int arcWidth,int arcHeight);//其中arcWidtharcHeight决定其圆角

   6public void fillRoundRect(int x,int y,int with,int height,int arcWidth,int arcHeight);

   7public void draw3DRect(int x,int y,int with,int height,boolean b);//btrue时,矩形为突出,false则凹陷;

   8public void fill3DRect(int x,int y,int with,int height,boolean b);

   9public void drawOval(int x,int y,int with,int height);

   10) public void fillOval(int x,int y,int with,int height);

7.新的Java2D API提供了高级的二维图形功能,这些都在下列包中:java.awt, java.awt.image, java.awt.color, java.awt.font, java.awt.geom, java.awt.print, java.awt.image.renderable

8.实例分析:

1)源代码:

package Shapes;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import java.awt.geom.*;

import java.awt.image.*;

 

 

public class Shapes extends JFrame{

  public Shapes(){

    super("Drawing 2D shapes");

    setSize(425,160);

    show();

  }

  public void paint(Graphics g){

    Graphics2D g2d=(Graphics2D)g;

 

 

    g2d.setPaint(//setPaint 方法设置paint对象,以决定显示的颜色和形状;

      new GradientPaint(5,30,Color.blue,35,100,Color.green,false)//最后一个参数

      //false表示渐变颜色不循环;

    );

    g2d.fill(new Ellipse2D.Double(5,30,65,100)); //使用双精度的浮点数设置尺寸;

 

 

    g2d.setPaint(Color.red);

    g2d.setStroke(new BasicStroke(10.0f)); //设置画笔的宽度为10象素;

    g2d.draw(new Rectangle2D.Double(80,30,65,100));

    //BufferedImage对象生成花纹,BufferedImage类可以用颜色和灰度来产生图形,该

    //处的1010表示BufferedImage10个象素宽,10个象素高,BufferedImage.TYPE_INT_RGB

    //表示图像中存储的颜色用RGB体系;

    BufferedImage buffImage=new BufferedImage(10,10,BufferedImage.TYPE_INT_RGB);

    Graphics2D gg=buffImage.createGraphics(); //BufferedImage中绘制图形;

    gg.setColor(Color.yellow);

    gg.fillRect(0,0,10,10);

    gg.setColor(Color.black);

    gg.drawRect(1,1,6,6);

    gg.setColor(Color.blue);

    gg.fillRect(1,1,3,3);

    gg.setColor(Color.red);

    gg.fillRect(4,4,3,3);

 

 

    g2d.setPaint(

      new TexturePaint(buffImage,new Rectangle(10,10)) //TextturePaint对象用存储在

      //BufferedImage中的图像作为填充纹理来填充图形;

    );

    g2d.fill(new RoundRectangle2D.Double(155,30,75,100,50,50));

 

 

    g2d.setPaint(Color.white);

    g2d.setStroke(new BasicStroke(6.0f));

    g2d.draw(

      new Arc2D.Double(240,30,75,100,0,270,Arc2D.PIE)//Arc2D.PIE常量指出是用两条

    //直线封闭弧形, Arc2D.CHORD表示将画一条从起点到终点的直线,Arc2D.OPEN表示不封闭;

    );

 

 

    g2d.setPaint(Color.green);

    g2d.draw(new Line2D.Double(395,30,320,150));

 

 

    float dashes[]={10};

 

 

    g2d.setPaint(Color.yellow);

    g2d.setStroke(

      new BasicStroke(4,BasicStroke.CAP_ROUND,//设置画笔4个象素,端点有为圆角;

                      BasicStroke.JOIN_ROUND, //线条汇合处也为圆角;

                      10,dashes,0) //dashes表示小段虚线的长度;

                      //0表示dashes数组中的起始位置;

    );

    g2d.draw(new Line2D.Double(320,30,395,150));

   }

    public static void main(String args[]){

    Shapes app=new Shapes();

    app.addWindowListener(

      new WindowAdapter(){

        public void windowClosing(WindowEvent e){

          System.exit(0);

        }

      }

    );

  }

}

第十二章 基本图形用户界面构件

1Swing构件经常被称为轻量级构件,因为他们是用Java写成的,所以就不需要使用那些相关于各种平台的复杂GUI功能。AWT(Abstract Windows Toolkit)构件(许多和Swing构件功能相同)被系在各自的本地平台上,相应的称为重量级构件,因为他们依赖于本地平台的窗口系统来决定他们的功能、外观和风格。

2.为了处理图形用户界面事件,需要注册事件侦听器和实现事件处理。一个GUI事件的事件侦听器是一个对象,此对象的类实现了java.awt.event包和javax.swing.event包中一个或多个事件侦听器的接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值