文档章节

制作画板.md

凯哥学堂
 凯哥学堂
发布于 2017/07/07 20:02
字数 739
阅读 14
收藏 0
点赞 0
评论 0
package com.kaige123.paint;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*凯哥
*/
public class PaintJFrame extends JFrame implements ActionListener {

JButton jb1 = new JButton("线");
JButton jb2 = new JButton("矩形");
JButton jb3 = new JButton("圆");
JButton jb4 = new JButton("颜色");
JButton jb5 = new JButton("保存");
// 画笔的颜色是什么?
Color selectColor = Color.black;
// 绘画区域
MyJPanel jp = new MyJPanel(this);

public void actionPerformed(ActionEvent e) {
 
if (jb1 == e.getSource()) {
// 线
jp.setType("线");
} else if (jb2 == e.getSource()) {
// 矩形
jp.setType("矩形");
} else if (jb3 == e.getSource()) {
// 圆
jp.setType("圆");
} else if (jb4 == e.getSource()) {
// 颜色
// 这里弹出一个颜色的选择器 用他来选择颜色
JColorChooser jc = new JColorChooser();
// 打开颜色选择器 并得到颜色选择器选择的颜色
selectColor = jc.showDialog(this, "请选择颜色", selectColor);
// 把选好的颜色设置在按钮背景上
jb4.setBackground(selectColor);
} else if (jb5 == e.getSource()) {
// 保存
JFileChooser jf = new JFileChooser();
jf.showSaveDialog(this);
jp.save(jf.getSelectedFile());
}
}
  
// 构造器
public PaintJFrame() {

this.getContentPane().setBackground(Color.BLACK);
// 设置这个画板的底色 为白色
jp.setBackground(Color.white);
jp.setBounds(65, 10, 515, 550);
// 把绘画板 添加到窗口中
this.add(jp);
// 把按钮关联事件 注册事件
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jb4.addActionListener(this);
jb5.addActionListener(this);
// 设置按钮的位置
jb1.setBounds(1, 10, 60, 30);
jb2.setBounds(1, 40, 60, 30);
jb3.setBounds(1, 70, 60, 30);
jb4.setBounds(1, 100, 60, 30);
jb5.setBounds(1, 130, 60, 30);
// 添加按钮到窗口之中
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jb5);
jb4.setBackground(selectColor);
// 没有布局 我们自己定义组件的摆放方式
this.setLayout(null);
// 设置窗口的标题 
this.setTitle("凯哥制作的画板 欢迎使用  www.kaige123.com ");
// 设置窗口的大小
this.setSize(600, 600);
// 显示窗口
this.setVisible(true); 
}

public static void main(String[] args) {
 
new PaintJFrame();
}

}

package com.kaige123.paint;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Vector; 
import javax.imageio.ImageIO;
import javax.swing.JPanel;
/*
*凯哥
*/
//写一个类 去改造这个画板 
public class MyJPanel extends JPanel implements MouseListener {
 
public class Info {
String type = "";
int x;
int y;
int x1;
int y1;
Color c;
}
  
private PaintJFrame jf = null;
MyJPanel(PaintJFrame jf) {
this.jf = jf;
// 把事件关联到这个面板上 注册事件
this.addMouseListener(this);
}

private String type;
public void setType(String type) {
this.type = type;
}
  
int x, y;
// 鼠标的按下
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
}
  
Vector<Info> infos = new Vector<Info>();
  
public void paint(Graphics g) {
// 重绘
super.paint(g);
for (Info i : infos) {
g.setColor(i.c);
if (i.type.equalsIgnoreCase("线")) {
g.drawLine(i.x, i.y, i.x1, i.y1);
} else if (i.type.equalsIgnoreCase("矩形")) {
g.drawRect(i.x, i.y, i.x1, i.y1);
} else if (i.type.equalsIgnoreCase("圆")) {
g.drawOval(i.x, i.y, i.x1, i.y1);
}
}
}

public void save(File f) {
// 在内存中创建了一个照片
BufferedImage image = new BufferedImage(this.getWidth(),
this.getHeight(), BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();
// 给照片设置背景颜色
g.setColor(Color.white);
g.fillRect(0, 0, this.getWidth() + 1, this.getHeight() + 1);
for (Info i : infos) {
g.setColor(i.c);
if (i.type.equalsIgnoreCase("线")) {
  
g.drawLine(i.x, i.y, i.x1, i.y1);
  
} else if (i.type.equalsIgnoreCase("矩形")) {
  
g.drawRect(i.x, i.y, i.x1, i.y1);
  
} else if (i.type.equalsIgnoreCase("圆")) {
g.drawOval(i.x, i.y, i.x1, i.y1);
}
}
  
//捕获异常
try {
ImageIO.write(image, "jpeg", f);
} catch (Exception e) {
}
}

// 鼠标的松开
public void mouseReleased(MouseEvent e) {
int x1 = e.getX();
int y1 = e.getY();
Graphics2D g = (Graphics2D) this.getGraphics();
g.setColor(jf.selectColor);
Info info = new Info();
info.c = jf.selectColor;
info.type = type;
  
if (type.equalsIgnoreCase("线")) {
g.drawLine(x, y, x1, y1);
info.x = x;
info.y = y;
info.x1 = x1;
info.y1 = y1;
  
} else if (type.equalsIgnoreCase("矩形")) {
g.drawRect(x, y, x1 - x, y1 - y);
info.x = x;
info.y = y;
info.x1 = x1 - x;
info.y1 = y1 - y;
  
} else if (type.equalsIgnoreCase("圆")) {
g.drawOval(x, y, x1 - x, y1 - y);
info.x = x;
info.y = y;
info.x1 = x1 - x;
info.y1 = y1 - y;
}
  
infos.add(info);
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e)  {}
}

© 著作权归作者所有

共有 人打赏支持
凯哥学堂
粉丝 13
博文 299
码字总数 266441
作品 0
东城
程序员
怎样在几何画板中查看课件制作过程

几何画板主要以点、线、圆为基本元素,通过对这些基本元素的变换、构造、测算、计算、动画、跟踪轨迹等,构造出其它较为复杂的图形。是数学、物理教学中强有力的工具。对于一个几何画板初学者...

学术研究软件
2016/04/11
55
0
课件动画做的牛不牛,看你有它没它!

几何画板绘制出的图形通常被称为“动态几何”,该软件能把较为抽象的几何图形形象化,并保持其“动态”的特点。这样更有利于在教学过程中深入几何精髓,突破传统教学的难点 。俗话说的好,实...

学术研究软件
2016/04/12
19
0
Get it,你离几何达人不远了!

对于爱学几何的人,是否存在这样的困扰:没有标准的尺规工具,图形画的不标准,理解上总是出错......整天在纸上画图,浪费大把大把的时间......几何图形画的不美观,在别人面前都拿不出手,公...

学术研究软件
2016/04/22
31
0
此软件在手,让你的课件牛上加牛!

在现代的教育教学中,组织课堂教学的时候,课件早已成为教师们一种重要的教学手段,一部好的课件能够带来良好的教学效果,节约大量教学时间,也能激发学生的学习兴趣,培养学生的探索和创新精...

学术研究软件
2016/04/18
13
0
几何画板怎样制作黑白液晶数字

很多几何画板用户都知道几何画板常常被用来制作各种几何或数学图形,当然它的功能不仅有这些他还有一些其它的功能,比如说制作黑色液晶数字,下面就来给大家分享一下几何画板液晶数字的制作方...

学术研究软件
2016/07/20
10
0
几何画板开学季特惠活动进行中

2018年上半年的开学时间已经到了,广大学子们又要返回校园里面了。为了迎接开学季,老师必备的课件制作工具几何画板也推出了降价活动,所以说不要错过,下面就来看看具体活动。 活动详情:开...

软件贴士
03/05
0
0
老师爱不释手的动态课件工具

有着丰富经验的老师都知道,数学里的很多知识比较抽象,学生往往在刚刚接触时不好理解,理解不了该知识点的含义,这样学生们就产生了厌学情绪,不喜欢学数学?数学知识理解不透彻,做题就没法...

学术研究软件
2016/07/11
38
0
几何画板怎么制作图形平移和旋转

在数学教学中,老师们在黑板上作图,都是不能够动的。这样往往不利于老师把自己的课程讲清楚明白。如果图形能够随着课程的进度进行的移动和旋转,这样不仅能够让课程变得生动有趣,还能够帮助...

学术研究软件
2016/06/14
57
0
万万没想到,课件还可以这样制作!

不知道作为数学老师的你,是否有这样的烦恼:要上课之前要提前备课,不知道如何才能完美展示你的备课笔记?公开课来了,应该怎么制作课件,为你加分呢?学生成绩上不去,是否跟你的教学模式有...

学术研究软件
2016/04/25
13
0
几何画板常见问题解决方案

在数学教学中,总是离不开图形的直观解释,而随着信息技术的发展,多媒体的应用越来越多地应用于中学数学教学中,出现了许多能代替黑板帮助老师教学的工具,而几何画板就是其中比较出众的一款...

学术研究软件
2016/11/02
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android 获取各大音乐平台的真实下载地址

废话 电脑使用谷歌浏览器或者QQ浏览器的时候。。。。。。。说不清楚,还是看图吧 大概意思就是,只要网页上需要播放,只要能播放并且开始播放,这个过程就肯定会请求到相关的音乐资源,然后就...

她叫我小渝
34分钟前
0
0
shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部