- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在 Java/Eclipse 中处理我的个人家谱,并且很高兴地遇到了关于图形表示的 prefuse。到目前为止,结果看起来对于我的数据库提要来说是足够的,但我仍然缺少使其更易于浏览的关键点。
第1点:顶点代表一个人或一个联合,我的图是从年长的成员指向年轻的成员。这通过边缘上的箭头反射(reflect)出来。然而,我只想将箭头按一个方向分组(如果您愿意,我正在尝试将几代人分组在一起),但我无法开始找到如何做到这一点。有关信息,我现在正在使用 NodeLinkTreeLayout。
第 2 点:除了图表本身之外,我的应用程序主窗口还包含第二个 JPanel,我想在其中修改/插入成员。所以我想向每个节点添加一个操作来调用第二个 JPanel 中的过程。到目前为止,我对如何从节点访问java类的研究还没有定论,似乎starter prefuse包中的所有示例都仅基于图形交互。
就在那里。您可能已经明白,我对 prefuse 很陌生,而且不是 Java 专业人士。因此,任何评论/指示/建议将不胜感激。我将添加一个屏幕和我的图形代码,以便您可以看到可以做得更好的地方。
感谢您的宝贵时间,并期待阅读您的见解。约兰
public class ShowGraph extends Display {
public static final String EDGES = "graph.edges";
public ShowGraph() {
super(new Visualization());
Graph mG = FamGraph.getGraph();
m_vis.addGraph("graph", mG);
m_vis.setInteractive("graphe.edges", null, false);
m_vis.setValue("graph.nodes", null, VisualItem.SHAPE, new Integer(Constants.SHAPE_ELLIPSE));
EdgeRenderer edgeR = new EdgeRenderer(Constants.EDGE_TYPE_CURVE, Constants.EDGE_ARROW_FORWARD);
LabelRenderer nodeR = new LabelRenderer("name");
nodeR.setRoundedCorner(8, 8);
nodeR.setHorizontalAlignment(Constants.LEFT);
DefaultRendererFactory drf = new DefaultRendererFactory();
drf.setDefaultRenderer(nodeR);
drf.setDefaultEdgeRenderer(edgeR);
m_vis.setRendererFactory(drf);
int[] palette = new int[] {
ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255)
};
DataColorAction nFill = new DataColorAction("graph.nodes", "label", Constants.NOMINAL, VisualItem.FILLCOLOR, palette);
ColorAction edges = new ColorAction("graph.edges", VisualItem.STROKECOLOR, ColorLib.gray(230));
ColorAction arrow = new ColorAction("graph.edges", VisualItem.FILLCOLOR, ColorLib.gray(230));
ColorAction text = new ColorAction("graph.nodes", VisualItem.TEXTCOLOR, ColorLib.gray(0));
ActionList color = new ActionList();
color.add(nFill);
color.add(edges);
color.add(arrow);
color.add(text);
ActionList layout = new ActionList(Activity.INFINITY);
//layout.add(new ForceDirectedLayout("graph", true));
layout.add(new NodeLinkTreeLayout("graph"));
layout.add(new RepaintAction());
m_vis.putAction("color", color);
m_vis.putAction("layout", layout);
setSize(1200, 900); //size controlled by parent jpanel - Comment out after tests
pan(360, 250);
setHighQuality(true);
addControlListener(new DragControl());
addControlListener(new PanControl());
addControlListener(new ZoomControl());
addControlListener(new ZoomToFitControl());
m_vis.run("color");
m_vis.run("layout");
}
public static void main(String[] args) {
Fulltree.fireUp();
ShowGraph mG = new ShowGraph();
JFrame frame = new JFrame("My family chart");
JPanel thePanel = new JPanel();
frame.getContentPane().add(thePanel);
thePanel.add(mG);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
最佳答案
因此,经过大量研究后,我正在回答自己的问题,以防有人遇到同样的问题:
对于第 1 点:ForceDirectedGraph 比 NodeLinkTreeLayout 好很多,尤其是当您的图表开始计算许多成员时。家族分支比世代相守更有意义。
至于第 2 点:与节点相关的操作是通过 ControlListener 实现的方法:
addControlListener(new ControlAdapter() {
public void itemClicked(VisualItem item, MouseEvent e) {
// anything you need here
// even filter right and left click for a sub menu
}
});
还有一件事:如果您向图表添加操作(搜索、谓词...),请确保在某个时候需要重建图表时停止它们。如果不这样做,您的操作将产生错误,您将花费数小时(如果不是数天)来调试。
关于java - 预熔 : Organizing edges for clarity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52039877/
有两个资源组织,但配置文件不同,配置文件将如何产生差异? 它与 r4.organization 有什么不同? @ResourceDef(name="Organization", profile="h
我想知道你们中有谁可以在同一天处理多个项目,而每个项目只花很短的时间。或者,如果您能够在同一小时内同时进行两个或三个或更多项目。我有很多事情要做,我开始想知道我怎么能做到这一点?我考虑过使用多个工作区
在我的 C 项目中,我有一个相当大的 utils.c 文件。它真的充满了许多不同种类的实用程序。只是在里面塞了不同的杂项功能,我觉得有点顽皮。例如,它有一些与低级内容相关的实用程序,例如小写()函数,
Closed. This question is off-topic 。它目前不接受答案。 想改善这个问题吗? Update the question 所以它是堆栈溢出的 on-topic。 9年前关
您如何为您的主文件夹中的代码项目组织您的个人工作区?您如何保持工作空间高效地同时处理多个项目? 我的问题最重要的方面在上面。除非您想解决该主题的特定子部分,否则您可以停止阅读。以下是有关工作空间组织的
将开发项目(例如 ASP.NET MVC 应用程序)拆分为多个项目的常见原因是什么?代码组织也可以通过文件夹来完成。多个项目往往会产生循环引用冲突,并通过管理/解决这些冲突来增加复杂性。 所以为什么?
我今天想知道人们在决定将一个源文件拆分成多个较小的文件之前通常在一个源文件中有多少代码。 就我个人而言,我倾向于保持我的文件相当小(在使用 C/C++ 时尤其是头文件)。也就是说,我通常在给定文件中只
我在文件夹组织方面遇到了一些困难,无法组织我正在处理的许多项目。我在 OS X 上工作 - 现在我使用 ~/Development/作为根文件夹,并且我有很多类型的项目。例如,我的 iPhone 应用
它与编程无关,但肯定与开发有关。 我需要一份人类口语列表(通常我们会在其他所有网站上看到可供选择), 在我们的一个项目中需要。如果还包含语言代码信息,并且在 中,那就太好了.txt 格式或任何其他可提
我在 Unix 系统上得到了这个文件路径: Folder1/Folder2/text.txt Folder1 仅包含Folder2,Folder2 包含该文件。所以文件test.txt的路径可以更短-
我想在我的网站上放置一个 Schema.org Organization 项。 我应该只将 JSON-LD 放在联系页面上,还是可以将它添加到网站的每个页面上?什么是最好的解决方案? 最佳答案 使用
您如何到达XCode Provisioning Organizer? 最佳答案 在Xcode中,从“窗口”菜单中选择“管理器”,您将获得一个窗口,该窗口为您提供有关设备和置备配置文件的各种信息。另外,
我正在设置一些用于网站开发的服务器。我希望它以一种相当标准的方式组织起来。你如何组织你的服务器来开发相对较小的网站,每个网站都有一点独特的代码? 我关注的一些细节包括(但不限于): 在开发过程中存在哪
我正在制作我自己的方便函数的小库,并且我正在尝试遵循 Phobos 的命名约定,但我真的很困惑。我怎么知道东西适合哪里? 例子: 如果有像 foldRight 这样的函数在 Phobos 中(基本上是
我在我的 Mac 上设置了多个开发者帐户,现在需要退出我的帐户才能访问其他人的资源。我在任何地方都找不到这样的选择。 知道如何退出 Xcode Organizer 吗? 最佳答案 在最新的 xcode
我目前正在尝试了解 AngularJS 涉及的所有概念,它非常大。我理解了大部分内容,但我仍然不知道如何组织你的应用程序。 让我们举个例子:在主页上,我有几个 block :每个 block 都是简单
查看 matplotlib 文档,我发现了这个示例: http://matplotlib.org/users/tight_layout_guide.html import matplotlib.pyp
我有 .hgt 文件,其中包含 (1201x1201) 个 16 位整数。我将此文件存储在最高级别为 5 的四叉树中。在级别 5 的叶子中,我有点数组列表: public class Point {
我正在为我的应用查看来自 Xcode Organizer 的崩溃报告。 我在下面的屏幕截图中看到了“+ 92”。什么意思? 最佳答案 这应该是方法内部发生错误的位置。如果您使用调试信息格式 dwarf
我可以拥有多个分发证书吗?我正在开发一个应用程序,但当前证书不是我创建的,而是用于另一个应用程序的。该应用程序和证书是由不再在这里的其他人完成的。 我下载了 vert,但在管理器中它告诉我,找不到有效
我是一名优秀的程序员,十分优秀!