有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用于创建图形的java小程序

我必须构建一个applet,用户在其中创建节点,然后在节点之间创建边

然后我可以在这些节点上运行我的算法进行处理

但是,我在创建这个程序时遇到了一些问题,我想知道是否存在一些好的链接,这些链接基本上告诉我如何处理和创建小程序

有一些很好的创建小程序的教程,但你们中的任何人都可以建议他们在哪里更深入地创建内部GUI(节点)并移动它们

非常感谢


共 (2) 个答案

  1. # 1 楼答案

    您可能想看看^{},它“具有可移动、可调整大小、由边连接的彩色节点。”

  2. # 2 楼答案

    您需要一些东西来保存节点:

    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JPanel;
    
    /**
     * Displays the nodes and connections in the graph
     * @author dvargo
     */
    public class DisplayPanel extends JPanel
    {
        /**
         * Holds the nodes in the graph
         */
        List &lt Node &gt theNodes = new ArrayList();
    
        public DisplayPanel()
        {
            setBackground(Color.white);
            repaint();
            setLayout(null);
    
            //will redraw and new lines in  the nodes automatically for you
            new Thread(new Runnable()
            {
                public void run()
                {
                    while (true)
                    {
                        drawConnections();
                        try
                        {
                            Thread.sleep(100);
                        }
                        catch (Exception e)
                        {
    
                        }
                    }
                }
            }).start();
        }
    
        /**
         * Adds a node to the graph
         * @param newNode The node to add
         * @param xPosition The x Position in the graph to add it
         * @param yPosition The y Position in the graph to add it
         */
        public void add(Node newNode, int xPosition, int yPosition)
        {
            add(newNode);
            newNode.setLocation(xPosition, yPosition);
            theNodes.add(newNode);
        }
    
        /**
         * Draw the connecting lines between nodes
         */
        public void drawConnections()
        {
            Graphics g = getGraphics();
            for (Node currNode : theNodes)
            {
                for (Node currConnectedNode : currNode.getConnections())
                {
                    g.drawLine(currNode.getLocation().x,
                               currNode.getLocation().y,
                               currConnectedNode.getLocation().x,
                               currConnectedNode.getLocation().y);
                }
            }
        }
    }
    
    

    接下来是实际节点

    
    import java.awt.Color;
    import java.awt.GridBagLayout;
    import java.awt.GridLayout;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    /**
     * Represents a node in the graph
     * @author dvargo
     */
    public class Node extends JPanel
    {
        /**
         * Holds all the nodes this node is connected too
         */
        List &lt Node &gt connections;
    
        /**
         * Displays the name of this node
         */
        JLabel nameLabel;
    
        /**
         * Reference to the panel that is displaying these nodes
         */
        DisplayPanel displayPanel;
    
        /**
         * Default constructor
         * @param nodeName The name of this node
         */
        public Node(final DisplayPanel displayPanel, String nodeName)
        {
            setBackground(Color.red);
            this.displayPanel = displayPanel;
            nameLabel = new JLabel(nodeName);
            nameLabel.setVisible(true);
            add(nameLabel);
            connections = new ArrayList();
    
            //makes the nodes draggable
            addMouseMotionListener(new MouseMotionAdapter()
            {
                public void mouseDragged(MouseEvent e)
                {
                    setLocation(e.getX() + getLocation().x,
                            e.getY() + getLocation().y);
                    displayPanel.repaint();
                }
            });
    
            setSize(50,50);
            repaint();
        }
    
        /**
         * Change the name of the node
         * @param newName The new name of the node
         */
        public void setName(String newName)
        {
            nameLabel.setText(newName);
        }
    
        /**
         * Get all the nodes this node is connected to
         * @return List of nodes this node is connected too
         */
        public List &lt Node &gt getConnections()
        {
            return connections;
        }
    
        /**
         * Sets a connection between this node and another node
         * @param newConnection The node to connect this node too
         */
        public void addConnection(Node newConnection)
        {
            connections.add(newConnection);
            //make sure the other node knows about this connection
            if(newConnection.getConnections().contains(this) == false)
            {
                newConnection.addConnection(this);
            }
        }
    
        /**
         * Removes a connection with another node
         * @param nodeToRemoveConnectionWith The nodes whose connection you could like
         * to break
         */
        public void removeConnection(Node nodeToRemoveConnectionWith)
        {
            connections.remove(nodeToRemoveConnectionWith);
        }
    
    }
    
    

    这是程序的运行

    
    import java.awt.GridLayout;
    import javax.swing.JFrame;
    
    /**
     * Runs the test program
     * @author dvargo
     */
    public class Main
    {
        public static void main(String [] args)
        {
            //build GUI
            JFrame mainWindow = new JFrame();
            mainWindow.setSize(800,800);
            mainWindow.setLayout(new GridLayout());
    
            DisplayPanel graphPanel = new DisplayPanel();
            mainWindow.add(graphPanel);
    
            mainWindow.setVisible(true);
            graphPanel.setVisible(true);
    
            //create some nodes
            Node a = new Node(graphPanel, "A");
            Node b = new Node(graphPanel, "B");
            Node c = new Node(graphPanel, "C");
            Node d = new Node(graphPanel, "D");
            Node e = new Node(graphPanel, "E");
            Node f = new Node(graphPanel, "F");
    
            a.setVisible(true);
            b.setVisible(true);
            c.setVisible(true);
            d.setVisible(true);
            e.setVisible(true);
            f.setVisible(true);
    
            //add them to their locations
            graphPanel.add(a,0,0);
            graphPanel.add(b,75,100);
            graphPanel.add(c,400,300);
            graphPanel.add(d,600,600);
            graphPanel.add(e,45,600);
            graphPanel.add(f,700,300);
    
            //set the connections
            a.addConnection(b);
            a.addConnection(f);
            b.addConnection(d);
            b.addConnection(c);
            b.addConnection(e);
            c.addConnection(f);
            e.addConnection(d);
    
        }
    
    }