여기에 제가 얼마 전에 작성한 애플릿과 주요 코드에 대한 코멘트가 있습니다. 도움이 되길 바랍니다.
질문이 있으시면 Baidu 안녕하세요.
javax . swing . jframe;
Import Java . awt . colour;
Import Java . awt . geom . rectangle 2D;
프리퓨즈 임포트. Constant;
프리퓨즈 가져오기. 디스플레이;
프리퓨즈 가져오기. 시각화;
임포트 프리퓨즈 . action . *;
import prefuse . action . assignment . color action;
import pre fuse . action . assignment . 데이터 색상 액션;
임포트 사전 퓨즈 . action . layout . graph . forcedirectedlayout;
import pre fuse . activity . activity;
임포트 사전 퓨즈 . controls . *;
사전 퓨즈 가져오기 . data . *;
사전 퓨즈 가져오기 . render . *;
임포트 프리퓨즈 . util . *;
임포트 프리퓨즈 . util . display . display lib;
임포트 프리퓨즈 . visual . *;
public class Prefuse_Test extends JFrame{
visual vis
그래프 Graph = new Graph();
디스플레이 Display = new Display();
public Prefuse _ Test (String window _ name)
{
Table t 1 = new Table();
t1.addColumn("Person", string . class);
t1.addColumn("Titel", string . class);
t1.addColumn("FirstName", string . class);
t1.addColumn("SecondName", string . class);
t1.addColumn("Gender", string . class);
t1.addColumn("Birthday", string . class);
t1.addColumn("Department", string . class);
t1.addColumn("Function", string . class);
t1.addColumn("Boss", string . class);
t1.addColumn("Telephon", string . class);
t1.addColumn("Handy", string . class);
t1.addColumn("Tele_Home", string . class);
t 1 . addrow();
t 1.setString(0, 0, "Tom Hands");
t 1.setString(0, 1, " dr . ");
t1.setString(0, 2, " Tom ");
t1.setString(0, 3, " Hans ");
t1.setString(0, 4, " male ");
t1. setString(0, 5, " 1978-05-09 ");
t1.setString(0, 6, "Marketing");
t1.setString(0, 8, "Cotton Tiger ");
t1.setString(0, 9, " 0194537653 ");
t1.setString(0, 10, " 0191345667828 ");
//***Start:그래프 데이터 초기화
Graph = new Graph();
graph.addColumn("data", string . class);
graph.addColumn("column_name", string . class);
graph.addColumn("id", int . class);
graph.addColumn("toShow", string . class);
for(int I = 0; I& ltt 1 . getcolumncount(); i++)
{
node n = graph . add node();
n.setString("data", String.valueOf(t1.get(0, I)));
n.setString("column_name", t 1 . get column name(I));
n.setInt("id", I);
n.setString("toShow", n . get(1)+":\ n"+n . get(0));
}
for(int I = 1; I& ltt 1 . getcolumncount(); i++)
그래프.addEdge(0, I);
//* *Start:길이가 다른 에지
table EDG 1 = graph . getedgetable();
system . out . println(graph . getedgecount()+" "+EDG 1 . getrowcount());
edg1.addColumn("length", float . class);
for(int I = 0; I& ltEDG 1 . getrowcount(); i++)
{
edg1.setFloat(i, "length", 50 + I * 20);
system . out . println(" EDG 1 . get(I, 0):"+edg1.get(i, 0)+" edg1.get(i, 1):"+edg1.get(i, 1)+
" edg1.get(i, 6):"+edg1.get(i, 6)+" "+EDG 1 . get column name(6)+" I:"+I+" "+EDG 1 . getrowcount());
}
//* * * End:다양한 길이의 가장자리
//******End:그래프 데이터 초기화
//* * Start:레이블
label renderer lr = new label renderer(" to show");
lr.setRoundedCorner(8, 8);
//* * * * End:label
//* * Start:EdgeShape
EdgeRenderer er = new EdgeRenderer(Constant. EdgeTypeLine, Constant. Edge_Arrow_None);
//* * * End:EdgeShape
vis = new visualisation();
vis.add("graph", graph);
vis . setrendererfactory(new DefaultRendererFactory(lr, er));
* * Start:DataColour
DataColorAction fill = new DataColorAction(" graph . nodes", " id",
상수. 명목상, 시각적으로 채우기 색상);
색상 액션 텍스트 색상 = 새 색상 액션(" 그래프 . nodes",
시각적 항목. textCOLOR, colourlib . GRAY(0));
색상 액션 가장자리 color = 새 색상 액션(" graph . edges",
비주얼 아이템. STROKECOLOR, colourlib . GRAY(200));
ActionList color = new ActionList();
colour.add(fill);
colour . add(text colour);
colour . add(가장자리 색상);
//****End:데이터 색상
//ForceDirectedLayout:가장자리 길이 정의
액션 목록 레이아웃 = 새 액션 목록(Activity. 무한대);
>MyForceDirectedLayout fdl = new MyForceDirectedLayout(" graph ", 170);
layout . add(fdl);
layout . add(new repaint action());
vis.putAction("color", color);
vis.putAction("layout", layout);
display_init ().
이 . setdefaultcloseoperation(JFrame. EXIT _ ON _ CLOSE);
this . setitle(window _ name);
this.setSize(800, 800);
this.add(display);
this . setresizable(false);
이 . set visible(true);
}
public void display_init()
{
display . set visualisation(this . VIS);
display . sethighquality(true);
display.setSize(800, 800);
display.setBackground(colour. White);
display.addControlListener(new focus control(1));
display . addcontrollistener(new drag control(false, true));
display . addcontrollistener(new pan control());
display . addcontrollistener(new WheelZoomControl());
final zoomfitcontrol zfc = new zoomfitcontrol(this . vis . all _ ITEMS, 40, 2000, Control. right_mouse_button);
display . addcontrollistener(zfc);
display . addcontrollistener(new neighbor highlight control());
}
public void ZoomToFitByStart()
{
// zoom fit
boolean b = true
If (!display . istranforminprogress() & amp; & ampb)
{
b = false;
string m _ group = this . vis . all _ ITEMS;
long m _ duration = 2000
직사각형 2D bounds = this . vis . get bounds(m _ group);
GraphicsLib.expand(bounds, 190+(int)(1/display . get scale()));
display lib . fitviewtoBounds(display, bounds, m _ duration);
}
}
공개 static void main(String[] args) {
Prefuse _ Test frame = new Prefuse _. Test(" Prefuse _ Test ");
frame . vis . run(" color ");
frame . vis . run(" layout ");
frame . ZoomToFitByStart();
}
}
MyForceDirectedLayout 클래스는 ForceDirectedLayout을 확장
{
float f;<
public MyForceDirectedLayout(string graphic){
hyper(graphic);
}
public MyForceDirectedLayout(string graphic, float f) {
hyper(graphic);
this.f = f
}
@Override
보호된 float getSpringLength(EdgeItem e)
{
float f = (float)0;
f = e.canGetFloat("length")?e . get float(" length"):200;
Returns (float) f;
}
}