JAVA实现中点画线_Java 实现中点法画线

ab551e4901199e410c8f6e7e4340ef0b.png

用重点画线法画直线,当然其实这直线应该是弯曲的,应为这个点太大了所以看着像是直线,我同学他们用来演示的都不是这么直的。其中,paintComponent (Graphics line)这个方法很重要。貌似在swing组件中,都继承了一个接口paint,所以这个不算是自己定义的函数,是一个接口的实现。

代码如下:

画图实现程序:

LinePanel.java

import java.awt.*;

import java.awt.event.*;

import java.lang.Math.*;

import javax.swing.*;

public class LinePanel extends JPanel implements MouseListener,MouseMotionListener

{

private Point point1=null,point2=null;

private int flag=0;

public LinePanel()

{

super();

addMouseListener(this);

addMouseMotionListener(this);

setBackground(Color.white);

setPreferredSize(new Dimension(800,600));

repaint();

}

public void paintComponent (Graphics line){

// super.paintComponent(line);

line.setColor(Color.WHITE);

line.drawRect(0, 0, getWidth(), getHeight());

// super();

paintLine( line);

}

public void paintLine(Graphics line)

{

super.paintComponents(line);

line.setColor(Color.red);

if((point1!=null)&&(point2!=null))

{   String str1,str2;

str1=point1.getX()+","+point1.getY();

line.drawString(str1, point1.x, point1.y);

str2=point2.getX()+","+point2.getY();

line.drawString(str2, point2.x, point2.y);

//line.drawLine(point1.x, point1.y, point2.x,point2.y);

DDA(line,point1,point2);

}

}//paint ends

//DDA

public void DDA(Graphics line,Point point1,Point point2)

{

int x1,y1,x2,y2;

int dx,dy,epsl,k;

float x,y,xIncre,yIncre;

x1=point1.x;

y1=point1.y;

x2=point2.x;

y2=point2.y;

dx=x2-x1;

dy=y2-y1;

x=x1;

y=y1;

if(Math.abs(dx)>Math.abs(dy))

epsl=Math.abs(dx);

else

epsl=Math.abs(dy);

xIncre =(float)dx/(float)epsl;

yIncre =(float)dy/(float)epsl;

for(k=0;k<=epsl;k++)

{

line.fillOval((int)(x+0.5),(int)(y+0.5),3,3);

x=x+xIncre;

y=y+yIncre;

}

}//DDA ends

//实现监听器接口

public void mousePressed(MouseEvent e)

{

}

public void mouseDragged(MouseEvent event){}

public void mouseClicked(MouseEvent event)

{   flag++;

if(flag%2==0){

point1=event.getPoint();

repaint();

}

else

point2=event.getPoint();

//repaint();

}

public void mouseReleased(MouseEvent event)

{

point2=event.getPoint();

repaint();

}

public void mouseEntered(MouseEvent event){}

public void mouseExited(MouseEvent event){}

public void mouseMoved(MouseEvent event)

{

point2=event.getPoint();

//repaint();

}

}

一个驱动程序,

Line.java

import javax.swing.*;

public class Line

{

public Line()

{

}

public static void main(String args[])

{

JFrame frame =new JFrame("软件0804邓超 画线程序");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

LinePanel panel =new LinePanel();

frame.getContentPane().add(panel);

frame.pack();

frame.setVisible(true);

}

}

43ba143fc358e4b4165442a746631657.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值