Java小程序,用于创建图表 [英] java applet for creating graphs

查看:120
本文介绍了Java小程序,用于创建图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要建立在用户节点创建一个小程序,然后在它们之间建立的边缘。

I have to build an applet where the user creates nodes and then creates edges between them.

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

Then I can run my algorithm for processing on these nodes.

不过,我所面临的问题在创造这一点,并想知道是否存在一些很好的联系基本上告诉我如何处理并创建小程序。

However I am facing problems in creating this and would like to know if there exist some good links which essentially tells me how to approach and create the applet.

有创建小应用程序,但可以任你认为好的教程,他们看起来更进里面创建GUI(节点)和移动它们.....

There are good tutorials for creating applet but could any of you suggest where they look more into creating GUI(nodes) inside and moving them around.....

非常感谢...

推荐答案

您将需要一些东西来支持节点:

You will need something to hold the nodes:



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 < Node > 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);
            }
        }
    }
}

接下来就是实际的节点。

Next is the actual node.



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 < Node > 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 < Node > 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);

    }

}

这篇关于Java小程序,用于创建图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆