各位大侠,我正在做一个网络拓扑设计的软件,想用java swing实现。
问题是,如何用鼠标拖着一个图片在panel到处走?同时,我还希望两个图片之间的连接线也能根着相应地变化,请问,这些如何实现。
着急中,请各位大侠务必帮忙解决,不胜感激!

解决方案 »

  1.   

    你是从事电信行业开发的吗?建议你考虑 ILOG 或者 SERVA.
    http://www.servasoft.com
      

  2.   

    你要的是不是这个效果:
    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Cursor;
    import java.awt.Event;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.Point;public class ImageViewer extends Applet{
        private String msg;
        private int width;
        private int height;
        private Image offI;
        private Image img;
        private Graphics offG;
        private MediaTracker imageTracker;
        private Point pointInitial;
        private int posImageX;
        private int posImageY;
        int tailleImageX;
        int tailleImageY;
        int positionInitialeX;
        int positionInitialeY;
        Object frame;    public void init(){
             String s = "img\\4.jpg";//imagePath
             img = getImage(getCodeBase(), s);
            setBackground(new Color(255, 200, 50));
            imageTracker = new MediaTracker(this);
            imageTracker.addImage(img, 0);
            try {
                imageTracker.waitForID(0);
            }
            catch(InterruptedException _ex) { }
            tailleImageX = img.getWidth(this);
            tailleImageY = img.getHeight(this);
            System.out.println(tailleImageX + "," + tailleImageY);
            try {
                Integer integer = new Integer(getParameter("width"));
                width = integer.intValue();
            }
            catch(Exception _ex){
                width = 200;
            }
            try {
                Integer integer1 = new Integer(getParameter("height"));
                height = integer1.intValue();
            }
            catch(Exception _ex){
                height = 200;
            }
            offI = createImage(tailleImageX, tailleImageY);
            offG = offI.getGraphics();
            for(frame = getParent(); !(frame instanceof Frame); frame = ((Component)frame).getParent());
            repaint();
        }    public void start(){
            offG.drawImage(img, 0, 0, this);
            repaint();
        }    public final boolean mouseDown(Event event, int i, int j){
            pointInitial = new Point(i, j);
            ((Frame)frame).setCursor(new Cursor(12));
            positionInitialeX = posImageX;
            positionInitialeY = posImageY;
            return true;
        }    public final boolean mouseDrag(Event event, int i, int j){
            posImageX = positionInitialeX - (pointInitial.x - i);
            posImageY = positionInitialeY - (pointInitial.y - j);
            repaint();
            return true;
        }    public final boolean mouseUp(Event event, int i, int j){
            ((Frame)frame).setCursor(new Cursor(0));
            return true;
        }    public final void update(Graphics g){
            paint(g);
        }    public final void paint(Graphics g){
            if(posImageX < width - tailleImageX)
                posImageX = width - tailleImageX;
            if(posImageY < height - tailleImageY)
                posImageY = height - tailleImageY;
            if(posImageX > 0)
                posImageX = 0;
            if(posImageY > 0)
                posImageY = 0;
            g.drawImage(offI, posImageX, posImageY, this);
        }    public ImageViewer(){
            pointInitial = new Point(0, 0);
            tailleImageX = 540;
            tailleImageY = 380;
        }
        
      }
      

  3.   

    bovy(蓝狐狸):
       如果应用在Applet中,应该选用哪一个?
       还有就是他们的收费情况,商业应用也是免费的么?
       谢谢!
      

  4.   

    同时,我的想法是,不仅要能在Applet中显示网络拓扑结构,还要能够在线编辑,如网络元素的增删改等。请问应该解决?
    看了一下servasoft,感觉好像能支持web在线显示,但是Web在线编辑,好像要做的工作很多。