Java GraphML节点着色预使用

Java GraphML节点着色预使用,java,user-interface,prefuse,graphml,Java,User Interface,Prefuse,Graphml,我有一个预使用应用程序,它加载GraphML文件,其中节点具有“Color”字符串属性。即 <node id="1"> <data key="Color">Green</data> <node> 这种方法的最大问题(最重要的是不雅观)是,当用户指定的唯一颜色少于三种时,它就失败了。如果指定了两种颜色,prefuse将使用颜色数组的第一个和最后一个元素。如果一个,第一个。嗯 我的另一个解决方案是手动设置每个节点的颜色 // Iterate ov

我有一个预使用应用程序,它加载GraphML文件,其中节点具有“Color”字符串属性。即

<node id="1">
  <data key="Color">Green</data>
<node>
这种方法的最大问题(最重要的是不雅观)是,当用户指定的唯一颜色少于三种时,它就失败了。如果指定了两种颜色,prefuse将使用颜色数组的第一个和最后一个元素。如果一个,第一个。嗯

我的另一个解决方案是手动设置每个节点的颜色

// Iterate over VisualItems in Visualization vis
Iterator<VisualItem> v_it = vis.items("graph.nodes");
while(v_it.hasNext()) {
    VisualItem item = v_it.next();
    String type = item.getString("Color");
    for(int i=0; i < typeMap.length; i++) {
        if(type.equalsIgnoreCase(typeMap[i])) {
            item.setFillColor(fill[i]);
            item.setEndFillColor(fill[i]);
            break;
        }
    }
}
vis.repaint();
//在Visualization vis中迭代VisualItems
迭代器v_it=vis.items(“graph.nodes”);
while(v_it.hasNext()){
VisualItem item=v_it.next();
字符串类型=item.getString(“颜色”);
for(int i=0;i
这适用于任何数量的颜色,但随机混乱。我认为prefuse在自己的线程上处理这些方法,由于某种原因,线程运行缓慢。对于较小的网络,我可以设置固定的等待时间(我还没有找到要使用的Thread.join()方法)。但是,对于大型网络来说,这失败得很可笑(读:使我的计算机崩溃)


好了,就这样。对于本应是琐碎任务的不必要的大量时间投入。有人做到了吗?有简单的方法吗?请告诉我,我想得太多了。

我对prefuse的这些经历非常了解:-/

第一种方法是正确的,但指定了错误的数据类型。颜色是一个
标称变量

DataColorAction color = new DataColorAction("graph.nodes", "Color",
    Constants.NOMINAL, VisualItem.FILLCOLOR, fillArray);
ColorNumber
字段不是必需的

你关于第二种方法的结论是正确的。prefuse在单独的线程中运行其
ActionList
。因此,不应手动设置视觉特性


如果需要更细粒度的代码,可以扩展
DataColorAction

我非常了解prefuse的这些经历:-/

第一种方法是正确的,但指定了错误的数据类型。颜色是一个
标称变量

DataColorAction color = new DataColorAction("graph.nodes", "Color",
    Constants.NOMINAL, VisualItem.FILLCOLOR, fillArray);
ColorNumber
字段不是必需的

你关于第二种方法的结论是正确的。prefuse在单独的线程中运行其
ActionList
。因此,不应手动设置视觉特性


如果需要更细粒度的代码,可以扩展
DataColorAction

扩展DataColorAction是我最终采用的解决方案。此外,我需要更好地跟进StackOverflow问题。扩展DataColorAction是我最终采用的解决方案。此外,我需要更好地跟进StackOverflow问题。
DataColorAction color = new DataColorAction("graph.nodes", "Color",
    Constants.NOMINAL, VisualItem.FILLCOLOR, fillArray);