この文字列を視覚化するという問題に直面しています:
"=IF(A2=1;0;IF(D2=D3;IF(C2=1;TRUE;FALSE);4))";
ご覧のとおり、一般的な構文は Excel の数式に似ているため、IF(TEST; TRUE; FALSE)
私の問題は、ライブラリJUNG2を使用して、この文字列をバイナリ検索ツリー形式で視覚化したいことです。以下に、ツリーがどのように見えるかの例を示します。
現時点で頂点を視覚化するコードを次に示します。
public class SimpleGraphView {
Graph<Integer, String> g;
Graph<String, String> n;
/** Creates a new instance of SimpleGraphView */
String text = "=IF(A2=1;0;IF(D2=D3;IF(C2=1;TRUE;FALSE);4))";
public SimpleGraphView() {
n = new SparseMultigraph<String, String>();
String str = text;
String delim = ";";
StringTokenizer tok = new StringTokenizer(str, delim, true);
text = text.replace("(", " ");
String s = text.replace(")", " ");
String[] r = s.split(";");
for (int i = 0; i < r.length; i++) {
//Vertex
if(r.equals("=IF(")) {
n.addVertex(r[i].toString());
}
if(i % 2==0){
n.addVertex(r[i].toString());
} else {
n.addVertex(r[i].toString());
}
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SimpleGraphView sgv = new SimpleGraphView(); // Creates the graph...
// Layout<V, E>, VisualizationViewer<V,E>
Layout<Integer, String> layout = new CircleLayout(sgv.n);
layout.setSize(new Dimension(300,300));
VisualizationViewer<Integer,String> vv = new VisualizationViewer<Integer,String>(layout);
vv.setPreferredSize(new Dimension(350,350));
// Show vertex and edge labels
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
// Create our "custom" mouse here. We start with a PluggableGraphMouse
// Then add the plugins you desire.
PluggableGraphMouse gm = new PluggableGraphMouse();
gm.add(new TranslatingGraphMousePlugin(MouseEvent.BUTTON1_MASK));
gm.add(new ScalingGraphMousePlugin(new CrossoverScalingControl(), 0, 1.1f, 0.9f));
vv.setGraphMouse(gm);
JFrame frame = new JFrame("Interactive Graph View 3");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
}
}
配列内の文字列からすべての頂点をレンダリングできますr
。私の問題は、これらすべての頂点を適切なエッジに接続する方法がわからないことです。すべての頂点を右のエッジに接続する方法はありますか?
あなたの答えに本当に感謝します!