我是GraphStream新手,我构建了一个最小的应用程序,并将GraphStream 2.0图形嵌入到Swing应用程序中。
在我的应用程序中,当我试图拖动节点时,鼠标指针显然偏移了大约一半的面板大小(无论是垂直还是水平)。
代码如下:
package gstest;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.graphstream.graph.Graph;
import org.graphstream.graph.Node;
import org.graphstream.graph.implementations.SingleGraph;
import org.graphstream.ui.layout.Layout;
import org.graphstream.ui.layout.springbox.implementations.SpringBox;
import org.graphstream.ui.swing_viewer.DefaultView;
import org.graphstream.ui.swing_viewer.SwingViewer;
import org.graphstream.ui.view.Viewer;
public class GSTest {
private static void createAndShowGUI() {
JFrame frame = new JFrame("GS Test");
frame.setMinimumSize(new Dimension(1000, 500));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new GridLayout(1, 1));
frame.getContentPane().add(makeMainPanel());
}
private static JPanel makeMainPanel() {
System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer");
Layout graphLayout = new SpringBox(false);
Graph graph = new SingleGraph("embedded");
SwingViewer viewer = new SwingViewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
JPanel graphPanel = new JPanel();
DefaultView view = (DefaultView) viewer.addDefaultView(false);
view.setPreferredSize(new Dimension(980, 460));
graph.addSink(graphLayout);
graphLayout.addAttributeSink(graph);
graph.setAttribute("ui.quality");
graph.setAttribute("ui.antialias");
for (int i = 0; i < 10; i++) {
Node n = graph.addNode(String.valueOf(i));
n.setAttribute("ui.style", "shape: box;");
n.setAttribute("ui.style", "size: 50px,30px;");
n.setAttribute("ui.style", "fill-color: blue;");
}
graphLayout.compute();
graphPanel.add(view);
return graphPanel;
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}下图显示了拖动中间矩形节点时的鼠标指针位置(以红色圈出)。

对这个问题的原因有什么想法吗?
编辑:
下面是一个简短的GIF动画,显示了这个问题(显示的应用程序是上面的代码):

发布于 2020-11-02 01:46:23
您不使用Graphstream 2.0。通用查看器J2DGraphRenderer:
System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); 不再使用,它现在是(取决于您的UI):
System.setProperty("org.graphstream.ui", "swing"); //For swing interface
System.setProperty("org.graphstream.ui", "javafx"); //For javafx interface你可以在官方website上找到更多信息。别忘了查看示例:https://github.com/graphstream/gs-ui-swing/tree/2.0/src-test/org/graphstream/ui/viewer_swing/test
发布于 2020-11-05 08:22:29
好的,我想我理解你的问题。它与所描述的here相同。您用面板替换了框架的内容,因此视图面板无法获得正确的坐标。不过,这个问题在swing中不太常见。通过在函数的末尾执行以下操作,可以很容易地防止发生这种情况:
graphPanel.add(view);
JPanel content = new JPanel();
content.add(graphPanel);
return content;https://stackoverflow.com/questions/64621745
复制相似问题