JAVA的绘图功能非常丰富绘图包括字体颜色图形以下我们将分技术专题来讲
一关于JAVA的绘图机制
JAVA中的任何一个图形组件小到文本框标签大到一个FRAME一个DIALOG都有一个专门负责显示其界面的函数这个函数名称是固定的paint它的原型为 public void paint(Graphics g) { …… } 每当组件大小位置组件内容发生变化时该函数即负责生成新的图形界面显示由于该函数可以被子类继承因此继承的子类有能力修改该函数如果子类中没有出现该函数则表示其行为完全继承自父类则不管是组件中是否添加了新的内容是否发生了大小的改变是否发生了位移父类都要有一个专门的线程来负责描绘变化以后的组件界面 paint函数由父类自动维护并且如果子类一旦重载该函数必须自己去维护所有的界面显示
二设置画笔颜色
颜色常识
任何颜色都是三原色组成(RGB)JAVA中支持位彩色即红绿蓝色分量可取值介于之间下面首先学习一个JAVA中的类Color Color中的常量
public final static Color black=new Color();
public final static Color blue=new Color();
…
Color的构造函数
public Color(int rint gint b);
使用举例如果想构造一个灰色对象则用下面的句子
Color gray=new Color();
设置画笔颜色语法
gsetColor(color); //color是一个Color对象
每修改一次颜色它影响的就是下面所有的绘图语句一直影响到再次碰到setColor函数才以新的颜色代替
使用JColorChooser组件选择颜色 JAVA中有一个已经定义好的选色器通过简单的语法我们就可以将该窗口调出来从其中选择自己喜欢的颜色下面的这个例子就是通过颜色选取器选取颜色并将选择到的颜色做为窗体的背景色
()JColorChooser简介 JColorChooser组件的showDialog()方法让用户从弹出的窗口中选择一个颜色并传给Color对象其调用语法如下 color=JColorChoosershowDialog(this选色color); 第一个参数指定调用选色器的父窗体第二个参数指定选色器窗口标题最后一个为接收颜色的颜色对象
如何将一个图形(以文件存在如JPG或者GIF)画到窗体的画布中 其实放置图形到画板中实际就是调用了画板的drawImage函数其大致思路如下 首先获取一个ImageIcon对象这个对象将会从指定的文件中读取相关图象信息它支持GIF和JPGBMP等基本图象格式语法如下
ImageIcon icon=new ImageIcon(GraExpclassgetResource(gif));
获取到图象的图标以后就可以从图标中获取到绘制到画板上的实际需要的图象
Image img=icongetImage();
有了这个图象对象我们就可以用画板的drawImage函数画图了
gdrawImage(imgnull);
中间两个参数是图象绘制时在画板的起始点坐标 例如
import javaawt*;
import javaawtevent*;
import javaxswing*;
public class GraExp extends JFrame {
ImageIcon icon;
Image img;
public GraExp() {
icon=new ImageIcon(GraExpclassgetResource(gif));
img=icongetImage();
setDefaultCloseOperation(WindowConstantsDISPOSE_ON_CLOSE);
setSize(new Dimension());
show();
}
public void paint(Graphics g) {
gdrawImage(imgnull);
}
public static void main(String[] args)
{
GraExp ge=new GraExp();
}
}
程序分析 需要注意的是图象文件所在的位置应该和该类放在同一个目录中这样不至于出错
系统扩展综合应用如何为一个窗体设置背景图片
要为一个窗体添加背景图片必须知道绘制JComponent组件的过程Swing轻量组件的绘制是组件和组件UI代表合作的结果 JComponentpaint先绘制组件然后绘制组件的边框再绘制组件的子组件调用的顺序确保组件边框和子组件都是可视的如果组件有一个UI代表则JComponentpaintComponent调用该代表的Update方法该方法为不透明组件擦除背景然后绘制组件 CInstead是一个不透明的组件如果重载paint方法其背景图是无法被擦除的因此即使更新了组件的所有包含组件在界面上是看不到的所以必须重载paintComponent方法在绘制子组件前先擦除背景对双缓存组件paint方法负责把组件绘制到屏外缓存中然后把屏外缓存拷贝到组件的屏上代表中正因为如此我们不建议为Swing组件重载paint如果需要重新定义如何绘制组件那么就重载paintComponent()
用可获取的字体样式字号修饰文字
()函数说明
字形类Font用于规范组件所使用的字形大小样式和字体等其构造函数
public Font(String nameint styleint size);
name表示本地可获取字体名称 style表示字体样式包含FontPLAINFontBOLDFontITALIC三种分别对应平体加粗和斜体 一个有用的方法用来获取本地可用字体
GraphicsEnvironment
ge=GraphicsEnvironmentgetLocalGraphicsEnvironment();
String[]
fa=gegetAvailableFontFamilyNames();
通过从绘图环境中获取到本地可用的字体名数组