当前位置: 技术问答>java相关
课程设计,马上要交了,我还没搞定,HELP !!!! (星期一发帖,明天晚结贴)急急急急急急急急急急急!!!
来源: 互联网 发布时间:2015-07-10
本文导语: 我的课程设计是设计一个画图程序,目前主要问题是对关于重画的问题搞不清: (1)当鼠标按下一键后拖动鼠标,画出一线,随着拖动,我要擦去先前的线,但是 如果这一线画在已经画好的线上,在擦去先前的线时...
我的课程设计是设计一个画图程序,目前主要问题是对关于重画的问题搞不清:
(1)当鼠标按下一键后拖动鼠标,画出一线,随着拖动,我要擦去先前的线,但是
如果这一线画在已经画好的线上,在擦去先前的线时会把相交点的像素同时擦掉,
同学说要记下先前所画的线,再重画。如何记下先前所画的线,请高手指点。
(2)还有重画问题,我的同学重载了paint()函数,但是《Java2 核心技术》第一卷中说在Swing中不可再用paint()来绘画,说如果改写了paint()函数,将会与JComponent.paint方法冲突,程序将不可正常运行,那我该怎么办。
(3)我搞不懂我的同学为什么要重载paint()函数,他说rpaint()函数会自动调用
paint()函数,那我直接调用rpaint()函数不就可以了么,关于这个问题希望详细点
既rpaint(),paint()还有一个update()的各个方法的用处,联系,及使用的地方都能解释一下
(4)当我的程序被其他窗口覆盖后,再现时,我所画的图形会被抹去,我该如何解决这个问题??
(1)当鼠标按下一键后拖动鼠标,画出一线,随着拖动,我要擦去先前的线,但是
如果这一线画在已经画好的线上,在擦去先前的线时会把相交点的像素同时擦掉,
同学说要记下先前所画的线,再重画。如何记下先前所画的线,请高手指点。
(2)还有重画问题,我的同学重载了paint()函数,但是《Java2 核心技术》第一卷中说在Swing中不可再用paint()来绘画,说如果改写了paint()函数,将会与JComponent.paint方法冲突,程序将不可正常运行,那我该怎么办。
(3)我搞不懂我的同学为什么要重载paint()函数,他说rpaint()函数会自动调用
paint()函数,那我直接调用rpaint()函数不就可以了么,关于这个问题希望详细点
既rpaint(),paint()还有一个update()的各个方法的用处,联系,及使用的地方都能解释一下
(4)当我的程序被其他窗口覆盖后,再现时,我所画的图形会被抹去,我该如何解决这个问题??
|
原代码帮你写了,够意思了吧
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class DrawLinePanel
{
public static void main(String[] args)
{
JFrame frame=new JFrame("--DrawLinePanel--");
Container con=frame.getContentPane();
MyPanel mp=new MyPanel();
MyMouseListener listener1=new MyMouseListener(mp);
MyMouseListener2 listener2=new MyMouseListener2(mp);
mp.addMouseListener(listener1);
mp.addMouseMotionListener(listener2);
con.add(mp,BorderLayout.CENTER);
frame.setBounds(30,30,300,300);
frame.show();
}
}
class MyPanel extends JPanel
{
Vector v=new Vector();
MyPoint point=new MyPoint();
boolean flag=false;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Enumeration enum=v.elements();
while(enum.hasMoreElements())
{
Object obj=enum.nextElement();
MyPoint p=(MyPoint)obj;
g.drawLine(p.sX,p.sY,p.eX,p.eY);
}
if(flag)
{
g.drawLine(point.sX,point.sY,point.eX,point.eY);
}
}
}
class MyMouseListener extends MouseAdapter
{
MyPanel dlp;
public MyMouseListener(MyPanel d)
{
this.dlp=d;
}
public void mousePressed(MouseEvent e)
{
dlp.point.sX=e.getX();
dlp.point.sY=e.getY();
}
public void mouseReleased(MouseEvent e)
{
if(dlp.flag)
{
dlp.v.add(new MyPoint(dlp.point.sX,dlp.point.sY,e.getX(),e.getY()));
dlp.flag=false;
dlp.point.reset();
dlp.repaint();
}
}
}
class MyMouseListener2 extends MouseMotionAdapter
{
MyPanel dlp=null;
public MyMouseListener2(MyPanel d)
{
this.dlp=d;
}
public void mouseDragged(MouseEvent e)
{
dlp.flag=true;
dlp.point.eX=e.getX();
dlp.point.eY=e.getY();
dlp.repaint();
}
}
class MyPoint
{
int sX=0;
int sY=0;
int eX=0;
int eY=0;
public MyPoint()
{
}
public MyPoint(int x,int y,int m,int n)
{
sX=x;sY=y;eX=m;eY=n;
}
void reset()
{
sX=0;
sY=0;
eX=0;
eY=0;
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class DrawLinePanel
{
public static void main(String[] args)
{
JFrame frame=new JFrame("--DrawLinePanel--");
Container con=frame.getContentPane();
MyPanel mp=new MyPanel();
MyMouseListener listener1=new MyMouseListener(mp);
MyMouseListener2 listener2=new MyMouseListener2(mp);
mp.addMouseListener(listener1);
mp.addMouseMotionListener(listener2);
con.add(mp,BorderLayout.CENTER);
frame.setBounds(30,30,300,300);
frame.show();
}
}
class MyPanel extends JPanel
{
Vector v=new Vector();
MyPoint point=new MyPoint();
boolean flag=false;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Enumeration enum=v.elements();
while(enum.hasMoreElements())
{
Object obj=enum.nextElement();
MyPoint p=(MyPoint)obj;
g.drawLine(p.sX,p.sY,p.eX,p.eY);
}
if(flag)
{
g.drawLine(point.sX,point.sY,point.eX,point.eY);
}
}
}
class MyMouseListener extends MouseAdapter
{
MyPanel dlp;
public MyMouseListener(MyPanel d)
{
this.dlp=d;
}
public void mousePressed(MouseEvent e)
{
dlp.point.sX=e.getX();
dlp.point.sY=e.getY();
}
public void mouseReleased(MouseEvent e)
{
if(dlp.flag)
{
dlp.v.add(new MyPoint(dlp.point.sX,dlp.point.sY,e.getX(),e.getY()));
dlp.flag=false;
dlp.point.reset();
dlp.repaint();
}
}
}
class MyMouseListener2 extends MouseMotionAdapter
{
MyPanel dlp=null;
public MyMouseListener2(MyPanel d)
{
this.dlp=d;
}
public void mouseDragged(MouseEvent e)
{
dlp.flag=true;
dlp.point.eX=e.getX();
dlp.point.eY=e.getY();
dlp.repaint();
}
}
class MyPoint
{
int sX=0;
int sY=0;
int eX=0;
int eY=0;
public MyPoint()
{
}
public MyPoint(int x,int y,int m,int n)
{
sX=x;sY=y;eX=m;eY=n;
}
void reset()
{
sX=0;
sY=0;
eX=0;
eY=0;
}
}
|
为了防止以前画的被清空
public void update(Graphics g)
{
paint(g);
}
public void update(Graphics g)
{
paint(g);
}
|
public void update(Graphics g)
{
paint(g);
}
应该可以解决你的4 个问题.你该好好看看java 2 图形设计 卷1 AWT,
就在开头部分
{
paint(g);
}
应该可以解决你的4 个问题.你该好好看看java 2 图形设计 卷1 AWT,
就在开头部分
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。