Я использую библиотеку graphstream для создания приложения.Когда я увеличиваю график, используя view.getCamera (). SetPercent (), некоторые узлы будут скрыты, до сих пор проблем не было.Моя проблема в том, что когда буксирные узлы, соединенные ребром, скрываются после масштабирования графика, его ребро также будет скрыто.Я хочу сохранить этот край таким, каким он был, даже если его конечности скрыты.Я попробовал этот код, чтобы объяснить мою проблему:
public class Zoom {
public static void main(String[] args) {
//create a simple graph
Graph graph = new SingleGraph("Zoom");
graph.setAttribute("ui.stylesheet", "node{size:30px; fill-color:red; text-size:20;}");
Node[] nodes = new Node[2];
for (int i = 0; i < 2; i++) {
nodes[i] = graph.addNode("" + i);
nodes[i].setAttribute("ui.label", "" + i);
}
graph.addEdge("01", "0", "1");
//create the viewer
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
viewer.enableAutoLayout();
ViewPanel view_panel = viewer.addDefaultView(false);
//create the main frame
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout());
frame.setLocation(new Point(200, 200));
frame.setPreferredSize(new Dimension(600, 400));
//the function responsible of zooming
frame.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent mwe) {
double scaleZoom;
if (Event.ALT_MASK != 0) {
scaleZoom = viewer.getDefaultView().getCamera().getViewPercent();
if (mwe.getWheelRotation() > 0) {
scaleZoom += 0.05;
viewer.getDefaultView().getCamera().setViewPercent(scaleZoom);
} else if (mwe.getWheelRotation() < 0) {
if (scaleZoom > 0.05) {
scaleZoom -= 0.05;
viewer.getDefaultView().getCamera().setViewPercent(scaleZoom);
}
}
}
}
});
view_panel.setPreferredSize(new Dimension(frame.getPreferredSize()));
frame.add(view_panel);
frame.pack();
frame.setVisible(true);
}
}
Любая помощь, пожалуйста.