(Second):画图板的创建与监听器的实现
1.画图板的建立方法,都是基本的
(这里我是直接拷贝我的源代码的一部分,有些语句有点点问题,比如说:JButton应该写成javax.swing.JButton。但在源代码中有了引用,所以我就直接省略了,你可以在我的文章《一个可以重绘的画图板》程序中看到源代码)
/**
*生成 画板的方法
*/
public void CreatBox(){
//设置名称
this.setTitle("画图板");
//设置大小
this.setSize(700,500);
//布局
FlowLayout fl=new FlowLayout();
this.setLayout(fl);
//添加组件
JButton jb1=new JButton("直线");
jb1.setActionCommand("line");
this.add(jb1);
JButton jb2=new JButton("矩形");
jb2.setActionCommand("rect" );
this.add(jb2);
JButton jb3=new JButton("椭圆");
jb3.setActionCommand("oval" );
this.add(jb3);
JButton jb4=new JButton("三角形");
jb4.setActionCommand("triangle" );
this.add(jb4);
JButton jb5=new JButton("多边形");
jb5.setActionCommand("polygon" );
this.add(jb5);
//设置可见性
this.setVisible(true);
//设置默认关闭按钮
this.setDefaultCloseOperation(3);
//得到这个画布
gp=this.getGraphics();
/**
* 创建监听器
* 1:鼠标监听器;
* 2:动作监听器;
*/
DrawListener dw=new DrawListener(gp);
//给画布添加鼠标监听器
this.addMouseListener(dw);
//给按钮添加动作监听器
jb1.addActionListener(dw);
jb2.addActionListener(dw);
jb3.addActionListener(dw);
jb4.addActionListener(dw);
jb5.addActionListener(dw);
}
2.创立一个监听器,既是鼠标监听器又是事件监听器
如下:
public class DrawListener implements java.awt.event.ActionListener,java.awt.event.MouseListener{}
程序如下:
//重写构造器
public DrawListener(Graphics gp){
this.gp=gp;
}
/*********************************鼠标监听器********************************/
public void mouseClicked(MouseEvent e) {
if(i==3&&"polygon".equals(str)){
counter=0;
x2=e.getX();
y2=e.getY();
gp.drawLine(x1, y1, x2, y2);
gp.drawLine(tempX, tempY, x2, y2);
}
}
public void mousePressed(MouseEvent e) {
//按下鼠标得到鼠标坐标点
if(!"triangle".equals(str)&&!"polygon".equals(str)){
x1=e.getX();
y1=e.getY();
}
}
public void mouseReleased(MouseEvent e) {
//松开鼠标得到鼠标坐标点
if(!"triangle".equals(str)&&!"polygon".equals(str)){
x2=e.getX();
y2=e.getY();
}
//画直线
if("line".equals(str)){
gp.drawLine(x1, y1, x2, y2);
}
//画矩形
if("rect".equals(str)){
if(x1<x2&&y1<y2){
gp.drawRect(x1, y1, x2-x1, y2-y1);
}
if(x1>x2&&y1<y2){
gp.drawRect(x2, y1, x1-x2, y2-y1);
}
if(x1>x2&&y1>y2){
gp.drawRect(x2, y2, x1-x2, y1-y2);
}
if(x1<x2&&y1>y2){
gp.drawRect(x1, y2, x2-x1, y1-y2);
}
}
//画椭圆
if("oval".equals(str)){
if(x1<x2&&y1<y2){
gp.drawOval(x1, y1, x2-x1, y2-y1);
}
if(x1>x2&&y1<y2){
gp.drawOval(x2, y1, x1-x2, y2-y1);
}
if(x1>x2&&y1>y2){
gp.drawOval(x2, y2, x1-x2, y1-y2);
}
if(x1<x2&&y1>y2){
gp.drawOval(x1, y2, x2-x1, y1-y2);
}
}
//画三角形
if("triangle".equals(str)){
if(counter==0){
x1=e.getX();
y1=e.getY();
tempX=x1;
tempY=y1;
counter++;
}
else if(counter==1){
x2=e.getX();
y2=e.getY();
gp.drawLine(x1, y1, x2,y2);
counter++;
}
else if(counter==2){
x1=e.getX();
y1=e.getY();
gp.drawLine(x1, y1, x2, y2);
gp.drawLine(x1, y1, tempX,tempY);
counter=0;
}
}
//多边形
if("polygon".equals(str)){
if(counter==0){
x1=e.getX();
y1=e.getY();
counter++;
}
else if(counter==1){
x2=e.getX();
y2=e.getY();
gp.drawLine(x1, y1, x2, y2);
tempX=x2;
tempY=y2;
counter++;
}
else if(counter!=0&&counter!=1){
x2=e.getX();
y2=e.getY();
gp.drawLine(x2, y2, tempX, tempY);
tempX=x2;
tempY=y2;
}
}
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
/*********************************动作监听器********************************/
public void actionPerformed(ActionEvent e) {
str=e.getActionCommand();
}
}
说明:
1.计数器counter
在出现多条直线的时候用到它,这个还是很方便的,不会的同学们多多看看这个counter在三角形Triangle及多边形Polygon中的使用
2.生成图形
直线,矩形,椭圆与三角形都是没有什么问题,都是用鼠标左键松开的时候就画了。主要是多边形,我用的方法是点击了鼠标右键之后,会自动将所画的直线自动连接上。
3.不能保存图形
用这两个类所建立的画图有个问题,就是当你的窗体发生改变时,比如说,最小化到任务栏,或者被你拖动后桌面的边缘看不到了等等,你所画的图形都是消失,ok,不要着急。接着看我后面的详解
分享到:
相关推荐
自定义队列的检测 博文链接:https://zhangchong2011.iteye.com/blog/907676
可以重绘的画图板 博文链接:https://zhangchong2011.iteye.com/blog/907598
画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...
aaplay10.zip<br>Autodesk Animator's FLI player(53KB)<END><br>46,a2r103.zip<br>转换ANSI 屏幕到RIP格式(17KB)<END><br>47,show204.zip<br>GIF/PCX/JPEG 观察器(252KB)<END><br>48,bmp.zip<br>操纵位图的开发包...
画图板彩色个人简历表格.doc
窗口外形任我设(1.0).zip 窗口热键(1.0).zip 窗口贴边隐藏(1.0).zip 窗口透明模块(1.0).zip 超文本浏览框功能扩展模块(1.2).zip 超级信息框(1.0).zip 超级列表框补助模块(1.0).zip 超级列表框列宽尺寸自动调整(1.0)....
窗口外形任我设(1.0).zip 窗口热键(1.0).zip 窗口贴边隐藏(1.0).zip 窗口透明模块(1.0).zip 超文本浏览框功能扩展模块(1.2).zip 超级信息框(1.0).zip 超级列表框补助模块(1.0).zip 超级列表框列宽尺寸自动...
<br><br> gsDXFWriter.dll控件的示意图如下: <br><br> <img src=DownloadFilesimage_activeximagesgsdxfwriter_dll.gif><br><br> gsDXFWriter.dll控件的主要特点如下: 图画对象:线,点,圆,椭圆,文本,折线,弧...
java画图板java画图板java画图板
精彩编程与编程技巧-用VB6.0制作画图板 ...
MATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源...
画图板源码示例画图板源码示例画图板源码示例
用java实现的windows画图板的简单模式,对于java初学者的事件触发器学习有很好的帮助。。。
c#画图板 .rar c#画图板 .rar c#画图板 .rar
html5 Canvas 画图板,学习使用html5 Canvas ,让你画画更轻松
canvas 画图板的实现
<br>2. 打开需要处理大小的图片。<br>3. 打开此工具(鼠标变为笔状)<br>4. 对角线选定需要的图片范围后松开鼠标即可,该图片已被复制到剪贴板。(注意如果范围选错了,松开鼠标后不管提示,重新打开并选择正确范围...
win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10画图板下载,解压点击即可用 win10...
类似画图板的小程序.zip