首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphStream 2.0 -拖动节点时的鼠标指针偏移

GraphStream 2.0 -拖动节点时的鼠标指针偏移
EN

Stack Overflow用户
提问于 2020-10-31 20:34:38
回答 2查看 193关注 0票数 0

我是GraphStream新手,我构建了一个最小的应用程序,并将GraphStream 2.0图形嵌入到Swing应用程序中。

在我的应用程序中,当我试图拖动节点时,鼠标指针显然偏移了大约一半的面板大小(无论是垂直还是水平)。

代码如下:

代码语言:javascript
复制
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动画,显示了这个问题(显示的应用程序是上面的代码):

EN

回答 2

Stack Overflow用户

发布于 2020-11-02 01:46:23

您不使用Graphstream 2.0。通用查看器J2DGraphRenderer:

代码语言:javascript
复制
System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer"); 

不再使用,它现在是(取决于您的UI):

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2020-11-05 08:22:29

好的,我想我理解你的问题。它与所描述的here相同。您用面板替换了框架的内容,因此视图面板无法获得正确的坐标。不过,这个问题在swing中不太常见。通过在函数的末尾执行以下操作,可以很容易地防止发生这种情况:

代码语言:javascript
复制
graphPanel.add(view);

JPanel content = new JPanel();
content.add(graphPanel);
return content;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64621745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档