实例024 绘制花瓣
实例说明
本实例演示如何使用坐标轴平移和图形旋转等技术绘制花瓣。运行程序,将在窗体上绘制花瓣,效果如图1.24所示。
关键技术
本实例主要是通过在JPanel类的子类中,重写JComponent类的paint()方法,并在该方法中使用Graphics2D类的translate()、setColor()、rotate()和fill()方法来实现的。
(1)使用Graphics2D类的translate()方法,将坐标轴平移到指定点。
(2)使用Graphics2D类的setColor()方法,设置颜色。
(3)使用Graphics2D类的rotate()方法,旋转绘图上下文。
(4)使用Graphics2D类的fill()方法,在指定位置绘制带填充色的椭圆。
设计过程
(1)新建一个项目。
(2)在项目中创建一个继承JFrame类的DrawFlowerFrame窗体类。
(3)在DrawFlowerFrame窗体类中,创建内部面板类DrawFlowerPanel,并重写JComponent类的paint()方法,在该方法中实现花瓣的绘制。
(4)将内部面板类DrawFlowerPanel的实例,添加到窗体类DrawFlowerFrame的内容面板上,用于在窗体上显示绘制的花瓣,代码如下:
class DrawFlowerPanel extends JPanel { // 创建内部面板类
public void paint(Graphics g) { // 重写paint()方法
Graphics2D g2 = (Graphics2D)g; // 获得Graphics2D对象
g2.translate(drawFlowerPanel.getWidth() / 2, drawFlowerPanel.getHeight() / 2); // 平移坐标轴
// 绘制绿色花瓣
Ellipse2D.Float ellipse = new Ellipse2D.Float(30, 0, 70, 20); // 创建椭圆对象
Color color = new Color(0,255,0); // 创建颜色对象
g2.setColor(color); // 指定颜色
g2.fill(ellipse); // 绘制椭圆
int i=0;
while (i<8){
g2.rotate(30); // 旋转画布
g2.fill(ellipse); // 绘制椭圆
i++;
}
// 绘制红色花瓣
ellipse = new Ellipse2D.Float(20, 0, 60, 15); // 创建椭圆对象
color = new Color(255,0,0); // 创建颜色对象
g2.setColor(color); // 指定颜色
g2.fill(ellipse); // 绘制椭圆
i=0;
while (i<15){
g2.rotate(75); // 旋转画布
g2.fill(ellipse); // 绘制椭圆
i++;
}
// 绘制黄色花瓣
ellipse = new Ellipse2D.Float(10, 0, 50, 15); // 创建椭圆对象
color = new Color(255,255,0); // 创建颜色对象
g2.setColor(color); // 指定颜色
g2.fill(ellipse); // 绘制椭圆
i=0;
while (i<8){
g2.rotate(30); // 旋转画布
g2.fill(ellipse); // 绘制椭圆
i++;
}
// 绘制红色中心点
color = new Color(255, 0, 0); // 创建颜色对象
g2.setColor(color); // 指定颜色
ellipse = new Ellipse2D.Float(-10, -10, 20, 20); // 创建椭圆对象
g2.fill(ellipse); // 绘制椭圆
}
}
秘笈心法
心法领悟024:实现时钟的绘制。
利用图形旋转技术和坐标轴平移,可以实现时钟的绘制,具体方法是,通过线程或定时器控件,在指定的时间间隔内绕坐标轴分别旋转表示秒针、分针和时针的图形或图像,从而达到时钟显示时间的效果。