Java 图形程序设计 jtcs1.java

程序设计:谢山水 2003.11.11.

// Java 图形程序设计 jtcs1.java 程序设计: 谢山水 2003.11.11.
// Java 多叶曲线:线宽、颜色、分段颜色、背景色、花叶数、显示速度
// 画图方向:向左画、向右画、向上画、向下画
// 位置:水平、垂直多条多叶曲线

import java.awt.*;

// 1.图形程序设计 jtcs1 类继承框架 Frame
public class jtcs1 extends Frame {
public jtcs1() {
setLayout(new BorderLayout()); // 设置边界布局
DrawPanel display = new DrawPanel();// 创建画图面板实例 display
add("Center", display); // 对中加入画图面板 display
}

// 2.关闭窗口,终止程序
public boolean handleEvent(Event e) {
switch (e.id) {
case Event.WINDOW_DESTROY: // 窗口关闭
System.exit(0); // 系统退出,终止程序
return true;
default:
return false;
}
}
// 3.程序入口 main
public static void main(String args[]) {
jtcs1 JavaTxcxsj = new jtcs1();
JavaTxcxsj.setTitle("Java 语言图形程序设计 谢山水 2003.11.11.");
JavaTxcxsj.setSize(800,600);
JavaTxcxsj.show();
}
}

// 4.定义画板类,求x,y轴投影和坐标的方法,定义画图方法
class DrawPanel extends Panel {
int hy,x,y,r=10,r2=300,r3=200;
// 花叶,x,y原点,半径,椭圆长短轴
double PI=3.141596,j,j1=PI/1111,k;

// 定义边框花边函数 fx,fy
double fx(double j){ //定义求x轴投影和x轴坐标的方法
return x+(Math.cos(hy*j)*Math.cos(j))*r;
// 调整x轴坐标原点,花叶数,x轴投影,花叶半径
}
double fy(double j){ //定义求y轴投影和y轴坐标的方法
return y+(Math.cos(hy*j)*Math.sin(j))*r;
// 调整y轴坐标原点,花叶数,y轴投影,花叶半径
}

// 定义椭圆花边函数 fx1,fy1
double fx1(double j){ //定义求x轴投影和x轴坐标的方法
return x+Math.cos(k)*r2+(Math.cos(hy*j)*Math.cos(j))*r;
// x轴坐标原点,椭圆长轴,花叶数,x轴投影,花叶半径
}
double fy1(double j){ //定义求y轴投影和y轴坐标的方法
return y+Math.sin(k)*r3+(Math.cos(hy*j)*Math.sin(j))*r;
// y轴坐标原点,椭圆短轴,花叶数,y轴投影,花叶半径
}

public void paint(Graphics g) { // 定义画图方法
g.setColor(new Color(255,0,255)); // 设置画笔为紫色
g.drawRect(5,5,780,540); // 画图纸外边框

g.setColor(new Color(0,133,255)); // 设置画笔为青色
g.drawRect(15,15,760,520); // 画图纸内边框
g.drawRect(16,16,758,518);
g.drawRect(17,17,756,516);
g.drawRect(18,18,754,514);

// 5.绘制上下水平3,5叶紫色花边
g.setColor(new Color(255,0,255)); //设置画笔为紫色
for (x=50;x<755;x+=23){
for (j=0;j<=2*PI;j+=2*j1){
hy=3;r=10;y=40; // 上3花叶,半径,y原点,
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
hy=5;y=510; // 下5花叶,y原点,
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
}

// 6.绘制左右垂直7,9叶绿色花边
g.setColor(new Color(0,155,0)); // 设置画笔为绿色
for (y=65;y<495;y+=23){
for (j=0;j<=2*PI;j+=2*j1){
hy=7;x=45; // 左7花叶,x原点
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
hy=9;x=750; // 右9花叶,x原点,
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
}

// 7.画橙色填充窗口
g.setColor(new Color(255,255,0));
g.fillRect(20,20,750,510);

// 8.绘制上下水平左右垂直4叶花边
for (j=0;j<=2*PI;j+=j1/3){
g.setColor(new Color(255,0,255)); //设置画笔为紫色
for (x=60;x<730;x+=44){
hy=2;r=20;y=60; // 上4花叶,半径,y原点,
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
y=490; // 下4花叶,y原点,
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}

g.setColor(new Color(0,155,0)); // 设置画笔为绿色
for (y=110;y<460;y+=44){
x=65; // 左4花叶,x原点
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
x=730; // 右4花叶,x原点,
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
}

// 9.画橙色填充窗口
g.setColor(new Color(155,200,0));
g.fillRect(20,20,750,510); 

// 10.绘制上水平3叶紫色花边
g.setColor(new Color(255,0,255)); //设置画笔为紫色
hy=3;r=10;y=40; // 花叶数,半径,y原点,
for (x=50;x<755;x+=18){
for (j=0;j<=2*PI;j+=j1){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
}

// 11.绘制右垂直5叶绿色花边
g.setColor(new Color(0,155,0)); // 设置画笔为绿色
hy=5;x=750; // 花叶数,半径,x原点,
for (y=65;y<495;y+=23){
for (j=0;j<=2*PI;j+=j1){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
}

// 12.绘制下水平7叶青色花边
g.setColor(new Color(0,133,255)); // 设置画笔为青色
hy=7;y=510; // 花叶数,y原点,
for (x=740;x>30;x-=23){
for (j=0;j<=2*PI;j+=j1){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
}

// 13.绘制左垂直9叶橙色花边
g.setColor(new Color(255,200,0)); // 设置画笔为橙色
hy=9;x=45; // 花叶数,x原点
for (y=480;y>50;y-=23){
for (j=0;j<=2*PI;j+=j1){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
}

// 14.绘制椭圆8叶黄色花边
g.setColor(new Color(200,255,0)); // 设置画笔为黄色
hy=4;x=400;y=270; // 花叶,x,y原点
for (k=5*PI/8;k<19*PI/8;k+=PI/30){
for (j=0;j<=2*PI;j+=j1){
g.drawLine((int)fx1(j),(int)fy1(j),(int)fx1(j+j1),(int)fy1(j+j1));
}
}

// 15.输出文字
Font fnt20 = new Font("TimesRoman",Font.PLAIN,20);
Font fnt40 = new Font("宋体",Font.BOLD,40); // 创建字体对象

g.setFont(fnt20); // 设置当前字体
g.setColor(new Color(255,0,255));
g.drawString("Java TXCXSJ",340,170); // 紫字

g.setFont(fnt40); // 设置当前字体
g.setColor(new Color(0,0,255));
g.drawString("Java 语言图形程序设计",190,260);// 蓝字

g.setFont(fnt20); // 设置当前字体
g.setColor(new Color(0,133,0));
g.drawString("程序设计: 谢山水",320,340); // 绿字
g.drawString("2003年11月11日",340,390);

// 16.绘制左上角紫色窗口
g.setColor(new Color(0,255,255));
g.drawRect(65,60,90,70); // 画窗口青色边框
g.setColor(new Color(255,0,222));
g.fillRect(68,63,84,64); // 画紫色填充窗口

// 17.绘制右上角绿色窗口
g.setColor(new Color(255,0,222));
g.drawRect(645,60,90,70); // 画窗口紫色边框
g.setColor(new Color(0,133,0));
g.fillRect(648,63,84,64); // 画绿色填充窗口

// 18.绘制右下角蓝色窗口
g.setColor(new Color(255,255,0));
g.drawRect(645,415,90,70); // 画窗口黄色边框
g.setColor(new Color(0,0,255));
g.fillRect(648,418,84,64); // 画蓝色填充窗口

// 19.绘制左下角橙色窗口
g.setColor(new Color(255,0,255));
g.drawRect(65,415,90,70); // 画窗口紫色边框
g.setColor(new Color(222,155,0));
g.fillRect(68,418,84,64); // 画橙色填充窗口

// 20.四个小窗口:画一个花擦除一个
// 画左上窗口绿花 
g.setColor(new Color(0,255,0)); 
hy=3;x=110;y=95;r=30; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
g.setColor(new Color(255,0,222));
g.fillRect(68,63,84,64); // 紫色填充擦左上窗口 
// 画右上窗口紫花
g.setColor(new Color(255,0,255));
hy=5;x=690; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){ 
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
g.setColor(new Color(0,133,0));
g.fillRect(648,63,84,64); // 绿色填充擦右上窗口 
// 画右下窗口黄花
g.setColor(new Color(255,255,0)); 
hy=7;y=450; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
g.setColor(new Color(0,0,255));
g.fillRect(648,418,84,64); // 蓝色填充擦右下窗口

// 画左下窗口蓝花
g.setColor(new Color(0,0,255)); 
hy=9;x=110; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}
g.setColor(new Color(222,155,0));
g.fillRect(68,418,84,64); // 橙色填充擦左下窗口 // 21.四个小窗口:画花不擦除
// 画左上窗口绿花 
g.setColor(new Color(0,255,0)); 
hy=3;x=110;y=95;r=30; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}

// 画右上窗口紫花
g.setColor(new Color(255,0,255));
hy=5;x=690; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){ 
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}

// 画右下窗口黄花
g.setColor(new Color(255,255,0)); 
hy=7;y=450; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}

// 画左下窗口蓝花
g.setColor(new Color(0,0,255)); 
hy=9;x=110; // 花叶,x,y原点
for (j=0;j<=2*PI;j+=j1/55){
g.drawLine((int)fx(j),(int)fy(j),(int)fx(j+j1),(int)fy(j+j1));
}

// 22.设置背景两次(黄色,橙色),可以使用画面不断刷新重画.
setBackground(new Color(255,255,0)); 
setBackground(new Color(133,200,0));

}
}