gpt4 book ai didi

java - 将 GraphStream 图表添加到我的自定义 jPanel 中

转载 作者:行者123 更新时间:2023-11-30 02:28:07 26 4
gpt4 key购买 nike

我正在研究 GraphStream 库。现在,当我运行程序时,它会为我的图形打开新窗口,并为我的图形打开单独的窗口。我尝试创建一个 JFrame 并将 JPanel 添加到 JFrame 中,毕竟我尝试将图形添加到我的 JPanel 中> 但它说图形对象不是组件。

这是我的代码:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import org.graphstream.graph.*;
import org.graphstream.graph.implementations.*;

public class GraphExplore {
static Connection conn2;
static String result, result2;
static JFrame frame;
static JPanel panel;

public static void main(String args[]) throws SQLException {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
showData();
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}

private static void showData() throws SQLException {

JFrame frame = new JFrame();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(30, 50, 1300, 600);
panel = new JPanel();
panel.setBorder(new EmptyBorder(5, 5, 5, 5));
panel.setLayout(new BorderLayout(0, 0));
frame.setContentPane(panel);

Graph graph = new SingleGraph("tutorial 1");
graph.setAutoCreate(true);
graph.setStrict(false);
graph.display();

// panel.add(graph);

try {
Class.forName("org.h2.Driver");
conn2 = DriverManager.getConnection("jdbc:h2:file:G:/hs_data/h2_db/test", "sa", "sa");

} catch (Exception e) {
e.printStackTrace();
}
Statement stmt2 = conn2.createStatement();
ResultSet rs2 = stmt2.executeQuery("SELECT ANUMBER,BNUMBER,DATETIME FROM TEST");
while (rs2.next()) {
result = rs2.getString("ANUMBER");
result2 = rs2.getString("BNUMBER");
graph.addNode(result);
graph.addNode(result2);
int i;
for (i = 0; i < 200; i++)
graph.addEdge("string" + i, result, result2);
// JOptionPane.showMessageDialog(null, i);
}

for (Node node : graph) {
node.addAttribute("ui.label", node.getId());
}

}

}

该程序为 jframe 和 graph 打开单独的窗口。我想将我的图表显示到我的 JFrameJPanel 中。知道如何做到这一点吗?我见过这个link ,但这并不能很好地解释我。

最佳答案

Graph Visualization: Advanced view: Integrating the viewer in your GUI所示,“您需要自己创建查看器。”另外,在构建框架之后调用 setVisible()

It shows error on frame.add(view).

看起来引用的教程有点过时了。 Viewer addDefaultView() 方法现在返回一个 ViewPanel可以将其添加到 Container 中。在下面的完整示例中,在具有 GridLayout 的封闭 JPanel 上设置边框,并将该 panel 添加到框架中。另请注意,需要通过覆盖 getPreferredSize() 为面板指定首选大小。 。调整窗口大小以查看效果。

image

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import org.graphstream.graph.*;
import org.graphstream.graph.implementations.*;
import org.graphstream.ui.swingViewer.*;
import org.graphstream.ui.view.*;

/** @see https://stackoverflow.com/a/45055683/230513 */
public class GraphSwing {

public static void main(String args[]) {
EventQueue.invokeLater(new GraphSwing()::display);
}

private void display() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout()){
@Override
public Dimension getPreferredSize() {
return new Dimension(640, 480);
}
};
panel.setBorder(BorderFactory.createLineBorder(Color.blue, 5));
Graph graph = new SingleGraph("Tutorial", false, true);
graph.addEdge("AB", "A", "B");
Node a = graph.getNode("A");
a.setAttribute("xy", 1, 1);
Node b = graph.getNode("B");
b.setAttribute("xy", -1, -1);
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
ViewPanel viewPanel = viewer.addDefaultView(false);
panel.add(viewPanel);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

关于java - 将 GraphStream 图表添加到我的自定义 jPanel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45050654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com