实现鼠标画图的Java程序代码
- 格式:docx
- 大小:21.92 KB
- 文档页数:2
Canvas实现画图、虚线、辅助线、线条颜色、线条宽度,整合加强版使用Canv as实现画图程序。
本次更新主要实现了一下功能:虚线实线的选择、辅助线、线条颜色选择、线条宽度选择进一步整理了下代码,发现了不少很有用的写法,具体看下面。
效果截图:源代码:①HTML代码[html]view plainc opy1.<!docuty pe html>2.<!--date 2014-12-28-->3.<html>4.<head>5.<meta http-equiv="conten t-type" conten t="text/html; charse t=utf-8" />6.<styletype="text/css">7. canvas{8. backgr ound-color: rgb(247, 247, 247);9. margin-top: 10px;10. }11.</style>12.</head>13.<body>14.<div class="contro ls">15.线条类型<select id="lineTy peSel ectBo x">16.<option value="solid">实线</option>17.<option value="dashed">虚线</option>18.</select>19.线条颜色<select id="stroke Color Selec tBox">20.<option value="black">black</option>21.<option value="red">red</option>22.<option value="blue">blue</option>23.</select>24.线条宽度<select id="lineWi dthSe lectB ox">25.<option value="1">1</option>26.<option value="2">2</option>27.<option value="4">4</option>28.</select>29.网格线<inputid="gridCh eckBo x" type="checkb ox" checke d="checke d" >30.坐标轴<inputid="axesCh eckBo x" type="checkb ox" checke d="checke d" >31.辅助线<inputid="guideW iresC heckB ox" type="checkb ox" checke d="checke d" >32.<inputtype="button" value="清除画布ww w.qqpar" id="eraseA llBut ton">33.</div>34.<!--canvas默认大小300*150-->35.<canvas id="canvas" width="800" height="500">36.</canvas>37.</body>38.<!--导入绘制坐标、网格的js文件-->39.<script type = "text/javasc ript"src ="mikuCa nvasA xes.js"></script>40.<!--导入绘制虚线的js文件-->41.<script type = "text/javasc ript"src ="mikuCa nvasL ine.js"></script>42.<!--导入主要绘图js文件-->43. <!--44.全局变量定义45.函数:窗口坐标转换为Canv as坐标、保存\还原当前绘图表面数据、橡皮筋法相关函数、绘制辅助线相关函数、初始化函数46.事件处理:鼠标down,move,up事件、按钮点击事件、单选框变化事件47. -->48.<script type = "text/javasc ript"src ="mikuCa nvasP aintA ppMai n.js"></script>49.</html>②绘制坐标轴与网格[html]view plainc opy1.<!docuty pe html>2.<!--date 2014-12-28-->3.<html>4.<head>5.<meta http-equiv="conten t-type"conten t="text/html; charse t=utf-8"/>6.<styletype="text/css">7. canvas{8.9. }10.</style>11.<script type = "text/javasc ript"src ="mikuCa nvasA xes.js"></script>12.</head>13.<body>14.<div class="contro ls">15.网格线<inputid="gridCh eckBo x"type="checkb ox"checke d="checke d">16.坐标轴<inputid="axesCh eckBo x"type="checkb ox"checke d="checke d">17.<inputtype="button"value="清除画布"id="eraseA llBut ton">18.</div>19.<!--canvas默认大小300*150-->20.<canvas id="canvas"width="800"height="500">21.</canvas>22.</body>23.<script type="text/javasc ript">24. //Vars--------------------------------------------------------25. var canvas =docume nt.getEle mentB yId("canvas"),26.contex t =canvas.getCon text("2d"),27. //正在绘制的绘图表面变量28. drawin gSurf aceIm ageDa ta,29. //鼠标按下相关对象30.moused own = {},31. //橡皮筋矩形对象32.rubber bandR ect = {},33. //拖动标识变量34.draggi ng = false;35. //控制对象36. var eraseA llBut ton = docume nt.getEle mentB yId("eraseA llBut ton"),37.axesCh eckBo x = docume nt.getEle mentB yId("axesCh eckBo x"),38. //检测axes Check Box是否被选中39.haveAx es = axesCh eckBo x.checke d;40. var gridCh eckBo x = docume nt.getEle mentB yId("gridCh eckBo x");41. var haveGr id = gridCh eckBo x.checke d;42. //Functi ons---------------------------------------------------43. //将窗口坐标转换为Can vas坐标44. //传入参数:窗口坐标(x,y)45. functi on window ToCan vas(x,y){46. //获取canv as元素的边距对象47. var bbox = canvas.getBou nding Clien tRect();48. //返回一个坐标对象49. //类似json的一种写法50. return {51. x : x - bbox.left*(canvas.width/bbox.width),52. y : y - bbox.top*(canvas.height/bbox.height)53. };54. }55. //保存当前绘图表面数据56. functi on saveDr awing Surfa ce(){57. //从上下文中获取绘图表面数据58.drawin gSurf aceIm ageDa ta = contex t.getIma geDat a(0,0,canvas.width,canvas.height);59. }60. //还原当前绘图表面61. functi on restor eDraw ingSu rface(){62. //将绘图表面数据还原给上下文63. contex t.putIma geDat a(drawin gSurf aceIm ageDa ta,0,0);64. }65. //橡皮筋相关函数66.67. //更新橡皮筋矩形+对角线68. //传入参数:坐标对象lo c69. functi on update Rubbe rband(loc){70. update Rubbe rband Recta ngle(loc);71. drawRu bberb andSh ape(loc);72. }73. //更新橡皮筋矩形74. //传入参数:坐标对象lo c75. functi on update Rubbe rband Recta ngle(loc){76. //获得矩形的宽77.rubber bandR ect.width= Math.abs(loc.x - moused own.x);78. //获得矩形的高79.rubber bandR ect.height = Math.abs(loc.y - moused own.y);80. //获得矩形顶点的位置(left,top)81. //如果鼠标按下的点(起点)在当前点的的左侧82. //这里画一下图就懂了83. if(loc.x > moused own.x){84.rubber bandR ect.left = moused own.x;85. }else{86.rubber bandR ect.left = loc.x;87. }88. if(loc.y > moused own.y){89.rubber bandR ect.top = moused own.y;90. }else{91.rubber bandR ect.top = loc.y;92. }93. }94. //绘制橡皮筋矩形的对角线95. //传入参数:坐标对象lo c96. functi on drawRu bberb andSh ape(loc){97. //alert("draw");98. contex t.beginP ath();99. contex t.moveTo(moused own.x,moused own.y);100. contex t.lineTo(loc.x,loc.y);101. contex t.stroke();102. }103. //事件处理----------------------------------------------------- 104.canvas.onmous edown = functi on(e){105. var loc =window ToCan vas(e.client X,e.client Y);106. e.preven tDefa ult();107. saveDr awing Surfa ce();108.moused own.x = loc.x;109.moused own.y = loc.y;110.draggi ng = true;111. }112.113.canvas.onmous emove = functi on(e){114. var loc;115. if(draggi ng){116. e.preven tDefa ult();117.loc = window ToCan vas(e.client X,e.client Y);118. restor eDraw ingSu rface();119. update Rubbe rband(loc);120. }121. }122.canvas.onmous eup = functi on(e){123.loc = window ToCan vas(e.client X,e.client Y);124. restor eDraw ingSu rface();125. update Rubbe rband(loc);126.draggi ng = false;127. }128.eraseA llBut ton.onclic k = functi on(e){129. contex t.clearR ect(0,0,canvas.width,canvas.height);130. initia lizat ion();131. saveDr awing Surfa ce();132. }133.axesCh eckBo x.onchan ge = functi on(e){134.haveAx es = axesCh eckBo x.checke d;135. initia lizat ion();136. }137.gridCh eckBo x.onchan ge = functi on(e){138.haveGr id = gridCh eckBo x.checke d;139. initia lizat ion();140. }141. //Initia lizat ion---------------------------------------------- 142. functi on initia lizat ion(){143. //清除画布144. contex t.clearR ect(0,0,canvas.width,canvas.height);145. if(haveAx es){146. drawAx es(contex t,40);147. }148. if(haveGr id){149. drawGr id(contex t,10,10);150. }151. }152. //入口153. initia lizat ion();154.</script>155.</html>②绘制网格与坐标轴的js文件[javasc ript]view plainc opy1.//Classe s----------------------------------------------------2.functi on mikuLo c(locX,locY){3.this.x = locX;4.this.y = locY;5.}6.//Conten ts---------------------------------------------------7.var GRID_S TYLE = "lightg ray",8. GRID_L INE_W IDTH= 0.5;9.10.var AXES_S TYLE = "#a2a2a2",11. AXES_L INE_W IDTH= 1,12. VERTIC AL_TI CK_SP ACING = 10,13. HORIZO NTAL_TIKE_SPACI NG = 10,14. TICK_W IDTH= 10;15.//Functi on---------------------------------------------------16.//绘制网格17.//传入参数为:绘图环境,x轴间隔,y轴间隔18.functi on drawGr id(contex t,stepx,stepy){19. contex t.save();20. contex t.stroke Style = GRID_S TYLE;21.//设置线宽为0.522. contex t.lineWi dth = GRID_L INE_W IDTH;23.//绘制x轴网格24.//注意:canvas在两个像素的边界处画线25.//由于定位机制,1px的线会变成2px26.//于是要+0.527.for(var i=stepx+0.5;i<contex t.canvas.width;i=i+stepx){28.//开启路径29. contex t.beginP ath();30. contex t.moveTo(i,0);31. contex t.lineTo(i,contex t.canvas.height);32. contex t.stroke();33. }34.//绘制y轴网格35.for(var i=stepy+0.5;i<contex t.canvas.height;i=i+stepy){36. contex t.beginP ath();37. contex t.moveTo(0,i);38. contex t.lineTo(contex t.canvas.width,i);39. contex t.stroke();40. }41. contex t.restor e();42.};43.//Functi on---------------------------------------------------44.//绘制坐标轴45.//传入参数为:绘图环境,坐标轴边距46.functi on drawAx es(contex t,axesMa rgin){47.//保存样式48. contex t.save();49.var origin Loc = new mikuLo c(axesMa rgin, contex t.canvas.height-axesMa rgin);50.var axesW= contex t.canvas.width - (axesMa rgin*2),51. axesH= contex t.canvas.height - (axesMa rgin*2);52.//设置坐标绘图样式绘图样式53. contex t.stroke Style = AXES_S TYLE;54. contex t.lineWi dth = AXES_L INE_W IDTH;55.//绘制x,y轴56. drawHo rizon talAx is();57. drawVe rtica lAxis();58. drawVe rtica lAxis Ticks();59. drawHo rizon talAx isTic ks();60.//恢复样式61. contex t.restor e();62.63.//绘制x轴64.functi on drawHo rizon talAx is(){65. contex t.beginP ath();66. contex t.moveTo(origin Loc.x, origin Loc.y);67. contex t.lineTo(origin Loc.x + axesW, origin Loc.y);68. contex t.stroke();69. }70.//绘制y轴71.functi on drawVe rtica lAxis(){72. contex t.beginP ath();73. contex t.moveTo(origin Loc.x, origin Loc.y);74. contex t.lineTo(origin Loc.x, origin Loc.y - axesH);75. contex t.stroke();76. }77.//绘制垂直轴小标标78.functi on drawVe rtica lAxis Ticks(){79.var deltaX;80.//当前垂直ti ck的y轴坐标81.var nowTic kY =origin Loc.y-VERTIC AL_TI CK_SP ACING;82.for(var i=1;i<=(axesH/VERTIC AL_TI CK_SP ACING);i++){83.if(i%5 === 0){84. deltaX=TICK_W IDTH;85. }else {86. deltaX=TICK_W IDTH/2;87. }88. contex t.beginP ath();89.//移动到当前的tick起点90. contex t.moveTo(origin Loc.x-deltaX,nowTic kY);91. contex t.lineTo(origin Loc.x+deltaX,nowTic kY);92. contex t.stroke();93. nowTic kY=nowTic kY-VERTIC AL_TI CK_SP ACING;94. }95. }96.//绘制水平轴小标标97.functi on drawHo rizon talAx isTic ks(){98.var deltaY;99.var nowTic kX = origin Loc.x+HORIZO NTAL_TIKE_SPACI NG;100.for(var i=1;i<=(axesW/HORIZO NTAL_TIKE_SPACI NG);i++){ 101.if(i%5 === 0){102. deltaY = TICK_W IDTH;103. }else{104. deltaY = TICK_W IDTH/2;105. }106. contex t.beginP ath();107. contex t.moveTo(nowTic kX,origin Loc.y+deltaY);108. contex t.lineTo(nowTic kX,origin Loc.y-deltaY);109. contex t.stroke();110. nowTic kX = nowTic kX + HORIZO NTAL_TIKE_SPACI NG;111. }112. }113.};③绘制虚线[javasc ript]view plainc opy1.//绘制虚线2.//传入参数:上下文,起点,终点,虚线间隔3.functi on drawDa shedL ine(contex t,x1,y1,x2,y2,dashLe ngth){4.//运用三元表达式实现默认参数5. dashLe ngth= dashLe ngth===undefi ned ? 5 : dashLe ngth;6.//水平长度7.var deltaX = x2 - x1;8.//垂直长度9.var deltaY = y2 - y1;10.//虚线数量11.var numDas hed = Math.floor(12. Math.sqrt(deltaX*deltaX+deltaY*deltaY)/dashLe ngth13. );14.//开始绘制15. contex t.beginP ath();16.for(var i=0; i<numDas hed;i++){17.//这种写法太强大了18.//(deltaX/numDas hed)是指虚线的长度19. contex t[i%2===0 ? "moveTo":"lineTo"](x1+(deltaX/numDas hed)*i,y1+(deltaY/numDas hed)*i);20. }21.//要记得描线啊22. contex t.stroke();23.//结束绘制24. contex t.closeP ath();25.}④主要绘图代码[javasc ript]view plainc opy1.//Vars--------------------------------------------------------2.var canvas =docume nt.getEle mentB yId("canvas"),3. contex t =canvas.getCon text("2d"),4.//正在绘制的绘图表面变量5. drawin gSurf aceIm ageDa ta,6.//鼠标按下相关对象7. moused own = {},8.//橡皮筋矩形对象9. rubber bandR ect = {},10.//拖动标识变量11. draggi ng = false;12.13.//控件14.//擦除画布的控制15.var eraseA llBut ton = docume nt.getEle mentB yId("eraseA llBut ton");16.//坐标轴的控制17.var axesCh eckBo x = docume nt.getEle mentB yId("axesCh eckBo x");18.//网格线的控制19.var gridCh eckBo x = docume nt.getEle mentB yId("gridCh eckBo x");20.//辅助线的控制21.var guideW iresC heckB ox = docume nt.getEle mentB yId("guideW iresC heckB ox");22.//线条颜色的控制23.var stroke Color Selec tBox=docume nt.getEle mentB yId("stroke Color Selec tBox");24.//线条样式的控制25.var lineTy peSel ectBo x = docume nt.getEle mentB yId("lineTy peSel ectBo x");26.//线条宽度的控制27.var lineWi dthSe lectB ox = docume nt.getEle mentB yId("lineWi dthSe lectB ox");28.//Functi ons---------------------------------------------------29.//将窗口坐标转换为Can vas坐标30.//传入参数:窗口坐标(x,y)31.functi on window ToCan vas(x,y){32.//获取canv as元素的边距对象33.var bbox = canvas.getBou nding Clien tRect();34.//返回一个坐标对象35.//类似json的一种写法36.return {37. x : x - bbox.left*(canvas.width/bbox.width),38. y : y - bbox.top*(canvas.height/bbox.height)39. };40. }41.//保存当前绘图表面数据42.functi on saveDr awing Surfa ce(){43.//从上下文中获取绘图表面数据44. drawin gSurf aceIm ageDa ta = contex t.getIma geDat a(0,0,canvas.width,canvas.height);45. }46.//还原当前绘图表面47.functi on restor eDraw ingSu rface(){48.//将绘图表面数据还原给上下文49. contex t.putIma geDat a(drawin gSurf aceIm ageDa ta,0,0);50. }51.//橡皮筋相关函数52.53.//更新橡皮筋矩形+对角线54.//传入参数:坐标对象lo c55.functi on update Rubbe rband(loc){56. update Rubbe rband Recta ngle(loc);57. drawRu bberb andSh ape(loc);58. }59.//更新橡皮筋矩形60.//传入参数:坐标对象lo c61.functi on update Rubbe rband Recta ngle(loc){62.//获得矩形的宽63. rubber bandR ect.width= Math.abs(loc.x - moused own.x);64.//获得矩形的高65. rubber bandR ect.height = Math.abs(loc.y - moused own.y);66.//获得矩形顶点的位置(left,top)67.//如果鼠标按下的点(起点)在当前点的的左侧68.//这里画一下图就懂了69.if(loc.x > moused own.x){70. rubber bandR ect.left = moused own.x;71. }else{72. rubber bandR ect.left = loc.x;73. }74.if(loc.y > moused own.y){75. rubber bandR ect.top = moused own.y;76. }else{77. rubber bandR ect.top = loc.y;78. }79. }80.//绘制橡皮筋矩形的对角线81.//传入参数:坐标对象lo c82.functi on drawRu bberb andSh ape(loc){83.//获取当前线条类型84.var lineTy pe = lineTy peSel ectBo x.value;85.//获取当前线条颜色86.var lineCo lor = stroke Color Selec tBox.value;87.//获取当前线条宽度88.var lineWi dth = lineWi dthSe lectB ox.value;89.//有改变con text画笔属性就要做画笔保护90. contex t.save();91. contex t.stroke Style = lineCo lor;92. contex t.lineWi dth = lineWi dth;93.if(lineTy pe === "solid"){94.//alert("draw");95.//注意重新开始路径96. contex t.beginP ath();97. contex t.moveTo(moused own.x,moused own.y);98.//这里可以更改成画虚线99. contex t.lineTo(loc.x,loc.y);100. contex t.stroke();101. }else if(lineTy pe === "dashed"){102. drawDa shedL ine(contex t,moused own.x,moused own.y,loc.x,loc.y); 103. }104. contex t.restor e();105. }106.107.//绘制辅助用的线-------------------------108.//绘制水平线109.functi on drawHo rizon talLi ne(y){110. contex t.beginP ath();111. contex t.moveTo(0,y+0.5);112. contex t.lineTo(contex t.canvas.width,y+0.5);113. contex t.stroke();114. }115.//绘制垂直线116.functi on drawVe rtica lLine(x){117. contex t.beginP ath();118. contex t.moveTo(x+0.5,0);119. contex t.lineTo(x+0.5,contex t.canvas.height);120. contex t.stroke();121. }122.//绘制辅助用的线123.functi on drawGu ideWi res(x,y){124.//画笔保护125. contex t.save();126. contex t.stroke Style = "red";127. contex t.lineWi dth = 0.5;128. drawHo rizon talLi ne(y);129. drawVe rtica lLine(x);130. contex t.restor e();131. }132.//初始化函数133.functi on initia lizat ion(){134.//清除画布135. contex t.clearR ect(0,0,canvas.width,canvas.height); 136.//绘制网格与坐标的颜色是默认的137.if(axesCh eckBo x.checke d){138. drawAx es(contex t,40);139. }140.if(gridCh eckBo x.checke d){141. drawGr id(contex t,10,10);142. }143. }144.//EventHander-----------------------------------------------------145. canvas.onmous edown = functi on(e){146.var loc =window ToCan vas(e.client X,e.client Y);147. e.preven tDefa ult();148. saveDr awing Surfa ce();149. moused own.x = loc.x;150. moused own.y = loc.y;151. draggi ng = true;152. }153.154. canvas.onmous emove = functi on(e){155.var loc;156.if(draggi ng){157. e.preven tDefa ult();158. loc = window ToCan vas(e.client X,e.client Y);159. restor eDraw ingSu rface();160. update Rubbe rband(loc);161. }162.if(draggi ng&&guideW iresC heckB ox.checke d){163. drawGu ideWi res(loc.x,loc.y);164. }165. }166. canvas.onmous eup = functi on(e){167. loc = window ToCan vas(e.client X,e.client Y);168. restor eDraw ingSu rface();169. update Rubbe rband(loc);170. draggi ng = false;171. }172.173.//需要擦除的操作需要重新初始化174. eraseA llBut ton.onclic k = functi on(e){175. contex t.clearR ect(0,0,canvas.width,canvas.height);176. initia lizat ion();177. saveDr awing Surfa ce();178. }179. axesCh eckBo x.onchan ge = functi on(e){180. initia lizat ion();181. }182. gridCh eckBo x.onchan ge = functi on(e){183. initia lizat ion();184. }185.//Mian----------------------------------------------186. initia lizat ion();本文由CSDN博客,博客ID:MIKUSc allio n原创发布,转载请注明出处!。
javadrawimage的用法javadrawimage是Java中用于绘制图像的一个方法。
它可以用于在Java应用程序中绘制图像,以及在GUI中显示图像。
javadrawimage的用法非常简单,只需要使用Graphics对象的drawImage()方法即可。
drawImage()方法接受三个参数:要绘制的图像对象、x坐标和y坐标。
例如,以下代码片段演示了如何使用javadrawimage方法将图像绘制在Java应用程序中:```import java.awt.Graphics;import java.awt.Image;import javax.swing.JFrame;import javax.swing.JPanel;public class DrawImage extends JPanel {private Image image;public DrawImage() {image =Toolkit.getDefaultToolkit().getImage('image.png');}public void paint(Graphics g) {g.drawImage(image, 0, 0, this);}public static void main(String[] args) {JFrame frame = new JFrame('Draw Image');frame.getContentPane().add(new DrawImage());frame.setSize(300, 300);frame.setVisible(true);}}```在上面的代码中,我们创建了一个继承自JPanel的类DrawImage,并覆盖了paint()方法,在其中调用了Graphics对象的drawImage()方法。
在main()方法中,我们创建了一个JFrame对象,并将DrawImage 对象添加到其中。
Java的Graphics类进⾏绘图的⽅法详解Graphics类提供基本绘图⽅法,Graphics2D类提供更强⼤的绘图能⼒。
Graphics类提供基本的⼏何图形绘制⽅法,主要有:画线段、画矩形、画圆、画带颜⾊的图形、画椭圆、画圆弧、画多边形等。
1. 画线在窗⼝画⼀条线段,可以使⽤Graphics类的drawLine()⽅法:drawLine(int x1,int y1,int x2,int y2) 例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,100)处画⼀个点。
g.drawLine(3,3,50,50);//画⼀条线段g.drawLine(100,100,100,100);//画⼀个点。
2. 画矩形有两种矩形:普通型和圆⾓型。
(1) 画普通矩形有两个⽅法:drawRect(int x,int y,int width,int height):画线框围起来的矩形。
其中参数x和y指定左上⾓的位置,参数width和height是矩形的宽和⾼。
fillRect(int x,int y,int width,int height):是⽤预定的颜⾊填充⼀个矩形,得到⼀个着⾊的矩形块。
以下代码是画矩形的例⼦:g.drawRect(80,100,40,25);//画线框g.setColor(Color.yellow);g.fillRect(20,70,20,30);//画着⾊块(2)画圆⾓矩形也有两个⽅法:drawRoundRect(int x,int y,int width, int height, int arcWidth, int arcHeight):是⽤线围起来的圆⾓矩形。
其中参数x和y指定矩形左上⾓的位置;参数width和heigth是矩形的宽和⾼;arcWidth和arcHeight分别是圆⾓弧的横向直径和圆⾓弧的纵向直径。
fillRoundRect(int x,int y,int width,int height,int arcWidth,int archeight):是⽤预定的颜⾊填充的圆⾓矩形。
鼠标代码鼠标是计算机输入设备的一种,用于控制光标在屏幕上的移动、点击和拖动。
在编程中,我们可以通过使用鼠标代码来实现对鼠标的控制和操作。
本文将介绍一些常用的鼠标代码以及它们的应用。
1. 鼠标移动鼠标移动是鼠标操作中最基本的功能之一。
我们可以使用鼠标代码来控制鼠标在屏幕上的移动。
以下是一个示例代码:import pyautogui# 将鼠标移动到屏幕的坐标(100, 100)处pyautogui.moveTo(100, 100)以上代码使用了pyautogui库中的moveTo()函数来将鼠标移动到指定的坐标。
2. 鼠标点击鼠标点击是鼠标操作中非常常用的功能之一。
我们可以使用鼠标代码来模拟鼠标的点击操作。
以下是一个示例代码:import pyautogui# 在屏幕的坐标(200, 200)处进行一次左键点击pyautogui.click(200, 200)以上代码使用了pyautogui库中的click()函数来模拟鼠标的点击操作。
默认情况下,click()函数会模拟鼠标的左键点击操作。
我们也可以通过传入button参数来模拟鼠标的右键点击操作。
3. 鼠标滚轮滚轮是许多鼠标上都有的一个功能,用于在屏幕上进行垂直滚动。
我们可以使用鼠标代码来模拟鼠标滚轮的操作。
以下是一个示例代码:import pyautogui# 向上滚动鼠标滚轮一次pyautogui.scroll(1)# 向下滚动鼠标滚轮一次pyautogui.scroll(-1)以上代码使用了pyautogui库中的scroll()函数来模拟鼠标滚轮的操作。
scroll()函数的参数可以为正数或负数,表示向上或向下滚动的次数。
4. 鼠标拖拽鼠标拖拽是鼠标操作中的一项重要功能,用于在屏幕上进行物体的拖动操作。
我们可以使用鼠标代码来模拟鼠标拖拽的操作。
以下是一个示例代码:import pyautogui# 将鼠标拖拽到屏幕的坐标(300, 300)处pyautogui.dragTo(300, 300)以上代码使用了pyautogui库中的dragTo()函数来模拟鼠标拖拽的操作。
//可以在eclipse下直接运行的示例程序:package key_robot;import java.awt.*;import java.awt.event.*;import javax.swing.JOptionPane;public class key_robot {public key_robot() {}// 鼠标单击,要双击就连续调用private static void pressMouse(Robot r, int m, int delay) { r.mousePress(m);r.delay(10);r.mouseRelease(m);r.delay(delay);}// 键盘输入方法private static void pressKeys(Robot r, int[] ks, int delay) { for (int i = 0; i < ks.length; i++) {r.keyPress(ks[i]);r.delay(10);r.keyRelease(ks[i]);r.delay(delay);}}public static void main(String[] args) throws Exception { final Robot rb = new Robot();new Thread() {public void run() {rb.delay(2000); // 模拟回车rb.keyPress(KeyEvent.VK_ENTER);rb.keyRelease(KeyEvent.VK_ENTER);}}.start();JOptionPane.showMessageDialog(null,"以下程序自动执行,包括本对话框,点击运行后请不要移动鼠标和键盘.\n如果不能正常执行程序,请先关闭输入法");rb.delay(1500);// 设置开始菜单的大概位置int x = 40;int y = Toolkit.getDefaultToolkit().getScreenSize().height- 10; // 鼠标移动到开始菜单,rb.mouseMove(x, y);rb.delay(500);// 单击三次开始菜单for (int i = 0; i < 3; i++)pressMouse(rb, InputEvent.BUTTON1_MASK, 500);rb.delay(1000);// 运行CMD命令r cmd enterint[] ks = { KeyEvent.VK_R, KeyEvent.VK_C, KeyEvent.VK_M,KeyEvent.VK_D, KeyEvent.VK_ENTER, };pressKeys(rb, ks, 500);rb.mouseMove(400, 400);rb.delay(500);// 运行DIR命令dir enterks = new int[] { KeyEvent.VK_D, KeyEvent.VK_I, KeyEvent.VK_R, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 运行CLS命令cls enterks = new int[] { KeyEvent.VK_C, KeyEvent.VK_L, KeyEvent.VK_S, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 运行EXIT命令exit enterks = new int[] { KeyEvent.VK_E, KeyEvent.VK_X, KeyEvent.VK_I, KeyEvent.VK_T, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 右键测试x = Toolkit.getDefaultToolkit().getScreenSize().width - 10;rb.mouseMove(x, y);// 如果是双键鼠标,请改用InputEvent.BUTTON2_MASK标pressMouse(rb, InputEvent.BUTTON3_MASK, 500);// 显示日期调整对话框apressKeys(rb, new int[] { KeyEvent.VK_A }, 1000);rb.delay(2000);pressKeys(rb, new int[] { KeyEvent.VK_ESCAPE }, 0);rb.delay(1000);new Thread() {public void run() {rb.delay(1000); // 回车rb.keyPress(KeyEvent.VK_ENTER);rb.keyRelease(KeyEvent.VK_ENTER);}}.start();JOptionPane.showMessageDialog(null, "演示完毕!");}}。
java会动的爱心曲线代码以下是一个使用Java编写的可以绘制动态爱心曲线的示例代码: java.import javax.swing.;import java.awt.;public class LoveCurve extends JFrame {。
private static final int WIDTH = 800; // 窗口宽度。
private static final int HEIGHT = 600; // 窗口高度。
private int x; // 当前绘制点的x坐标。
private int y; // 当前绘制点的y坐标。
private double t; // 参数t,用于控制曲线的形状。
public LoveCurve() {。
setTitle("动态爱心曲线");setSize(WIDTH, HEIGHT);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null);setResizable(false);setVisible(true);}。
@Override.public void paint(Graphics g) {。
super.paint(g);Graphics2D g2d = (Graphics2D) g;// 设置绘制颜色为红色。
g2d.setColor(Color.RED);// 绘制爱心曲线。
for (t = 0; t <= Math.PI 2; t += 0.01) {。
x = (int) (Math.sin(t) 100);y = (int) (Math.cos(t) 100 Math.cos(2 t) 50 Math.cos(3 t) 25 Math.cos(4 t) 12.5);g2d.fillOval(WIDTH / 2 + x, HEIGHT / 2 y, 5, 5);}。
javafx canvas 代码例子JavaFX是一个用于构建富客户端应用程序的GUI工具包。
其中的Canvas类提供了一个可自定义绘图表面,可以用于绘制图形、文本和图像等元素。
下面是10个使用JavaFX Canvas的代码例子:1. 绘制简单的图形:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setFill(Color.RED);gc.fillRect(50, 50, 200, 100);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一个红色的矩形。
2. 绘制文本:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setFont(Font.font("Arial", FontWeight.BOLD, 24));gc.fillText("Hello, JavaFX!", 50, 100);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一个带有粗体的Arial字体的文本。
3. 绘制线条:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setStroke(Color.BLUE);gc.setLineWidth(2);gc.strokeLine(50, 50, 200, 200);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一条蓝色的线段。
4. 绘制圆形:```Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D();gc.setFill(Color.GREEN);gc.fillOval(100, 100, 100, 100);```这段代码创建了一个400x300的Canvas对象,并在其上绘制了一个绿色的圆形。
javapaint方法在Java中,可以使用paint方法来实现对组件进行绘制的功能。
paint方法是Swing组件中的一个方法,用于进行组件的绘制操作。
下面将详细介绍Java的paint方法。
首先,paint方法是在组件需要被重绘时由Java虚拟机自动调用的,应用程序通常无需自己调用paint方法。
在组件首次显示时或需要进行重绘时,paint方法将自动被调用。
paint方法的方法签名如下:```public void paint(Graphics g)```paint方法的参数是一个Graphics对象,它提供了一系列的绘图方法用于完成绘制操作。
在paint方法中,通常需要完成以下几个步骤:1. 获取Graphics对象:用于绘制的Graphics对象可以通过paint方法的参数获取,此时可以使用Graphics对象的各种方法来完成绘制操作。
2. 设置绘图属性:在开始绘制之前,通常需要设置一些绘画属性,比如绘图颜色、线条粗细等。
Graphics对象提供了一系列用于设置绘画属性的方法,比如setColor、setStroke等。
3. 进行绘制操作:在绘制之前,需要确定绘制的内容和位置。
根据需要,可以使用Graphics对象的各种绘图方法,如drawLine、drawRect、fillRect等来绘制需要的图形。
4. 释放资源:绘制操作完成后,通常需要释放绘图资源,以便其他组件或画布进行绘制操作。
可以通过Graphics对象的dispose方法来释放绘图资源。
下面是一个简单的示例代码,展示了如何在一个JPanel类中使用paint方法进行绘制操作:```javaimport javax.swing.*;import java.awt.*;public class MyPanel extends JPanelpublic void paint(Graphics g)super.paint(g);//设置绘图属性g.setColor(Color.RED);//绘制操作g.drawLine(10, 10, 100, 100);g.drawRect(50, 50, 100, 100);g.fillRect(200, 200, 100, 100);//释放资源g.dispose(;}```在上面的代码中,首先继承了JPanel类,并重写了其paint方法。
java click()的用法
click()方法是Java中java.awt.Robot类的一个方法,用于模拟
鼠标的点击操作。
它可以模拟用户在屏幕上点击鼠标左键、右键或中键。
click()方法没有参数,它会将鼠标点击事件发送到当前鼠标光标
所在的位置。
使用click()方法时,需要确保Robot类的实例已经创建,并且调用click()方法的线程具有操作系统级的鼠标控制权限。
除了click()方法,Robot类还提供了其他鼠标相关的方法,比如mouseMove()方法用于移动鼠标光标的位置,mousePress()方法用于模
拟鼠标按下操作,mouseRelease()方法用于模拟鼠标释放操作等等。
通过组合这些方法的调用,可以实现更复杂的鼠标操作,例如拖拽、
滚动等。
拓展:
除了使用Robot类进行鼠标点击操作,还可以使用JavaFX或
Swing等图形库来实现鼠标的点击操作。
这些库提供了更高级的鼠标事
件处理机制,可以更灵活地响应用户的点击操作,并在界面上进行交互。
另外,Java也支持JavaScript语言的嵌入,所以你也可以在Java中使用JavaScript的click()方法来模拟点击操作。
这通常用于在Java应用程序中嵌入Web页面,对页面中的元素进行点击操作。
使用这种方式需要依赖于一些第三方库或框架,比如Rhino或Nashorn 等。
总之,click()方法是Robot类的一个用于模拟鼠标点击操作的方法,它可以方便地实现一些自动化的鼠标操作。
使用它需要注意线程权限和实例创建等问题,同时也可以结合其他库或框架进行更高级的鼠标操作。
计算机与信息工程系《JA V A程序设计》课程设计画图板专业计算机班级计000001学号00000姓名0000E-Mail 电话10000000032 时间2000006承德石油高等专科学校摘要:本程序通过调用JA V A提供的BorderLayout,Button,Color;Container;Graphics;Panel;ButtonGroup;JFrame;JPanel;UIManager等基本类进行了简单的界面设计,运用了JA V A中类的继承特性实现了对父类方法的调用,并多次使用CASE语句实现绘图菜单的选择,运用了适配器类简化了监听器类的重写工作。
关键字:UIManager、ActionListener1. 课程设计介绍本程序完成的是一个类似于Windows画图板的绘图程序。
由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项:1.新建一个空白图形文件:用于绘制新的图形。
2.打开或保存一个图形文件,便于对图形文件的管理。
3.绘制一些基本的画图组件:直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等。
4.可以用鼠标在绘图面板上单击拖动进行随笔画。
5.橡皮擦:可以将已绘制好的图形擦掉。
6.添加文字:可以在绘图区域内添加文字。
7.选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。
本程序中包括:宋体、隶书、华文彩云、仿宋_GB2312、华文行楷、方正舒体、Times New Roman、Serif、Monospaced、SonsSerif、Garamond。
当然,在下面的的程序分析中可以看到,由于我们灵活设置了字体数组,是的可以随意添加系统支持的任何字体。
大大方便和简化了程序设计。
8.选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体、斜体,使用者有三种选择方式,包括:①同时选中两者、②只选择其中一种、③两者都不选中。