У меня есть узел SparseMultigraph‹, Edge > g, где края имеют два атрибута:
int weight;
ArrayList<Date> time;
Я хотел бы отфильтровать график по весу и времени независимо. Скажем, я начинаю фильтровать по весу, используя JSlider с именем weightSlider (я в 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();
}
До сих пор не знаю, самый ли это эффективный способ, но он работает...