0

我正在使用 GraphStream 库处理 Java。目前,一切正常,但是当我尝试运行程序时,图形开始在我面前渲染,然后在渲染后停止,当我尝试移动任何节点时,它又开始渲染,这很烦人。

我在这里添加了一个示例视频,让你们知道我面临的问题。

我想在完成渲染后显示图表,并且通过移动节点它不应该再次开始渲染。

这是我的代码:

public class GraphExplore {
    static Connection conn2;
    static String result, result2;
    static int totalRows, i = 0;
    static double zoomLevel = 1.0;
    static JTextField Anumber;
    static JButton submit;

    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("GRAPH");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        @SuppressWarnings("serial")
        JPanel panel = new JPanel(new GridLayout()) {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(1300, 600);
            }
        };
        panel.setBorder(BorderFactory.createLineBorder(Color.blue, 5));

        final Graph graph = new SingleGraph("Tutorial", false, true);
        Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
        Anumber = new JTextField(15);
        submit = new JButton("Show Graph");
        Font bigFont = Anumber.getFont().deriveFont(Font.PLAIN, 18f);
        Anumber.setFont(bigFont);
        final ViewPanel viewPanel = viewer.addDefaultView(false);
        viewer.enableAutoLayout();
        viewPanel.add(Anumber);
        viewPanel.add(submit);
        panel.add(viewPanel);
        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        submit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    String Anum = Anumber.getText();
                    Class.forName("org.h2.Driver");
                    conn2 = DriverManager.getConnection("jdbc:h2:file:G:/hs_data/h2_db/test", "sa", "sa");
                    Statement stmt2 = conn2.createStatement();
                    if (Anum.isEmpty()) {
                        JOptionPane.showMessageDialog(null, "Please enter Anumber");
                    } else {
                        ResultSet rs2 = stmt2.executeQuery(
                                "SELECT ANUMBER,BNUMBER FROM CDR WHERE ANUMBER = '" + Anum + "' ORDER BY ANUMBER");
                        while (rs2.next()) {
                            result = rs2.getString("ANUMBER");
                            result2 = rs2.getString("BNUMBER");
                            graph.addNode(result);
                            graph.addNode(result2);
                            i++;
                            graph.addEdge("string" + i, result, result2);
                            graph.setAutoCreate(true);
                            graph.setStrict(false);
                        }
                    }
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        });

        viewPanel.addMouseWheelListener(new MouseWheelListener() {
            public void mouseWheelMoved(MouseWheelEvent e) {
                if (e.getWheelRotation() == -1) {
                    zoomLevel = zoomLevel - 0.1;
                    if (zoomLevel < 0.1) {
                        zoomLevel = 0.1;
                    }
                    viewPanel.getCamera().setViewPercent(zoomLevel);
                }
                if (e.getWheelRotation() == 1) {
                    zoomLevel = zoomLevel + 0.1;
                    viewPanel.getCamera().setViewPercent(zoomLevel);
                }
            }
        });

        graph.addAttribute("ui.stylesheet", "node {size:8px;fill-color:#ff0000;}");
        // graph.addAttribute("ui.stylesheet", "node:selected {fill-color:#8E44AD;}");
        graph.addAttribute("ui.stylesheet", "edge { shape:angle ;fill-color:#222;}");
        graph.addAttribute("ui.quality");
        graph.addAttribute("ui.antialias");
    }

}
4

0 回答 0