//图形接口

packageCbs;//图形集合

public interfaceNetJavaShape {public abstract voiddraw();

}//直线类

packageCbs;importjava.awt.Color;importjava.awt.Graphics;importCbs.NetJavaShape;public class ImpLine implementsNetJavaShape{

Graphics g;intx1, y1,x2, y2;

Color c;public ImpLine(Graphics g,int x1,int y1,int x2,inty2,Color c){this.g=g;this.c=c;this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;

}public voiddraw() {

g.setColor(c);

g.drawLine(x1, y1, x2, y2);

}

}//DrawListener类

packageCbs;importjava.awt.Color;importjava.awt.Graphics;importjava.util.List;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.event.MouseMotionListener;importjava.util.ArrayList;importCbs.NetJavaShape;importjavax.swing.JButton;public class DrawListener implementsActionListener, MouseListener,

MouseMotionListener {private Color color=Color.BLACK;//颜色属性,初始值为黑色

private Graphics g;//画笔属性

private String str;//保存按钮上的字符串,区分不同的按钮

private int x1,y1,x2,y2;//(x1,y1),(x2,y2)分别为鼠标的按下和释放时的坐标

private JButton nowColor;//当前颜色按钮//保存图形对象的集合

private List shapesArray = new ArrayList();//图形

privateNetJavaShape shape;//在draw类中获取集合

public ListgetShapesArray() {returnshapesArray;

}//获取Draw类的画笔对象

public voidsetG(Graphics g) {this.g =g;

}//获取当前颜色按钮

public voidsetNowColor(JButton nowColor) {this.nowColor =nowColor;

}

@Override//鼠标拖动的方法

public voidmouseDragged(MouseEvent e) {//画曲线的方法

if ("画曲线".equals(str)) {intx, y;

x=e.getX();

y=e.getY();//实例化对象,曲线也是直线画的所以不同新建一个曲线类了

shape=newImpLine(g,x,y,x1,y1,color);//调用画图方法

shape.draw();//将图形存入集合中

shapesArray.add(shape);//g.drawLine(x, y, x1, y1);

x1 =x;

y1=y;

}

}

@Override//鼠标移动方法

public voidmouseMoved(MouseEvent e) {

}

@Override//鼠标单击方法

public voidmouseClicked(MouseEvent e) {

}

@Override//鼠标按下方法

public voidmousePressed(MouseEvent e) {

g.setColor(color);//改变画笔的颜色

x1=e.getX();//获取按下时鼠标的x坐标

y1=e.getY();//获取按下时鼠标的y坐标

}

@Override//鼠标释放方法

public voidmouseReleased(MouseEvent e) {

x2=e.getX();//获取释放时鼠标的x坐标

y2=e.getY();//获取释放时鼠标的y坐标//画直线的方法

if ("画直线".equals(str)) {//实例化对象,

shape=newImpLine(g,x1,y1,x2,y2,color);//调用画图方法

shape.draw();//将图形存入集合中

shapesArray.add(shape);//g.drawLine(x1, y1, x2, y2);

}

}

@Override//鼠标进入方法

public voidmouseEntered(MouseEvent e) {

}

@Override//鼠标退出方法

public voidmouseExited(MouseEvent e) {

}

@Override//处理按钮上的鼠标点击动作

public voidactionPerformed(ActionEvent e) {if ("".equals(e.getActionCommand())) {

JButton jb=(JButton) e.getSource();

color=jb.getBackground();

nowColor.setBackground(color);//处理当前颜色

} else{

str=e.getActionCommand();

}

}

}//draw类

packageCbs;importjava.awt.Color;importjava.awt.Dimension;importjava.awt.FlowLayout;importjava.awt.Graphics;importjava.awt.GridLayout;importjava.util.ArrayList;importjava.util.List;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;/*** Draw类,用于界面的初始化

*@authorCBS*/@SuppressWarnings("serial")public class Draw extendsJFrame {privateDrawListener dl;privateGraphics g;//保存图形对象的集合

private List shapesArray = new ArrayList();//界面初始化方法

public voidshowUI() {

setTitle("画图");//窗体名称

setSize(1200, 900);//窗体大小

setDefaultCloseOperation(3);

setLocationRelativeTo(null);//窗体居中

FlowLayout layout = new FlowLayout(FlowLayout.LEFT);//流式布局左对齐

setLayout(layout);//窗体使用流式布局管理器

this.setResizable(false);//窗体大小不变//使用数组保存按钮名

String buttonName[] = { "画直线", "画椭圆", "画曲线", "多边形", "橡皮擦", "拖动线","三角形", "画球形", "笔刷", "喷枪", "色子", "立体矩形", "立体圆", "立体三角","迭代分形", "现代分形", "枫叶", "画树", "mandelbrot集", "L-System", "迭代画线","迭代三角形", "谢尔宾斯基地毯", "画字符", "清空","吸管" ,"矩形","五角星","多线","字符"};

JPanel jp1=new JPanel(new GridLayout(15, 2,10,10));//用于保存图形按钮,使用网格布局

jp1.setPreferredSize(new Dimension(200, 800));//实例化DrawListener对象

dl=newDrawListener();//循环为按钮面板添加按钮

for (int i = 0; i < buttonName.length; i++) {

JButton jbutton= newJButton(buttonName[i]);

jbutton.addActionListener(dl);//为按钮添加监听

jp1.add(jbutton);

}

JPanel jp2=new JPanel();//画布面板

jp2.setPreferredSize(new Dimension(970, 800));

jp2.setBackground(Color.WHITE);//定义Color数组,用来存储按钮上要显示的颜色信息

Color[] colorArray ={ Color.BLUE, Color.GREEN, Color.RED, Color.BLACK,Color.ORANGE,Color.PINK,Color.CYAN,Color.MAGENTA,Color.DARK_GRAY,Color.GRAY,Color.LIGHT_GRAY,Color.YELLOW};//用于保存颜色按钮的面板

JPanel jp3=new JPanel(new GridLayout(1,colorArray.length,3,3));//循环遍历colorArray数组,根据数组中的元素来实例化按钮对象

for (int i = 0; i < colorArray.length; i++) {

JButton button= newJButton();

button.setBackground(colorArray[i]);

button.setPreferredSize(new Dimension(30, 30));

button.addActionListener(dl);//为按钮添加监听

jp3.add(button);

}//将面板添加到主窗体

this.add(jp1);this.add(jp2);this.add(jp3);//添加按钮,作为当前颜色

JButton nowColor=newJButton();

nowColor.setPreferredSize(new Dimension(40,40));

nowColor.setBackground(Color.BLACK);//默认黑色

add(nowColor);//设置窗体的组件可见,如果为FALSE就看不到任何组件

setVisible(true);//获取画笔对象

g=jp2.getGraphics();

dl.setG(g);

dl.setNowColor(nowColor);//获取保存的集合

shapesArray=dl.getShapesArray();//为面板添加鼠标监听,用于绘制图形

jp2.addMouseListener(dl);

jp2.addMouseMotionListener(dl);

}

@Override//重写paint方法

public voidpaint(Graphics g) {//调用父类的paint方法,绘制界面上的组件

super.paint(g);//foreach遍历集合

for(NetJavaShape l : shapesArray) {

l.draw();

}

}

}

用java编写一个简易功能画板_Java版简易画图板的实现相关推荐

  1. 用java编写一个简单计算器

    java 采用java编写一个简单计算器,使用awt和swing 代码如下: import java.awt.Color; import java.awt.Font; import java.awt. ...

  2. java编写一个个人通信录程序

    Java编写一个个人通信录程序,具有如下功能: (1)定义一个类,包括姓名.邮政编码.通信地址等成员变量 (2)查找:根据姓名在文件中查找个人信息,如果找到则显示出来 (3)添加:向文件中写个人信息 ...

  3. python做一个闹钟软件下载_Python编写一个闹钟功能

    Python编写一个闹钟功能 音频文件放入和.py文件同级的目录下 import winsound # 导入此模块实现声音播放功能 import time # 导入此模块,获取当前时间 # 提示用户设 ...

  4. java编写存钱_用Java编写一个简单的存款

    package desposit.money; public class DespositMoney { public static void main(String[] args) { Custom ...

  5. 停车场管理系统 java_使用java编写一个停车场管理系统

    使用java编写一个停车场管理系统 发布时间:2020-11-30 16:00:28 来源:亿速云 阅读:145 作者:Leah 这篇文章给大家介绍使用java编写一个停车场管理系统,内容非常详细,感 ...

  6. java编写一个彩票开奖的模拟程序.游戏共有两种玩法,一种是21选5,即玩家输入5个1到21内的不重复的数。另外一种玩法是6+1玩法,即要求玩家输入7个整数,代表所购买的彩票号码,最后一个是特码。

    java编写一个彩票开奖的模拟程序.游戏共有两种玩法,一种是21选5,即玩家输入5个1到21内的不重复的数.另外一种玩法是6+1玩法,即要求玩家输入7个整数,代表所购买的彩票号码,最后一个是特码. 具 ...

  7. 用Java编写一个最简单的桌面程序

    使用Java的优势在于网络应用方面,但Java也提供了强大的用于开发桌面程序的API,它们包含在javax.swing包中.使用这个包可以编写简单的Java桌面应用程序. Java的javax.swi ...

  8. 如何用java编写一个简单的多人PK游戏

    如何用java编写一个简单的多人PK游戏 类与对象---PK游戏的编写 素材取用----王者荣耀和BILIBILI 创建两个对战的角色(PK游戏最少需要两名角色) 创建孙尚香和Van 设置孙尚香和Va ...

  9. JAVA编写一个年龄大小判断年纪题

    JAVA编写一个年龄大小判断年纪题 public class C{public static void main(String [] args){java.util.Scanner s = new j ...

最新文章

  1. 一个很简短的 JS 生成器入门和用法参考
  2. ngrok服务器搭建
  3. Node中使用mysql模块遇到的问题
  4. GCC 放弃将代码贡献版权强制转让给 FSF!
  5. pandas数据处理实践一(简单走一遍)
  6. linux postgresql 恢复数据库,PostgreSQL数据库备份和恢复
  7. 多线程--thread
  8. Linux内核部件分析 设备驱动模型之device
  9. 美团架构师带你深入理解Nginx模块开发与架构解析
  10. 【hightopo】【基础图标】 HT for Web简单图标的制作:进度图标
  11. 公司部门英文缩写简称大全(1)
  12. 医疗病案首页网上直报编码汇总
  13. J-Link软件和文档包的版本发行说明(4)[V6.50 ~ V6.90a版本]
  14. TeamViewer 被发现用于(检测为)商业用途解决方案(亲测有效 )
  15. 工作缺点和不足及措施_个人工作缺点和不足
  16. e语言截图软件怎么保存在c盘,电脑截图文件保存在哪_电脑截图保存在哪里
  17. python写一个简单的12306抢票
  18. linux存储实用程序育儿法下载,Linux版utorrent的使用.doc
  19. 什么从什么写短句_什么从什么造句一年级如何造
  20. 参考C++高级进阶教程

热门文章

  1. EXT.apply方法详解
  2. 一个答案不唯一的数独问题
  3. 大开眼界!数字人民币原来还有这些新玩法
  4. 仿LR色相饱和度白平衡色彩校正HSL视频调色插件 Lightroom Controls 2.2
  5. 安装Oracle12C提示Hard limit:maxinum open file descriptors的解决方法
  6. JAVA高考加油,给高考生加油的话 超励志的唯美句子
  7. 基于python的在线房源识别论坛资讯系统(mysql)-Django.VUEE【数据库设计、论文、源码、开题报告】
  8. 对于邵启瑞对于开源软件方面的贡献的公开感谢信
  9. 希捷硬盘开机不识别,进入系统后自动扫描硬件以识别显示
  10. 【windows桌面图标变大如何调整】