(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,不要着急。接着看我后面的详解
分享到:
相关推荐
标题中的“我的画图板1.0<细说1.准备工作,自定义队列>”表明这是一个关于软件开发的项目,特别提到了“准备工作”和“自定义队列”。这通常意味着开发者在创建一个名为“我的画图板1.0”的应用程序时,正在为其基础...
类型基本操作<br>2. 面向对象的操作 适配器模式 单列模式 工程模式 组合模式。。。<br>3. 精确计算数字和随机数字<br>4. java.util.package高级使用 List Set collection..<br>5. String高级操作 包括密码的使用 ...
"我的画图板1.0" 是一个简单的图形绘制应用程序,允许用户在屏幕上进行自由绘画并重新编辑他们的作品。这个程序作为一个工具,旨在提供基本的绘图功能,适合初学者或者那些想要快速进行简单图形创作的用户。源码的...
<title>Canvas 画图板</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <canvas id="drawCanvas"></canvas> <script src="js/draw.js"></script> </body> </html> ``` 这里的 `canvas` ...
<br><br> <br><br>System monitoring 系统监控 <br><br> <br><br>Memory monitoring 内存监控 <br><br> <br><br>Cluster information 集群信息 <br><br> <br><br>Log file tailing 实时追踪log文件 <br><br> <br><br...
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>操纵位图的开发包...
画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...
核心的STM32微控制器通过与电源模块、微处理器模块、按键以及液晶显示屏接口的连接,形成了画图板的主体。其中,WK_UP按键负责系统的复位操作,而KEY0和KEY1则用于接收用户的输入指令。TFT-LCD液晶屏则作为用户与...
窗口外形任我设(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控件的主要特点如下: 图画对象:线,点,圆,椭圆,文本,折线,弧...
<title>画图板</title> <link rel="stylesheet" href="styles.css"> </head> <body> <canvas id="paint-canvas"></canvas> <!-- 其他交互元素 --> <script src="https://code.jquery.com/jquery-3.6.0.min.js">...
通过这个简单的Java画图板项目,初学者可以了解到GUI编程的基本原理,事件监听器的使用,以及如何利用Java的绘图功能来创建动态的用户交互界面。同时,这也是一个良好的起点,可以进一步扩展功能,如添加更多的绘图...
《Windows画图板:探索动态画图的魅力》 Windows画图板,作为一款简单易用的图形编辑软件,是微软操作系统内置的一个基础工具,尤其适合初学者和儿童进行简单的绘图活动。它提供了丰富的基本画图功能,让用户能够...
Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...
彩虹画图板软件vb代码例题
【画画板工具画图工具v1.0绿色免费版】是一款专为用户设计的图形图像处理软件,类似于操作系统自带的画图程序,但它在功能上有所增强,为用户提供更为丰富的绘画体验。这款软件的主要特点包括功能强大且操作简便,...
2. **精英板**:正点原子的精英板是一种用于STM32开发的电路板,具有丰富的扩展接口和预装的调试器,方便开发者进行硬件原型设计和软件开发。在这个项目中,精英板提供了必要的硬件平台,连接了STM32F103ZET6与2.4寸...
MATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源...