本文学习的是《Java开发实战1200例.第2卷》,文中的代码都是来自于网络。
首先上整个程序:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawLineFrame extends JFrame{
myPanel p = new myPanel();//定义一个画布
public static void main(String[] args) {
DrawLineFrame myFrame = new DrawLineFrame();
}
public DrawLineFrame(){
super();//调用父类构造方法
setTitle("画直线");
setBounds(100,100,200,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 窗体关闭方式
setVisible(true);
add(p);
}
}
class myPanel extends JPanel{
public void paint(Graphics g){//重写paint方法
g.drawLine(10, 20, 10, 80);
g.drawLine(80, 20, 80,87);
g.drawLine(40, 20, 40,90);//利用画笔的drawLine方法画直线
}
}
整个程序的思想是:1.首先写一个 myPanel类,并继承了JPanel类,重写其中的paint方法。 2.通过paint方法获取一个画笔类Graphics,通过调用Graphics类的很多方法来画图。3.定义一个DrawLineFrame类,继承了JFrame,重写其构造函数,构造函数包括设置title的名称,设置大小以及关闭窗口的事件,并添加myPanel对象。
下面说一下后面会出现的Graphics类中的各种方法。首先介绍下Graphics类,这是一个抽象类,位于java.awt包中。但是这里的paint方法还实例化了一个Graphics类,这个百度了下,还没弄明白。其中的很多方法都是abstract类型的。下面介绍几种:
1.public abstract void drawLine(int x1,int y1,int x2,int y2)
//其中(x1,y1)(x2,y2)分别是直线的起始和终止点的位置。
2.public abstract void drawRect(int x1,int y1,int x2,int y2)
//其中(x1,y1)(x2,y2)分别是矩形左上角和右下角的点的位置,画一个空的矩形
public abstract void fillRect(int x1,int y1,int x2,int y2)
//其中(x1,y1)(x2,y2)分别是矩形左上角和右下角的点的位置,画一个实心矩形
//对于正方形,在设置具体的点的时候设置边长相等就行了
3.public abstract void drawOval(int x1,int y1,int width,int height)
public abstract void fillOval(int x1,int y1,int width,int height)
//画一个椭圆,(x1,y1)是椭圆左上角的坐标,width和height是椭圆的宽和高
4.public abstract void drawArc(int x1,int y1,int width,int height,int startAngle,int arcAngle)
//绘制一个圆弧
5.public abstract void fillArc(int x1,int y1,int width,int height,int startAngle,int arcAngle)
//绘制一个扇形
6.public abstract void drawPolygon(int[] xPoints,int[] yPoints,int nPoints)
//绘制一个多边形,xPoints是对应点的x坐标,yPoints是对应点的y坐标,nPoints是绘制多边形的条数
上面是画图的几种方法。还可以通过调用java.awt.geom包中的二次和三次曲线。下面是画一个三次曲线的事例:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.CubicCurve2D;//三次曲线对象
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawCubicCurveFrame extends JFrame {
DrawCubicCurvePanel cubicCurvePanel = new DrawCubicCurvePanel(); // 创建面板类的实例
public static void main(String args[]) { // 主方法
DrawCubicCurveFrame frame = new DrawCubicCurveFrame(); // 创建窗体类的实例
frame.setVisible(true); // 显示窗体
}
public DrawCubicCurveFrame() {
super(); // 调用超类的构造方法
setTitle("绘制三次曲线"); // 窗体标题
setBounds(100, 100, 297, 199); // 窗体的显示位置和大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 窗体关闭方式
add(cubicCurvePanel); // 将面板类的实例添加到窗体容器中
}
class DrawCubicCurvePanel extends JPanel { // 创建内部面板类
public void paint(Graphics g) { // 重写paint()方法
Graphics2D g2=(Graphics2D)g;// 获得Graphics2D对象
// 创建三次曲线,其中点140,-140和点140,300是控制点,点20,80是起始点坐标,点260,80是终点坐标
CubicCurve2D.Double cubicCurve = new CubicCurve2D.Double(20,80,140,-140,140,300,260,80);
g2.draw(cubicCurve); // 绘制三次曲线
}
}
}
对于二次曲线只要调用QuadCurve2D.Double类的构造方法即可,实例如下:
QuadCurve2D.Double quadCurve2 = new QuadCurve2D.Double(60,120,120,40,180,120);
上面讲解了截图的图形方法,下面讲解如何设置文本。直接看代码:
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TextFontFrame extends JFrame {
ChangeTextFontPanel changeTextFontPanel = new ChangeTextFontPanel(); // 创建面板类的实例
public static void main(String args[]) { // 主方法
TextFontFrame frame = new TextFontFrame(); // 创建窗体类的实例
frame.setVisible(true); // 显示窗体
}
public TextFontFrame() {
super(); // 调用超类的构造方法
setTitle("设置文本的字体"); // 窗体标题
setBounds(100, 100, 333, 199); // 窗体的显示位置和大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 窗体关闭方式
add(changeTextFontPanel); // 将面板类的实例添加到窗体容器中
}
class ChangeTextFontPanel extends JPanel { // 创建内部面板类
public void paint(Graphics g) { // 重写paint()方法
String value = "明日编程词典社区";
int x = 40; // 文本位置的横坐标
int y = 50; // 文本位置的纵坐标
Font font = new Font("华文行楷", Font.BOLD + Font.ITALIC, 26); // 创建字体对象
g.setFont(font); // 设置字体
g.drawString(value, x, y); // 绘制文本
value = "http://community.mrbccd.com";
x = 10; // 文本位置的横坐标
y = 100; // 文本位置的纵坐标
font = new Font("宋体", Font.BOLD, 20); // 创建字体对象
g.setFont(font); // 设置字体
g.drawString(value, x, y); // 绘制文本
}
}
}
程序中调用了drawString方法来实现具体的文本书写功能;调用setFont方法来设置字体;setColor方法可以设置字体的颜色。