当前位置: 首页 > 知识库问答 >
问题:

如何绘制表示连接节点图的树?

蔚桐
2023-03-14

我想在Java GUI中显示一棵树,但我不知道如何。该树表示已连接节点的图形,如下所示:

我应该说我有自己的树类:

public class BinaryTree  
{
private BinaryNode root;
public BinaryTree( )
{
    root = null;
}

public BinaryTree( Object rootItem )
{
    root = new BinaryNode( rootItem, null, null );
}

public BinaryTree( Object rootItem,BinaryNode a,BinaryNode b )
{
    root = new BinaryNode( rootItem, a, b );
}

public int leavesCount(){
    return BinaryNode.leavesCount(root);
}

public boolean equal(BinaryTree a,BinaryTree b){
    return BinaryNode.equal(a.root, b.root);

}

public void printPreOrder( )
{
    if( root != null )
        root.printPreOrder( );
}

public void printInOrder( )
{
    if( root != null )
       root.printInOrder( );
}

public void printPostOrder( )
{
    if( root != null )
       root.printPostOrder( );
}

public void makeEmpty( )
{
    root = null;
}


public boolean isEmpty( )
{
    return root == null;
}


public void merge( Object rootItem, BinaryTree t1, BinaryTree t2 ) throws MergeAbrot
{
    if( t1.root == t2.root && t1.root != null )
    {
         throw new MergeAbrot("MergeAbrot");

    }

     root=new BinaryNode( rootItem, t1.root, t2.root );

    if( this != t1 )
        t1.root = null;
    if( this != t2 )
       t2.root = null;
}

public int size( )
{
    return BinaryNode.size( root );
}

public int height( )
{
    return BinaryNode.height( root );
}

}

我只想画那棵树。我该怎么做?

共有3个答案

宗安宁
2023-03-14

我想说也值得去看看阿贝戈的树屋。它本质上是一种树布局算法,因此可以与任何绘图机制一起使用,但它还包含一些在SVG和Swing中绘制图形的演示/示例

燕鸿波
2023-03-14

我能想到的最简单的方法是编写一个扩展< code>JPanel的类,并覆盖它的< code>paintComponent()方法。在paint方法中,您可以遍历树并绘制每个节点。这里有一个简短的例子:

import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JPanelTest extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        // Draw Tree Here
        g.drawOval(5, 5, 25, 25);
    }

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        jFrame.add(new JPanelTest());
        jFrame.setSize(500, 500);
        jFrame.setVisible(true);
    }

}

尝试一下画这棵树,如果你不能弄清楚,把你在问题中尝试过的东西贴出来。

燕玉堂
2023-03-14

您可以考虑以下任何一项:

> 这里引用的JHotDraw是用于创建自定义图形编辑器的元库。

预注可视化库,此处和此处进行了说明。

Batik,实现 SVG 渲染。

JGraph演示和用户手册。

图表流,图示如下。

JFreeChart XYBubbleRenderer

这里建议使用JTree,带有自定义TreeIcon

自定义渲染器,x基于树宽度的一小部分,y基于递归级别。

一个简单的图形编辑器,如< code>draw。GraphPanel,图示如下。

 类似资料:
  • 我对用Python制作网络图是完全陌生的。我了解到库可以用于在Python中绘制网络图。 我有11个节点。Node1、Node2、...、Node11。我想将它们绘制在四个不同的级别。Node1在1级。Node2和Node3在2级。Node4到Node7在3级,Node8到Node11在4级。 我使用创建了一个非常简单的1级和2级之间的基本网络图 为了在级别2和级别3之间绘制,我想询问用户,节点2

  • 问题内容: 我想将图像列表读入Python / Matplotlib,然后在图形中绘制此图像而不是其他标记(如点)。我曾尝试使用imshow,但未成功,因为我无法将图像移到另一个位置并适当缩放。也许有人有一个好主意:) 问题答案: 有两种方法可以做到这一点。 根据希望的位置,使用带有kwarg集的图像进行绘制。 在里面使用。 第一种方法最容易理解,但是第二种方法具有很大的优势。k注解框方法将使图像

  • 问题内容: 我试过了 但它产生错误: 任何的想法? 问题答案: 好吧,错误消息很清楚:不是实体。如果要映射基本元素的集合,请使用批注(来自Hibernate)或批注(来自JPA 2.0)。 因此,假设您使用的是Hibernate Annotations 3.4,请尝试以下操作: 或者,使用泛型时: 如果您使用的是Hibernate Annotations 3.5+,则更喜欢JPA 2.0注释: 或

  • 我尝试使用combinedchart,但结果是这样的:

  • 我正在寻找一个算法来检查任何有效的连接(最短或最长)之间的两个任意节点在一个图上。 我的图被固定为一个具有逻辑(x,y)坐标的网格,具有北/南/东/西连接,但是节点可以随机移除,所以你不能假设取离目标最近的coords的边总是会让你到达那里。 代码是用Python编写的。数据结构是每个节点(对象)都有一个连接节点的列表。列表元素是对象引用,因此我们可以递归地搜索该节点的连接节点列表,如下所示: 尽

  • 我正在使用igraph包绘制如下网络,但我希望能够显示图中的所有节点(作者),即使是那些没有与其他人联合论文的作者。这可能吗? 我想显示网络,然后将“KS”作者显示为图中的单个节点。