algorithm - change node color entered by user - GraphStream - JAVA -
i working on application in have used graphstream library of dijkstra's shortest path algorithm
in application user enter n number of entries comma separated in jtextfield. have find shortest path between of entered numbers. have done need change color of nodes entered user. know command change color of node : node.addattribute("ui.style", "fill-color: blue;"); have used command change color of nodes how can change color of user entered nodes.
here code :
public class graphtest { connection conn = null; singlegraph graph; statement stmt = null; jlabel label; jbutton show_graph; jtextfield enter_numbers; int = 0; double zoomlevel = 1.0; string result, result2; imageicon loading; public static void main(string[] args) throws classnotfoundexception, sqlexception { graphtest graphtest = new graphtest(); graphtest.createconnection(); } public graphtest() 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)); graph = new singlegraph("tutorial", false, true); viewer viewer = new viewer(graph, viewer.threadingmodel.graph_in_another_thread); final viewpanel viewpanel = viewer.adddefaultview(false); viewer.enableautolayout(); graph.setautocreate(true); graph.setstrict(false); graph.addattribute("ui.quality"); graph.addattribute("ui.antialias"); label = new jlabel("enter numbers : "); enter_numbers = new jtextfield(15); font bigfont = enter_numbers.getfont().derivefont(font.plain, 17f); enter_numbers.setfont(bigfont); show_graph = new jbutton("show graph"); viewpanel.add(label); viewpanel.add(enter_numbers); viewpanel.add(show_graph); show_graph.addactionlistener(showgraphlistener); panel.add(viewpanel); frame.add(panel); frame.pack(); frame.setlocationrelativeto(null); frame.setvisible(true); 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); } } }); } private connection createconnection() throws classnotfoundexception, sqlexception { class.forname("org.h2.driver"); conn = drivermanager.getconnection("jdbc:h2:file:g:/hs_data/h2_db/test", "sa", "sa"); return conn; } actionlistener showgraphlistener = new actionlistener() { public void actionperformed(actionevent e) { string user_input = enter_numbers.gettext(); if (user_input == null || user_input.isempty()) { joptionpane.showmessagedialog(null, "please enter atleast 2 numbers comma seperated"); } else { arraylist<string> items = new arraylist<string>(arrays.aslist(user_input.split("\\s*,\\s*"))); try { showgraph(items); } catch (sqlexception e1) { e1.printstacktrace(); } } } }; private void showgraph(arraylist<string> items) throws sqlexception { stmt = conn.createstatement(); resultset rs = stmt.executequery("select anumber,bnumber cdr limit 4500"); while (rs.next()) { result = rs.getstring("anumber"); result2 = rs.getstring("bnumber"); graph.addnode(result); graph.addnode(result2); i++; graph.addedge("string" + i, result, result2); (node node : graph) { node.addattribute("ui.hide"); } (edge edge : graph.geteachedge()) { edge.addattribute("ui.hide"); } } conn.close(); dijkstra dijkstra = new dijkstra(dijkstra.element.edge, null, null); dijkstra.init(graph); arraylist<string> rl = new arraylist<string>(); arraylist<string> lr = new arraylist<string>(); rl = items; lr.addall(rl); collections.reverse(lr); (string anumber : rl) { lr.remove(lr.size() - 1); (string bnumber : lr) { dijkstra.setsource(graph.getnode(anumber)); dijkstra.compute(); (node node : dijkstra.getpathnodes(graph.getnode(bnumber))) { node.addattribute("ui.style", "fill-color: blue;"); node.addattribute("ui.label", node.getid()); node.removeattribute("ui.hide"); } (edge edge : dijkstra.getpathedges(graph.getnode(bnumber))) { edge.addattribute("ui.style", "fill-color: red;"); edge.removeattribute("ui.hide"); } } } dijkstra.clear(); } } any idea or have use change node color command ?
Comments
Post a Comment