java绘图基础-用java代码画一个房子
目录
java绘图基础 : 用java代码画一个房子
网页左边,向下滑有目录索引,可以根据标题跳转到你想看的内容 |
---|
一、概述
java绘图的主要核心类 |
---|
1、Graphics类,此类可以画图形,线条等,但是设置到变形等就不行了,由此衍生出更强大的类,Graphics2D |
2、Graphics2D,更加强大的绘图类 |
1、绘制基本图形
绘图方法 |
---|
package com.test;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
public class Test extends JFrame{
public Test() {
setBounds(500,300, 800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
MyCanvas myCanvas = new MyCanvas();
add(myCanvas);
}
public static void main(String[] args) {
new Test();
}
private class MyCanvas extends Canvas{ //Canvas类,是画布,我们没有纸,只有笔,也没办法画
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
Graphics2D g2d = (Graphics2D)g;
g2d.drawOval(5, 5, 100, 100);//画圆
g2d.drawRect(15,15,80,80);//画矩形
g2d.fillRect(45, 45,80,80);//填充矩形
g2d.drawArc(320,25,100,50,270,200);//弧线
g2d.drawLine(5,120,100,120);//直线
g2d.drawRoundRect(102, 120, 100, 50, 10, 10);//圆角矩形
//画多边形,第一个参数是横坐标数组,第二个是纵坐标数组,第三个是有几个点
int x[]= {250,300,250,300};
int y[]= {130,130,200,200};
// g2d.drawPolygon(x, y, 4);
//画多边线(测试多边线需要注释上面的代码,因为用的参数一样重合了)
g2d.drawPolyline(x, y, 4);
//上面都是Graphics的方法,下面介绍2d是如何运作的
Shape shape = new Rectangle2D.Double(110,5,100,100);
g2d.draw(shape);
g2d.fill(shape);
}
}
}
2、设置画笔颜色
package com.test;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
public class Test extends JFrame{
public Test() {
setBounds(500,300, 800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
MyCanvas myCanvas = new MyCanvas();
add(myCanvas);
}
public static void main(String[] args) {
new Test();
}
private class MyCanvas extends Canvas{
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
Graphics2D g2d = (Graphics2D)g;
g2d.fillRect(5,120,100,120);//直线
Color blue =Color.BLUE;
g2d.setColor(blue);
g2d.fillRect(125,125,103,125);
}
}
}
3、设置画笔(粗细)
package com.test;
import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
public class Test extends JFrame{
public Test() {
setBounds(500,300, 800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
MyCanvas myCanvas = new MyCanvas();
add(myCanvas);
}
public static void main(String[] args) {
new Test();
}
private class MyCanvas extends Canvas{
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
Graphics2D g2d = (Graphics2D)g;
g2d.drawLine(5, 120, 100, 120);
Stroke stroke = new BasicStroke(10);//1、创建画笔对象
g2d.setStroke(stroke);//2、设置画笔
g2d.drawLine(5, 150, 100, 150);//画
}
}
}
4、画一个房子
package com.test;
import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D;
import java.util.Random;
import javax.swing.JFrame;
public class Test extends JFrame{
public Test() {
setBounds(500,300, 800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setBackground(new Color(78, 194, 207));
setVisible(true);
MyCanvas myCanvas = new MyCanvas();
add(myCanvas);
}
public static void main(String[] args) {
new Test();
}
private class MyCanvas extends Canvas{
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
Graphics2D g2d = (Graphics2D)g;
//云
g2d.setColor(Color.WHITE);
g2d.fillOval(550, 2, 100, 50);
g2d.fillOval(520, -3, 80, 50);
g2d.fillOval(580, -5, 80, 50);
//烟囱
g2d.setColor(Color.BLACK);
g2d.fillRect(250, 20, 30, 80);
g2d.fillRect(650, 20, 30, 80);
//房顶
int x[] = {100,200,300};
int y[] = {100,10,100};
g2d.setColor(new Color(124,86,39));
g2d.fillPolygon(x, y, 3);
int x1[] = {500,600,700};
int y1[] = {100,10,100};
g2d.fillPolygon(x1, y1, 3);
//屋子
g2d.setColor(new Color(109,134,128));
g2d.fillRect(120,100,160,100);
g2d.fillRect(520,100,160,100);
//窗户和门
g2d.setColor(Color.WHITE);
g2d.fillRect(130,120,50,50);
g2d.fillRect(220,120,50,80);
g2d.fillRect(530,120,50,50);
g2d.fillRect(620,120,50,80);
//太阳
g2d.setColor(Color.YELLOW);
g2d.fillOval(740, -20, 50, 50);
//路
g2d.setColor(new Color(124,86,39));
g2d.fillRect(0, 200, 800, 300);
//石子
g2d.setColor(Color.BLACK);
g2d.fillOval(0, 205, 10, 20);
Random r = new Random();
int moveX = 0;
int moveY = 0;
for(int i = 0;i<=100;i++) {
moveX = r.nextInt(800);
moveY = r.nextInt(300)+200;
g2d.fillOval(moveX, moveY, r.nextInt(10)+5,r.nextInt(15)+5);
}
}
}
}