我有一个SparseMultigraph <节点,边> g,其中边具有两个属性:
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();
}
仍然不知道这是否是最有效的方法,但是它可以工作...
如果您想过滤实际数据,那么您正在做的就很好。
如果您只想过滤权重低于某个值的边缘,就可以直接告诉PluggableRendererContext:
在PluggableRendererDemo中对此进行了演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句