初学java-----画板

画板

画板是学习java接触的第一个可以称作项目的东西,从开始的做界面到画直线画曲线,以及后面的重绘,一步步走过来,才发现其实走过的路其实蛮长滴 :D
1:界面:用JFrame创建一个对象并添加组件ok啦
public class DrawFrame extends javax.swing.JFrame{

/**
* 程序入口
* @param args
*/
public static void main(String[] args) {
//创建一个DrawFrame的对象
DrawFrame df = new DrawFrame();
df.showUI();
}

/**
* 显示画板窗体的类
*/
public void showUI(){
//设置窗体的属性
this.setSize(600, 500);
this.setTitle("简单画板");

this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setLayout(new java.awt.FlowLayout());
//添加按钮选项
javax.swing.JButton line = new javax.swing.JButton("直线");
javax.swing.JButton Qline = new javax.swing.JButton("曲线");
javax.swing.JButton rect = new javax.swing.JButton("矩形");
javax.swing.JButton oval = new javax.swing.JButton("圆形");
javax.swing.JButton btnColor = new javax.swing.JButton("颜色");
javax.swing.JButton eraser = new javax.swing.JButton("橡皮");
this.add(btnColor);
this.add(Qline);
this.add(line);
this.add(eraser);
this.add(rect);
this.add(oval);
this.setVisible(true);
//得到事件源上的画布对象
java.awt.Graphics g = this.getGraphics();
//创建一个DrawMotionListener类
dml = new DrawListener(g,this);
//给事件源添加鼠标拖动的监听器
this.addMouseMotionListener(dml);
this.addMouseListener(dml);
line.addActionListener(dml);
rect.addActionListener(dml);
oval.addActionListener(dml);
btnColor.addActionListener(dml);
Qline.addActionListener(dml);
eraser.addActionListener(dml);
}
}
2:画曲线:在窗体上得到画布之后画图形,选择适当的画布方法就可以了,但画曲线这个方法并没有。因此,我们把曲线看成无数连在一起的直线,当鼠标拖动时,交换起始坐标画直线就能画曲线了
if ("曲线".equals(command)) {
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
x1 = x2;
y1 = y2;
}
3:重绘:窗体最小化最大化或者切换之后,再显示的窗体实际上是重绘的窗体,但之前画的图形由于没有保存而无法重绘。要完成重绘就要保存已绘制的图形并在重绘窗体的时候重绘图形,因此,我们分三步完成:
(1).创建一个类,用来获取图形信息

public class Graph {
private java.awt.Color color;
private String item;
private int x1, y1, x2, y2;

//构造函数用来初始化属性
public Graph(String item,java.awt.Color color,int x1,int y1,int x2,int y2){
this.item = item;
this.color = color;
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}

public java.awt.Color getColor() {
return color;
}

public void setColor(java.awt.Color color) {
this.color = color;
}

public String getItem() {
return item;
}

public void setItem(String item) {
this.item = item;
}

public int getX1() {
return x1;
}

public void setX1(int x1) {
this.x1 = x1;
}

public int getY1() {
return y1;
}

public void setY1(int y1) {
this.y1 = y1;
}

public int getX2() {
return x2;
}

public void setX2(int x2) {
this.x2 = x2;
}

public int getY2() {
return y2;
}

public void setY2(int y2) {
this.y2 = y2;
}



(2).创建一个自定义队列来保存图形信息
(3).重绘窗体的时候重绘图形
/**
* 重写窗体类的重绘方法
*/
public void paint(java.awt.Graphics g){
//首先调用父类的重绘方法
super.paint(g);
//判断dml对象是否为null
if(null != dml){
//获取所画图形的数据
for(int i=0;i<dml.getGraphList().size();i++){
Graph graph = dml.getGraphList().get(i);
//判断图形
if(graph.getItem().equals("曲线")){
//设置颜色
g.setColor(graph.getColor());
//画曲线
g.drawLine(graph.getX1(), graph.getY1(), graph.getX2(), graph.getY2());
}
if(graph.getItem().equals("直线")){
//设置颜色
g.setColor(graph.getColor());
//画直线
g.drawLine(graph.getX1(), graph.getY1(), graph.getX2(), graph.getY2());
}

if(graph.getItem().equals("矩形")){
//设置颜色
g.setColor(graph.getColor());
//画矩形
g.drawRect(Math.min(graph.getX1(),graph.getX2()),Math.min(graph.getY1(), graph.getY2()),Math.abs(graph.getX2()-graph.getX1()) , Math.abs(graph.getY2()-graph.getY1()));
}
if(graph.getItem().equals("圆形")){
//设置颜色
g.setColor(graph.getColor());
//画圆
g.drawOval(Math.min(graph.getX1(),graph.getX2()),Math.min(graph.getY1(), graph.getY2()),Math.abs(graph.getX2()-graph.getX1()) , Math.abs(graph.getY2()-graph.getY1()));
}
if(graph.getItem().equals("橡皮")){
//设置颜色
g.setColor(graph.getColor());
//画橡皮
g.fillOval(graph.getX1(), graph.getY1(), graph.getX2(), graph.getY2());
}
}
}
}

就这样,最简单的画板就完成了!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值