画流动虚线框(java)

本文介绍了如何在Java中实现类似Photoshop中的流动虚线框效果。首先讲解了虚线的构成,然后通过自定义画线方法来画虚线,接着分析了流动原理,最后展示了动态画虚线的实现代码,包括处理实线和虚线段的绘制以及流动过程的控制。
摘要由CSDN通过智能技术生成

前两天写了个作业:在面板(Panel)上显示一张图片,并能够用鼠标随意拖动,将图片放置于任何位置。
 见:http://blog.csdn.net/caoxiongjun/archive/2006/09/19/1246533.aspx
    在完成那个作业后,我又想,在我双击图片后,能不能像photoshop那样,在“全选”之后,图片周围出现流动的虚线框的效果,想到就去做,于是我又研究了起来,那么,现在跟着我来看看,我是怎么实现的吧!(程序可能存在些不足,还请高手们指正).

第一步:认识虚线
        请看下图,虚线其实是由一条条不连续的"实线段"组成的,这里实线段是白色的部分,背景色是黑色,我们暂且称实线段之间间隔的空余部分为“虚线段”. 

第二步:画虚线
   java的Graphics提供了画直线的方法:drawLine(int x1,int x2,int y1,int y2),
其功能是画一条从点 (x1,y1)到 点 (x2,y2)的一条直线。
   假如,我们想画一条从点 (x1,y1) 到 点 (x2,y2)的虚线,那我们该怎么做呢?是直接调用Graphics的drawLine()方法吗?显然不是,drawLine()画的是实线。那Graphics有提供实现画虚线效果的方法吗?没有,我没在java的document中找到有这种功能的方法。那现在,我们只能自己动手了(利用drawLine()方法)。

 参看上图,假设,我们要画的虚线的 实现段 和 虚线段,其长度都为4个像素,那么其虚线就是:
         4个像素的线段----4个像素的空余----4个像素的线段----4个像素的空余--.......
用程序实现的过程就是:
 画4个像素的线段----跳过4个像素----画4个像素的线段----跳过4个像素----......直到达到了所要的虚线长度.代码如下:(只适用于水平线和垂直线)

 

     public   void  drawDashed(Graphics g,  int  x1,  int  y1,  int  x2,  int  y2)
    
{
        
int x = x1,y=y1;
        
int n = 4;  //实线段长度
        int m = 4;  //虚线段长度
        
        
int tx = 0,ty = 0;
        
        
int c = 0;
        
boolean flag = true;  //标记 有没有画完(达到要求的长度)
        
        
int mark_x = 0;  //标记 要画的是 水平线(值为1)
        int mark_y = 0;  //标记 要画的是 垂直线(值为1)
        
//要么0,要么 1
        if(x2-x1 != 0)
            mark_x 
= 1;
        
else
            mark_y 
= 1;
        
        
do
        
{
            tx 
= (int)((c*(n+m) - m)*mark_x + x1 );    
            ty 
= (int)((c*(n+m) - m)*mark_y + y1 );   

            
if(Math.abs(tx-x1) > Math.abs(x2-x1))
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值