当前位置: 首页 > 知识库问答 >
问题:

Graphstream在jframe内部很小

充子航
2023-03-14

我试图改变graphstream中图形的大小,但它失败了,甚至变得很小。

这是我的代码。起初,我无法设置窗口标题,所以我唯一的选择是创建一个JFRAMe并将视图嵌入其中。因此,如果有一个选项可以设置图表的标题,我将不胜感激。

这是我的代码。

public class Clicks implements ViewerListener {
    protected boolean loop = true;

    public static void main(String args[]) throws InterruptedException {
        new Clicks();
    }
    public Clicks() throws InterruptedException {
             System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer");
        // We do as usual to display a graph. This
        // connect the graph outputs to the viewer.
        // The viewer is a sink of the graph.
        Graph graph = new MultiGraph("Clicks");
                graph.addAttribute("ui.stylesheet", "node#D{ fill-color:red; }node{ stroke-mode: plain;size:20;text-size:30;stroke-color:#333333;text-background-color:#FFF;text-background-mode:plain;text-alignment:above;}");




                Node D = graph.addNode("D");
                Node J = graph.addNode("J");
        Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
                View view = viewer.addDefaultView(false);


                JFrame frame = new JFrame("title");
                frame.setSize(1000, 1000);
                frame.add((Component) view);
                frame.pack();
                frame.setVisible(true);

                ViewerPipe fromViewer = viewer.newViewerPipe();
        fromViewer.addViewerListener(this);
        fromViewer.addSink(graph);



        while(loop) {
            fromViewer.blockingPump();// or fromViewer.blockingPump(); in the nightly builds
        }
    }

    public void viewClosed(String id) {
        loop = false;
    }

    public void buttonPushed(String id) {

    }

    public void buttonReleased(String id) {
        System.out.println("Button released on node "+id);
    }
}

编辑

即使应用了提议的改变,它也不起作用。

public Clicks()抛出中断异常{System.setProperty(“org.graphstream.ui.renderer”,“org.graph.ui.j2dviewer.J2DGraphRenderer”);//我们像往常一样显示图形。这//将图形输出连接到查看器//查看器是图形的接收器。图形图形=新的多重图(“Clicks”);图形添加属性(“ui.stylesheet”,“node#D{fill color:red;}节点{笔划模式:普通;大小:20;文本大小:30;笔划颜色:333333;文本背景颜色:FFF;文本背景模式:普通,文本对齐:上方;}");

        Node D = graph.addNode("D");
        Node J = graph.addNode("J");
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
        View view = viewer.addDefaultView(false);


        JFrame frame = new JFrame("title");
        frame.add((Component) view);


        ViewerPipe fromViewer = viewer.newViewerPipe();
fromViewer.addViewerListener(this);
fromViewer.addSink(graph);

        frame.pack();
        frame.setVisible(true);


while(loop) {
    fromViewer.blockingPump();// or fromViewer.blockingPump(); in the nightly builds
}

}

当我运行它时,窗口大小很小,我必须手动调整它的大小。

有什么问题?

共有1个答案

步浩壤
2023-03-14

当我运行它时,窗口大小很小,我必须手动调整它的大小。

frame.pack();
frame.setVisible(true);

ViewerPipe fromViewer = viewer.newViewerPipe();
fromViewer.addViewerListener(this);
fromViewer.addSink(graph);

在使框架可见之前,需要将所有组件添加到框架中。

所以代码应该是:

ViewerPipe fromViewer = viewer.newViewerPipe();
fromViewer.addViewerListener(this);
fromViewer.addSink(graph);

frame.pack();
frame.setVisible(true);

也不需要以下行:

//frame.setSize(1000, 1000);

< code>pack()方法将根据添加的所有组件的首选大小重置大小。

 类似资料:
  • 我的包含一个嵌入的单个图形(Graphstream),当我尝试在调用Thread的循环中更新它时会冻结。我尝试在独立图形(显示在它自己的)上使用相同的更新,它按预期工作。 我在JFrame中嵌入了一个图,如下所示(AppGraph.java): 然后在JFrame类中调用它,如下所示: 上有用于不同搜索算法(如BFS)的按钮。在执行这些算法期间,以固定的时间间隔对遍历的边着色,以创建一种动画效果,

  • GraphStream是一个Java类库用于管理动态图形。它由于一个面向对象的API组成,能够以简便、快速的方式在一张图形中添加边缘和节点。并它们让进行演变。

  • 我写的程序有问题。我把你放在上下文中... 我尝试在这个程序中实现:MVC模式,因此,基本上,我将这些类分离在不同的包中。 我有一个:视图和控制器包,在视图包中我有:UserInterface类,它扩展了JFrame,并包含:JMenuBar、jMenus和JMenuItem。。。 你可以用JMenuItem添加标签,这个JMenuItem,获取并添加一个: ActionListener,这个ac

  • 问题内容: 谁能解释我为什么不应该使用在窗口内直接绘制的方法,而应该在内部使用方法? 提前致谢。 问题答案: 三大原因… 顶层容器不是双缓冲的,在重新绘制框架时会导致闪烁,是的,您可以实现自己的双缓冲,但是… 在框架内绘画不会考虑框架边框,这意味着可以在框架边框下绘画。边框也取决于平台/外观,这意味着尺寸会发生变化 对于Swing窗口,窗口上已经存在一些组件,这意味着它们在大多数情况下都被覆盖(或

  • 问题内容: 使用Swing制作应用程序时,我已经看到人们做两件事之一来创建JFrame。哪种方法更好,为什么呢? 我是Java和编程的初学者。我唯一的学习资源是书籍,YouTube和Stack Overflow。 和 问题答案: 避免扩展JFrame,因为它将JGUI与你的GUI联系在一起。相反,如果你专注于创建JPanels,那么你可以自由地在需要的任何地方使用这些JPanels-在JFrame

  • 我在使用 Netbeans GUI 添加的 JPanel 中绘制形状时遇到问题。现在,我不知道在哪里添加代码以在该 JPanel 内部绘制圆,以及如何在现在空置的 JPanel 中插入和调用它,等待绘制此形状。我已经将目标 JPanel 设置为流布局。Netbeans 设计器创建了一个大类,其中我用这个 JPanel 拥有整个框架,我想把它保留在其中,因为我无法以任何其他方式添加它,因为设计器不允