6

私は宿題をして、stackoverflowで以前に回答されたサンプルとトピックの両方をグーグルで検索しました。しかし、何も見つかりませんでした。

私の問題は、矢印のようなビューを持たない通常のエッジです。

ターゲットから目的地への前方矢印があることを期待するために私が行うことは次のとおりです。

LabelRenderer nameLabel = new LabelRenderer( "name");
        nameLabel.setRoundedCorner(8、8);
        DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel);
        EdgeRenderer edgeRenderer;
    edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE、prefuse.Constants.EDGE_ARROW_FORWARD);
        rendererFactory.setDefaultEdgeRenderer(edgeRenderer);
        vis.setRendererFactory(rendererFactory);


エッジの色について私が見ているものは次のとおりです。これらが透明であってはならないことを願っています。

int[]パレット=newint [] {ColorLib.rgb(255、180、180)、ColorLib.rgb(190、190、255)};

        DataColorAction fill = new DataColorAction( "socialnet.nodes"、 "gender"、Constants.NOMINAL、VisualItem.FILLCOLOR、palette);

        ColorAction text = new ColorAction( "socialnet.nodes"、VisualItem.TEXTCOLOR、ColorLib.gray(0));


        ColorActionエッジ=newColorAction( "socialnet.edges"、VisualItem.STROKECOLOR、ColorLib.gray(200));
        ColorAction arrow = new ColorAction( "socialnet.edges"、VisualItem.FILLCOLOR、ColorLib.gray(200));

        ActionList color = new ActionList();
        colour.add(fill);
        colour.add(text);
        colour.add(edges);
        colour.add(arrow);
        vis.putAction( "colour"、colour);

したがって、私はどこが間違っているのだろうか?エッジが矢印のように見えないのはなぜですか?

アイデアをありがとう。

詳細については、すべてのコードを貼り付けます。

/ *
 *このテンプレートを変更するには、[ツール]|[ツール]を選択します。テンプレート
 *そしてエディターでテンプレートを開きます。
 * /

パッケージprefusedeneme;

インポートjavax.swing.JFrame;

prefuse.data。*をインポートします。
prefuse.data.io。*をインポートします。
prefuse.Displayをインポートします。
prefuse.Visualizationをインポートします。
prefuse.render。*をインポートします。
prefuse.util。*をインポートします。
prefuse.action.assignment。*をインポートします。
prefuse.Constantsをインポートします。
prefuse.visual。*をインポートします。
prefuse.action。*をインポートします。
prefuse.activity。*をインポートします。
prefuse.action.layout.graph。*をインポートします。
prefuse.controls。*をインポートします。
import prefuse.data.expression.Predicate;
import prefuse.data.expression.parser.ExpressionParser;

パブリッククラスSocialNetworkVis{

    public static void main(String argv []){

        //1.データをロードします

        グラフグラフ=null;
        /*グラフにはコアデータが含まれます*/
        試す {
            グラフ=新しいGraphMLReader()。readGraph( "socialnet.xml");

        /*XMLファイルからデータをロードします*/
        } catch(DataIOException e){
            e.printStackTrace();
            System.err.println( "グラフの読み込みエラー。終了しています...");
            System.exit(1);
        }

        //2.ビジュアライゼーションを準備します

        Visualization vis = new Visualization();
        /*visは視覚化を実行するメインオブジェクトです*/
        vis.add( "socialnet"、グラフ);
        /*ビジュアライゼーションにデータを追加します*/

        //3.レンダラーとレンダーファクトリをセットアップします

        //名前のラベル
        LabelRenderer nameLabel = new LabelRenderer( "name");
        nameLabel.setRoundedCorner(8、8);
        / * nameLabelは、「name」というラベルの付いたデータ要素を描画する方法を説明します* /

        //レンダリングファクトリを作成します
        DefaultRendererFactory rendererFactory = new DefaultRendererFactory(nameLabel);
        EdgeRenderer edgeRenderer;
    edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_LINE、prefuse.Constants.EDGE_ARROW_FORWARD);
        rendererFactory.setDefaultEdgeRenderer(edgeRenderer);
        vis.setRendererFactory(rendererFactory);


        //4.アクションを処理します

        //名目データ型のカラーパレット
        int[]パレット=newint [] {ColorLib.rgb(255、180、180)、ColorLib.rgb(190、190、255)};
        /*ColorLib.rgbは色の値を整数に変換します*/


        //データをパレットの色にマップします
        DataColorAction fill = new DataColorAction( "socialnet.nodes"、 "gender"、Constants.NOMINAL、VisualItem.FILLCOLOR、palette);
        / *塗りつぶしは、データの一部に基づいてグラフを描画する色を示します* /

        //ノードテキスト
        ColorAction text = new ColorAction( "socialnet.nodes"、VisualItem.TEXTCOLOR、ColorLib.gray(0));
        /*テキストはテキストを描画する色を説明します*/

        // 縁
        ColorActionエッジ=newColorAction( "socialnet.edges"、VisualItem.STROKECOLOR、ColorLib.gray(200));
        ColorAction arrow = new ColorAction( "socialnet.edges"、VisualItem.FILLCOLOR、ColorLib.gray(200));
        /*エッジはエッジを描画する色を示します*/

        //色の割り当てをアクションリストに結合します
        ActionList color = new ActionList();
        colour.add(fill);
        colour.add(text);
        colour.add(edges);
        colour.add(arrow);
        vis.putAction( "colour"、colour);
        /*ビジュアライゼーションにカラーアクションを追加します*/

        //レイアウト用に別のアクションリストを作成します
        ActionListレイアウト=新しいActionList(Activity.INFINITY);
        layout.add(new ForceDirectedLayout( "socialnet"));
        /*デフォルトパラメータで力指向グラフレイアウトを使用します*/

        layout.add(new RepaintAction());
        /*グラフノードが移動するたびに再描画します*/

        vis.putAction( "layout"、layout);
        /*ビジュアライゼーションにラウトアクションを追加します*/

        //5.視覚化のためのインタラクティブなコントロールを追加します

        ディスプレイdisplay=new Display(vis);
        display.setSize(700、700);
        display.pan(350、350); //中央にパン
        display.addControlListener(new DragControl());
        /*アイテムをドラッグできるようにします*/

        display.addControlListener(new PanControl());
        / *ディスプレイをパンできるようにする(左/右、上/下に移動)(左ドラッグ)* /

        display.addControlListener(new ZoomControl());
        / *ディスプレイをズームできるようにします(右ドラッグ)* /

        //6.JFrameでビジュアライザーを起動します

        JFrame frame = new JFrame( "prefuseチュートリアル:socialnet");
        /*フレームはメインウィンドウです*/

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(display);
        / *ウィンドウにディスプレイ(視覚化を保持する)を追加します* /

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

        /*視覚化作業を開始します*/
        vis.run( "colour");
        vis.run( "layout");

    }
}


4

2 に答える 2

2

prefuse フォーラムでの回答に満足しているかどうかは、コメントではわかりません。したがって、コードをいじって、次の変更を加えることで、必要な動作を得ることができました。

グラフ要素のedgedefaultが向くように入力xmlを変更しました。

... <graph edgedefault="directed"> ...

次に、コードでさまざまな EdgeRenderer エッジタイプと矢印タイプを使用して、矢印のオンとオフを切り替えたり、矢印を前方または後方に表示したりできるようにしました。曲線も描いてみました。例えば:

edgeRenderer = new EdgeRenderer(prefuse.Constants.EDGE_TYPE_CURVE, prefuse.Constants.EDGE_ARROW_FORWARD);

繰り返しますが、他のフォーラムでこれに対する回答を既に得ているかもしれません。

于 2011-04-24T04:23:21.527 に答える
0

私は同じ質問に出くわしました。始めようとしているprefuseライブラリの将来のユーザーの場合:RadialGraphViewの例に矢印を追加する場合は、ditkinで言及されている変更を加えて、次の行を追加する必要があります。

ColorAction arrowColor = new ColorAction("tree.edges", VisualItem.FILLCOLOR, ColorLib.gray(200));

そしてさらに下:

// create the filtering and layout:
[...]
filter.add(arrowColor); // add this one

基本的に、答えはsourceforgeスレッドにありますが、ここで解決策を提供したいと思いました。merveのコードには、これらの命令が含まれています。

于 2012-01-06T09:16:45.120 に答える