java基本图形程序设计杂记

初始化程序语句结束后,main方法退出,但是并没有终止程序,终止的只是主线程,事件调度线程保持程序处于激活状态,直到关闭框架或者调用system.exit方法终止程序。

 

frame.setUndecorated关闭所有框架装饰。

 

frame.setLocationByPlatform窗口系统会控制窗口的位置,通常是在距离最后一个显示窗口很少偏移量的位置显示框架。

 

frame.setExtendedState(Frame.MAXIMIZED_BOTH)将框架设置为最大。

 

Toolkit类的静态方法getDefaultToolKit得到一个toolkit对象,然后getScreenSize可以得到屏幕的大小。

 

JCompent.paintComponent覆盖这个方法来描述应该如何绘制自己的组件。

 

2D图形

要想使用java2d库绘制图形,就必须获得Graphics2D类对象,这个类是graphics类的子类。painComponent方法自动获得一个graphics2D类对象。

要想绘制图形,首先要创建一个实现了shape接口的类的对象,然后调用graphics2D类中的draw 比如 Rectangle2d rect= 。。。。 g2.draw(rect)

 

2D库设计者为每个图形类设计了两个版本,一个是为那些节省空间的程序员提供的float类型的坐标,另一个为懒惰的程序员提供的double类型的坐标。比如rectangle2d是个抽象类,然后他包含了两个具体子类而且还是静态内部类。

rectangle2D.Float rectangle2D.Double 这种设计也适合其他图形类,比如point2d

这里有必要展示一下图形类之间的关系,下图中灰色的类是1.0版本遗留的类。

 

对于构造矩形对象,可以先一个空的对象然后用setFrameFromDialog方法指定大小,同理椭圆对象可以用setFrameFromCenter方法。

 

使用graphics2D的setPaint方法可以为图形环境上的所有后续的绘制操作选择颜色,比如g2.setPaint(Color.RED); g2.drawString("...");如果想绘制多种颜色,就需要按照选择颜色,绘制图形,再选择另外一种颜色,再绘制图形的顺序绘制。

 

为文本设定特殊字体

想知道某台机器支持的特定的字体,可以调用graphicsenvironment类中的getAvailableFontFamilyNames方法。返回一个字符型数组。这个类描述了用户系统的图形环境,为了得到这个类对性,需要调用静态的getLocalGraphicsEnvironment方法。

 

可以通过一个字体输入流读取字体文件。比如 URL url=new URL("http://www.fonts.com/Wingbats.ttf"); InputStream in = url.openStream(); Font f1=Font.createFont(Font.TRUETYPE_FONT,in);

Font f = Font.deriveFont(14.0F)设置字体大小。

 

想得到屏幕设备字体属性的描述对象,需要调用graphics2D类中的getFontRenderContext方法,返回一个FontRenderContext类对象,可以直接将这个对象传递给font类的getStringBounds方法。这样将返回包围字符串的矩形。为了解释这个矩形有几个术语要讲明,都在下图中展示。

 

行间距leading是某一行的坡底与下一行的坡顶之间的距离。字体高度是梁旭两个基线之间的距离等于 下坡度 行间距 上坡度之和。 矩形对象通过getwidth ,getheight,gety得到字符的宽度,高度,以及上坡度。font的getlineMetrics,得到lineMetrics对象,这样getDescent,getleading方法得到下坡度,以及行间距。

 

也可以通过先从jcomponent类先调用getFontMetrics方法然后调用getFontRenderContext得到fontrendercontext类对象,即使没有graphics2D的帮助。

 

图像

如果图像存储在本地文件中,可以调用

String filename = ...

Image image = ImageIO.read(new File(filename));

g.drawImage(image,x,y,null);

显示图片。如果想在一个窗口中平铺显示一个图像,可以采用paincomponent方法覆盖来实现。现在左上角显示图像的一个拷贝,然后采用copyArea方法将其拷贝到整个窗口。

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值