我有一个SparseMultigraph<节点,边缘> g其中edge有两个属性:
int weight;
ArrayList<Date> time;
我想根据重量和时间独立过滤图表。假设我使用名为weightSlider的JSlider(我在Netbeans和Swing中)根据重量开始过滤:
private void weightSliderMouseReleased(java.awt.event.MouseEvent evt) {
// filter network according to weight:
Predicate<Edge> edgeAboveWeight = new Predicate<Edge>() {
@Override
public boolean evaluate(Edge e) {
return e.getWeight() >= weightSlider.getValue();
}
};
EdgePredicateFilter<Node, Edge> edgePredicateFilter = new EdgePredicateFilter<>(edgeAboveWeight);
Graph<Node, Edge> transform = edgePredicateFilter.transform(g);
}
我的问题是:如何在可视化中推送新图形,保留节点位置?
由于这是我第一次尝试这样做,我可能错过了一种更简单的方法来实现我的目标,所以任何建议都非常受欢迎!
编辑:我成功实现了这个:
private void weightSliderMouseReleased(java.awt.event.MouseEvent evt) {
// filter network according to weight:
Predicate<Edge> edgeAboveWeight = new Predicate<Edge>() {
@Override
public boolean evaluate(Edge e) {
return e.getWeight() >= weightSlider.getValue();
}
};
EdgePredicateFilter<Node, Edge> edgePredicateFilter = new EdgePredicateFilter<>(edgeAboveWeight);
Graph<Node, Edge> transform = edgePredicateFilter.transform(g);
layout.setGraph(transform);
vv.validate();
vv.repaint();
}
仍然不知道它是否是最有效的方式,但它有效......
答案 0 :(得分:0)
如果您想过滤实际数据,那么您正在做的事情很好。
如果您想要做的只是过滤权重低于特定值的边缘,那么您可以直接告诉PluggableRendererContext:
这在PluggableRendererDemo中进行了演示。