用JAVA画个简单的拓扑图

来源:互联网 发布:西部世界什么意思 知乎 编辑:程序博客网 时间:2024/06/05 20:11

https://zhidao.baidu.com/question/151408808.html?qbl=relate_question_0&word=%D3%C3Java%BB%E6%D6%C6%BD%DA%B5%E3%D6%AE%BC%E4%B5%C4%CD%BC


问题描述:

用JAVA帮我画个简单的拓扑图,图形如图所示,要用java实现,麻烦写出代码,采用的话追加高分,谢谢
如果可以的话,帮我在图上随机生成参数,链路的参数(1~10),节点上2个参数,也是1~10
我要用这些参数来计算,最后生成一条路径。
生成的路径最好是动态生成的。
能做多少是多少,必有重谢!
Q-5369248

那个图我自己会画了,请教一下,在Eclipse里怎么关联两个JAVA程序?先显示这个图,然后显示另外一个有路径的图(在此图基础上有一段路径加粗)。在同一个窗口或者不在都行



解决方法:

如果需要的话留个邮箱,我把程序发给你。


晕~~我索性写个最短路径的给你吧,等着~

import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.Random;class Diagram_Panel extends JPanel {        private Rectangle btnNew = new Rectangle(10, 10, 82, 22);        private int state;        private Random rnd = new Random();        private int[][] vertices;        private int[][] params;        private int[][] linked;        public Diagram_Panel () {                setBackground(Color.WHITE);                addMouseMotionListener(new MouseMotionAdapter() {                        @Override public void mouseMoved (MouseEvent me) {                                if (me.getX() >= btnNew.x && me.getX() <= btnNew.x + btnNew.width && me.getY() >= btnNew.y && me.getY() <= btnNew.y + btnNew.height) {                                        if (state != 1) {                                                state = 1;                                                repaint();                                        }                                } else {                                        if (state != 0) {                                                state = 0;                                                repaint();                                        }                                }                        }                        @Override public void mouseDragged (MouseEvent me) {                                if (state == 2 || state == 1) {                                        if (me.getX() >= btnNew.x && me.getX() <= btnNew.x + btnNew.width && me.getY() >= btnNew.y && me.getY() <= btnNew.y + btnNew.height)                                                if (state != 2)                                                        state = 2;                                        else                                                if (state != 1)                                                        state = 1;                                        repaint();                                }                        }                });                addMouseListener(new MouseAdapter() {                        @Override public void mousePressed (MouseEvent me) {                                if (state == 1) {                                        state = 2;                                        newGraph();                                }                        }                        @Override public void mouseReleased (MouseEvent me) {                                if (me.getX() >= btnNew.x && me.getX() <= btnNew.x + btnNew.width && me.getY() >= btnNew.y && me.getY() <= btnNew.y + btnNew.height)                                        state = 1;                                else                                        state = 0;                                repaint();                        }                });        }        private void mouseOver (Rectangle btn, String str, Graphics g) {                Color tmp = g.getColor();                g.setColor(Color.GRAY);                g.fillRect(btn.x, btn.y, btn.width+1, btn.height+1);                g.setColor(Color.WHITE);                g.drawLine(btn.x, btn.y, btn.x, btn.y+btn.height-1);                g.drawLine(btn.x, btn.y, btn.x+btn.width-1, btn.y);                g.drawString(str, btn.x+10, btn.y+15);                g.setColor(tmp);        }        private void mouseOff (Rectangle btn, String str, Graphics g) {                Color tmp = g.getColor();                g.setColor(Color.BLACK);                g.drawRect(btn.x+1, btn.y+1, btn.width, btn.height);                g.setColor(Color.WHITE);                g.fillRect(btn.x, btn.y, btn.width, btn.height);                g.setColor(Color.BLACK);                g.drawRect(btn.x, btn.y, btn.width, btn.height);                g.drawString(str, btn.x+10, btn.y+15);                g.setColor(tmp);        }        private void mouseDown (Rectangle btn, String str, Graphics g) {                Color tmp = g.getColor();                g.setColor(Color.DARK_GRAY);                g.fillRect(btn.x+1, btn.y+1, btn.width+1, btn.height+1);                g.setColor(Color.WHITE);                g.drawLine(btn.x+2, btn.y+btn.height+1, btn.x+btn.width+1, btn.y+btn.height+1);                g.drawLine(btn.x+btn.width+1, btn.y+2, btn.x+btn.width+1, btn.y+btn.height+1);                g.drawString(str, btn.x+11, btn.y+16);                g.setColor(tmp);        }        @Override public void paint (Graphics g) {                super.paint(g);                switch (state) {                        case 0:                                mouseOff(btnNew, "New Graph", g);                                break;                        case 1:                                mouseOver(btnNew, "New Graph", g);                                break;                        case 2:                                mouseDown(btnNew, "New Graph", g);                                break;                }                for (int i=0; i<vertices.length; i++)                        for (int j=i+1; j<vertices.length; j++)                                if (linked[i][j] > 0) {                                        g.drawLine(vertices[i][0]+5, vertices[i][1]+5, vertices[j][0]+5, vertices[j][1]+5);                                        g.drawString(linked[i][j]+"", (vertices[i][0]+vertices[j][0])/2, (vertices[i][1]+vertices[j][1])/2);                                }                g.setColor(Color.WHITE);                for (int i=0; i<vertices.length; i++)                        g.fillOval(vertices[i][0], vertices[i][1], 10, 10);                g.setColor(Color.BLACK);                for (int i=0; i<vertices.length; i++) {                        g.drawOval(vertices[i][0], vertices[i][1], 10, 10);                        g.drawString((char)(i+'A') + "(" + linked[i][0] + "," + linked[i][1] + ")", vertices[i][0]-5, vertices[i][1]-5);                }        }        public void newGraph () {                vertices = new int[rnd.nextInt(5)+3][2];                params = new int[vertices.length][2];                linked = new int[vertices.length][vertices.length];                for (int i=0; i<vertices.length; i++) {                        while (true) {                                vertices[i][0] = rnd.nextInt((int)(getWidth()*0.6)) + 100;                                vertices[i][1] = rnd.nextInt((int)(getHeight()*0.6)) + btnNew.height + 100;                                int j = 0;                                for (; j<i; j++)                                        if (Math.abs(vertices[j][0] - vertices[i][0]) < 50 && Math.abs(vertices[j][1] - vertices[i][1]) < 50)                                                break;                                if (j == i)                                        break;                        }                }                for (int i=0; i<vertices.length; i++)                        for (int j=i+1; j<vertices.length; j++)                                if (rnd.nextInt(100) > 20)                                        linked[i][j] = rnd.nextInt(10)+1;                for (int i=0; i<vertices.length; i++) {                        linked[i][0] = rnd.nextInt(10)+1;                        linked[i][1] = rnd.nextInt(10)+1;                }                repaint();        }}public class Diagram extends JFrame {        public Diagram () {                super("Diagram -- shuangwhywhy");                setSize(600, 500);                setLocationRelativeTo(null);                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                Diagram_Panel dp = new Diagram_Panel();                dp.setBackground(Color.WHITE);                setContentPane(dp);                setVisible(true);                dp.newGraph();        }        public static void main (String args[]) {                new Diagram();        }}

运行结果截图为:





0 0
原创粉丝点击