Java 2D Graphics提供了强大的画线功能,可以控制线型,线宽,刷子的形状等,但在JDK1.2以前,没有提供这样一个功能,为了保持与旧版JDK的相容,实现一个可控制线型,线宽的画直线方法还是有必要的,下面是我写的一个静态方法,可直接用来画各种类型的直线:

/**

* Bresenham Line Algorithm

* @author Turbo Chen

* @version 1.0 copyright 2001

* @email turbochen@163.com

* @param dashedMask 设置线型的虚线的间隔,为0则画实线。

* @param lineWidth 设置线宽。

* @param x1

* @param y1

* @param x2

* @param y2

*/

public static void bresenhamLine(java.awt.Graphics g, int dashedMask, int lineWidth, int x1, int y1, int x2, int y2)

{

int  x, y;

int  dx, dy;

int  incx, incy;

int  balance;

int i=0;

if (x2 >= x1)

{

dx = x2 - x1;

incx = 1;

}

else

{

dx = x1 - x2;

incx = -1;

}

if (y2 >= y1)

{

dy = y2 - y1;

incy = 1;

}

else

{

dy = y1 - y2;

incy = -1;

}

x = x1;

y = y1;

if (dx >= dy)

{

dy <<= 1;

balance = dy - dx;

dx <<= 1;

while (x != x2)

{

if ( (i & dashedMask)==0 )

g.fillOval(x, y,lineWidth,lineWidth);

if (balance >= 0)

{

y += incy;

balance -= dx;

}

balance += dy;

x += incx;

i ++;

}

if ( (i & dashedMask)==0 )

g.fillOval(x, y,lineWidth,lineWidth);

}

else

{

dx <<= 1;

balance = dx - dy;

dy <<= 1;

while (y != y2)

{

if ( (i & dashedMask)==0 )

g.fillOval(x, y,lineWidth,lineWidth);

if (balance >= 0)

{

x += incx;

balance -= dy;

}

balance += dx;

y += incy;

i ++;

}

if ( (i & dashedMask)==0 )

g.fillOval(x, y,lineWidth,lineWidth);

}

}

大家注意看程序中的g.fillOval()方法,也就是说我是用画圆点的方式来画线的,即刷子的样式是圆头型,你可以很容易的改变成g.fillRect()等其它方式,来实现刷子样式的设置.

java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...相关推荐

  1. java写足球游戏_月光软件站 - 编程文档 - Java - 足球战术之flyweight篇

    接上回: 这个是球队的基本建设,为了组建好一支国家队, 而国内有成千上万的优秀队员,而每个人的特性 都不同,要使他们组建成一支11个人的优秀球队, 必须按照442的阵形严格区分每个队员的分工,如 前腰 ...

  2. java项目连接jboss中数据库_月光软件站 - 编程文档 - Java - JBOSS3.2.5中MYSQL数据库连接池的建立与测试...

    数据库连接池的配置参照 samlei 的文档<切换JBOSS默认数据库到MySQL>  http://dev.csdn.net/develop/article/33/33406.shtm ...

  3. java ejb3开发_月光软件站 - 编程文档 - Java - 使用EJB3.O简化EJB开发(三)

    简化持久化容器管理 CMP实体bean将成为EJB3.0使得开发人员强制使用的一个主要的检查方式.持久化框架象如开源的已经成为不像实体bean本质上的复杂和重量级的开发J2EE持久化框架应用的被大家喜 ...

  4. java语句电脑定时关机_月光软件站 - 编程文档 - Java - windows定时关机程序

    应网友yangxjn需要写的一个windows定时关机程序 . /** * Created by IntelliJ IDEA. * autor:cofbean * Date: 2004-3-10 * ...

  5. java最大质数_月光软件站 - 编程文档 - Java - 给一个数,返回比它小的最大质数...

    给一个数,返回比它小的最大质数 今天,有个朋友说他们Java老师布置了一道题,要求写一个java程序, 已知一个数,然后给出比这个数小的最大质数. 起初给他写了这个asp的程序,希望他自己动手做出ja ...

  6. java创建多级xml树_月光软件站 - 编程文档 - Java - 用XSL与XML实现多级树形菜单

    XSL语言功能强大而奇妙.从前面的例子中,我们可以初步了解到,一个xsl文档中使用了很多类似"xsl:xxxxx"这样的标签,这些标签就是xsl语言的部分.一个xsl文档至少是由一 ...

  7. java 数据库工厂_月光软件站 - 编程文档 - Java - 简单的数据库连接工厂实现

    我看过很多数据库连接的代码,大部分都存在问题,有的甚至完全不可用,这里给出一个数据库连接工厂,给出了jdbc1和jdbc2的实现,仅供参考! public class ConnectionFactor ...

  8. Java写入磁盘阵列_月光软件站 - 编程文档 - Java - 利用Linux创建磁盘阵列

    磁盘阵列配置文件为/etc/raidtab raiddev /dev/md0 //指定磁盘阵列的设备名称 raid-level linear //指定采用的是Linear模式 nr-raid-disk ...

  9. mysql的结构化编程_月光软件站 - 编程文档 - 其他语言 - 结构化子查询:在mysql4.1中的应用...

    By Trudy Pelzer 翻译:guipei 随着mysql 4.1版的发布,现在有两种方法可以使用一个单独的查询从多个数据表中取得数据:使用连接(join)或者使用子查询(subquery). ...

最新文章

  1. VC++ .NET 2003学习
  2. kattle的java安装,Kettle自定义JDK版本(附Linux下安装部署步骤)
  3. 如何把文件压缩变成一张图片?
  4. 【Modern OpenGL】第一个三角形
  5. 【转】Ubuntu Desktop下自动启动终端并运行脚本
  6. 牛客网---Java题库(21~30)
  7. 贾跃亭的惩罚来了!就这??
  8. 吴恩达深度学习4.1笔记_Convolutional Neural Networks_卷积神经网络基础
  9. 贺利坚老师汇编课程34笔记:SI和DI复制字符串
  10. OFFICE2003的自动保存功能。
  11. 《OpenCV 4.5计算机视觉开发实战(基于VC++)》示例代码免费下载
  12. 计算机网络课设中:cisco关于nat的静态配置
  13. php用户登录界面代码有背景,HTML和CSS实现动态背景登录页面
  14. 【信息系统项目管理师】2018下半年系统集成项目管理工程师案例分析
  15. android自定义大转盘,Android使用surfaceView自定义抽奖大转盘
  16. 禅道项目管理软件测试功能模块,禅道使用分享:禅道用例管理流程
  17. 第三章直接耦合多级放大电路
  18. 如何在Ubuntu上使用Canonical的Livepatch服务
  19. vscode打开项目从中文界面变成英文界面的问题
  20. ArcGis二次开发ArcEngine开篇

热门文章

  1. php 后端 轻量 框架,GitHub - 22cloud/mixphp: 轻量 PHP 框架,基于 Swoole 的常驻内存型 PHP 高性能框架 (开发文档完善)...
  2. QT中的滚动条QScrollArea
  3. Material Design入门
  4. C++学习之路 | PTA乙级—— 1082 射击比赛 (20 分)(精简)
  5. oracle 并行执行脚本,批量执行Oracle脚本
  6. h5大转盘 php,HTML5 canvas实现中奖转盘的实例代码
  7. dmp只导数据不导结构_今日头条快消食品推广CVR为何高达4.40%?原来DMP定向这么好...
  8. java框架谁搭建_从零开始搭建一个开发框架(Java + Hibernate + Spring + Oracle)
  9. 机器人的自述作文_机器人的自述作文600字
  10. c 程序中的注释相当于空白字符_Python专题 | (三)注释、变量与输出