Chart FX for JAVA 을이용한 Charting 프로그램 예쓰월드 (YESSData.com) 소프트웨어사업부기술지원팀 2005. 02. 02
Agenda 회사소개 Chart FX for JAVA 소개 Chart FX for JAVA 의 API ( 데모 ) 그외 Contact Us
YESSWorld 개발용소프트웨어를전문적으로공급 Chart FX for JAVA : 대표적인자바차트컴포넌트 Resin : 가장빠른 Java WAS JProbe : Java 포퍼먼스튜닝 JClass : 그리드, 리포팅 InstallAnywhere : 자바인스톨러 FormulaOne for JAVA : 자바용 Excel 클라이언트컴포넌트 ExcelWriter : 자바용 Excel 서버컴포넌트 IP*Works : 자바통신컴포넌트 JSuite : 자바 GUI 컴포넌트 SourceInsight: 자바소스분석및개발 MCP/MSP 파트너로서 MS기반솔루션및제품판매
Software FX 1993 년설립 재사용가능한시각적인컴포넌트에대한요구가시장에서나타남에따라설립됨 설립후현재까지전세계 Chart 컴포넌트분야를선도하고있습니다. 가장강력하고, 사용하기쉬운, 데이터표현솔루션을개발자에게제공한다는철학을가진기업입니다.
자매제품 Chart FX for.net Chart FX Internet Chart FX Client Server Chart FX Delphi Pocket Chart FX Chart FX Studio Chart FX Extension Chart FX Financial Chart FX Statistical Chart FX OLAP Chart FX Real-Time
Chart FX for JAVA 소개
JAVA 버전특징 기존 COM 버전보다유연하다. 다중축의개수제한이없음 강화된 UI 그라디언트, 안티앨리어싱 강력한마법사기능과편리한도움말 다양한출력형태 Image, SVG, Flash,.NET Control 순수한 JAVA 컴포넌트
제품구성 Server Component (JSP/Servlet) Client Component (.NET Control) Designer (Templates) Designer
Chart FX for JAVA 의도움말
Chart FX for JAVA 의 API
Chart 생성하기 import SoftwareFX.ChartFX.*; ChartServer chart1 = new ChartServer(application,request,response ); chart1.gethtmltag("400","240","png");
Gallery Types Axis Charts Lines, Bar, Curve, Scatter, Area, Step, OpenHiLowClose Non-axis Pie, Radar, Polar, Doughnut Chart 와 Series 의 Gallery 속성사용 chart1.setgallery(gallery.gantt); series.setgallery(gallery.lines);
Gantt chart1.opendata(cod.values, 1, 9); chart1.opendata(cod.ini_values, 1, 9); chart1.setinivalue(0, 0,5); chart1.setvalue(0, 0,25); chart1.setlegend(0,"act. 1"); :
Bubble 2 가지값을동시에표현 Y 값, 풍선의크기 chart1.setvalue(0, j, dy) //Bubble Y Value chart1.setvalue(1, j, dsize) //Bubble Size XY Bubble X, Y, 풍선의크기 chart1.setvalue(0, j, dy) //Bubble Y Value chart1.setxvalue(0, j, dx) //Bubble X Value chart1.setvalue(1, j, dsize) //Bubble Size
Bubble
Doughnut chart1.setgallery(gallery.doughnut); chart1.setchart3d(true); chart1.setpointlabels(true); chart1.getpoint(2).setseparateslice((short) 35);
XY Plot - Scatter chart1.setgallery(gallery.scatter); chart1.opendata(cod.values, 2, 10); chart1.opendata(cod.xvalues, 2, 10); chart1.setxvalue(0, 0, -0.86); chart1.setvalue(0, 0, -0.41);
OpenHiLowClose TextProvider txtprovider = new TextProvider(application.getRealPath("/data/openhighl owclosedata.txt")); //TextProvider 에대한설명 chart1.setdatatype(0, DataType.LABEL); chart1.setdatatype(1, DataType.VALUE); chart1.setdatatype(2, DataType.VALUE); chart1.setdatatype(3, DataType.VALUE); chart1.setdatatype(4, DataType.VALUE); chart1.setdatasource(txtprovider); chart1.setgallery(gallery.openhilowclose); chart1.setvolume((short) 100);
OpenHiLowClose
Surface & Contour Series 와 Point, 값을이용하여표현 (more)
Surface & Contour
Combination 전체설정 chart1.setgallery(gallery.area); 시리즈별설정 chart1.getseries(0).setgallery(gallery.area); SeriesAttributes series = chart1.getseries(1); series.setgallery(gallery.lines); series.setmarkershape(markershape.none); series = chart1.getseries(2); series.setgallery(gallery.lines);
데이터전달 다양한형태의데이터지원 API Database Text XML Arrays & Collections Crosstab ( 아직불가 )
API 를이용한전달 setvalue 속성을이용하여전달 chart1.setvalue(1,2,40); Value 속성은 OpenData 와 CloseData 메서드사이에서사용 Points 의개수를모를때 chart1.opendata(cod.values, 1, COD.UNKNOWN); 축재설정 (Axis.) setautoscale(boolean value) (Aixs.) resetscale() Hidden Points chart1.setvalue(0, 3, Chart.HIDDEN); 기존값의변경 chart1.opendata(cod.values, COD.UNCHANGE, COD.UNCHANGE);
Database JDBCDataProvider provider = new JDBCDataProvi der(resultset); chart1.setdatatype(0,datatype.label); chart1.setdatatype(1,datatype.value); chart1.setdatatype(2,datatype.value); chart1.getaxisx().getlabelsformat().setformat(ax isformat.date); chart1.setdatasource(provider);
Text Files //Create TextProvider TextProvider txtprovider = new TextProvider(application.ge trealpath("/data/rangebanddata.txt")); //Setting chart1 collumns data type chart1.setdatatype(0, DataType.LABEL); chart1.setdatatype(1, DataType.NOT_USED); chart1.setdatatype(2, DataType.NOT_USED); chart1.setdatatype(3, DataType.INIVALUE); chart1.setdatatype(4, DataType.VALUE); chart1.setdatatype(5, DataType.VALUE); chart1.setdatatype(6, DataType.VALUE); chart1.setdatasource(txtprovider);
XML XMLProvider sfxxml = new XMLProvider(); sfxxml.load(xml 파일위치 ); chart1.setdatasource(sfxxml);
Collection & Arrays ListProvider lstprovider = new ListProvider(); lstprovider.add(labels); lstprovider.add(arrvals[0]); lstprovider.add(arrvals[1]); chart1.setdatasource(lstprovider);
Axis Handling Scaling Formatting Labeling Scrolling Multiple Axes Gridlines & Tickmarks
Scaling /*****************************************/ chart1.getaxisy().setautoscale(false); /*****************************************/ boolean b2nd; if(b2nd=true){ // 데이타변동 chart1.opendata(cod.values, COD.UNCHANGE, COD.UNCHANGE); chart1.setvalue(0, 5, 150); chart1.setvalue(1, 10, 250); chart1.closedata(cod.values); } /*****************************************/ boolean brecalc; if(brecalc=true) chart1.recalcscale(); /*****************************************/
LogBase
Formatting Axis axis=chart1.getaxisy(); Pre-Defined axis.getlabelsformat().setformat(axisformat.scientific); User-Defined axis.getlabelsformat().setcustomformat("mm/dd/yy"); "$#,##0;($#,##0) txtprovider.setdateformat("m/d/yyyy"); Logarithmic Scales axis.setlogbase((short) 10); Manipulating Dates and Times Axis axis = chart1.getaxisx(); axis.getlabelsformat().setformat(axisformat.time); axis.setmin(0); axis.setmax(2); axis.setstep(1/24);
Labeling //the interval between 2 consecutive tickmarks is equal to 10 chart1.getaxisy().setlabelvalue((short) 10); //assign each label for (int i=0;i<=9;i++) chart1.getaxisy().setlabel(i, " 레이블 " + i); //set the text color of the y axis labels chart1.getaxisy().settextcolor(new Color(255,0,0)); //set the font properties for the y axis labels chart1.getaxisy().setfont( new Font(" 굴림 ", Font.BOLD, 14)); chart1.getaxisy().setlabelangle((short) 30);
Scrolling chart1.setscrollable(true); chart1.getaxisx().setscrollview(20,60); chart1.getaxisy().setscrollview(30, 70); chart1.gethtmltag("450","280",".net")
Multiple Axes SeriesAttributes series1 = chart1.getseries(1); series1.setyaxis(yaxis.secondary); Axis axis = chart1.getaxis( (int) YAxis.SECONDARY); axis.setvisible(true); Axis axis2 = chart1.getaxis(3); axis2.setvisible(true);
Gridlines & Tickmarks axis.setstep((short) 20); axis.setgridlines(true); axis.getgrid().setcolor(new Color(135, 206, 250)); axis.setminorstep((short) 5); axis.getminorgrid().setcolor(new Color(255, 0, 0)); axis.setminortickmark(tickmark.outside); axis.setstyle(axis.getstyle() AxisStyle.INTERLACED);
포인트별속성주기 Basic chart1.getpoint(0,3).setcolor(color.red); Advanced for (int i=0;i<totseries;i++) for (int j=0;j<totvalues;j++) if (chart1.getvalue(i,j) >= mylimit[i][0]) { chart1.getpoint(i, j).setcolor(mycolor[i][0]); }else if(chart1.getvalue(i,j) < mylimit[i][1]){ chart1.getpoint(i, j).setcolor(mycolor[i][1]); }
Import & Export Export chart1.exportchart(fileformat.binary, Filename/Stream); FileMask chart1.setfilemask(chart1.getfilemask() FileMask.ALL ^ FileMask.TITLES); Import chart1.importchart(fileformat.binary, 바이너리파일명 ); Import from Designer chart1.importchart(fileformat.xml, XML 위치 ));
Legends & Labels Series Legend Point Legend User Legend Marker Labels Custom Marker Labels Double Labeling SerLeg & SerKey
Series Legend // In this case we are hardcoding the labels // but it would be the same if the labels are retrieved from the database chart1.setserleg(0, "ChartFX"); chart1.setserleg(1, "ReportFX"); // Show the Series Legend Window chart1.setserlegbox(true); chart1.getserlegboxobj().settoolborder( ToolBorder.EXTERNAL); //Emboss, Embed, SolidLines, Colonial, ArchThick, Open, SolidRivet, Slide ImageBorder myborder = new ImageBorder( ImageBorderType.EMBOSS); chart1.setborderobject(myborder);
Point Legend chart1.setlegendbox(true); chart1.getlegendboxobj().setdocked( Docked.LEFT); chart1.getlegendboxobj().setalignment( ToolAlignment.FAR); chart1.setlegend(0,"january"); chart1.setlegend(1,"february"); chart1.setlegend(2,"march"); chart1.setlegend(3,"april"); chart1.setlegend(4,"may"); chart1.setdataeditor(true); chart1.getdataeditorobj().setdocked( Docked.BOTTOM);
User Legend // Configure user legend for special points String strlegend[]={"too High", "Normal", "Too Low"}; UserLegendBoxItem userlegitem; for (int i=0;i<3;i++) { userlegitem = chart1.getuserlegendboxobj().getitem(i); userlegitem.setlabel(strlegend[i]); userlegitem.setcolor(mycolor[0][i]); userlegitem.setmarkershape(markershape.rect); userlegitem.setbordereffect(bordereffect.none); } chart1.setuserlegendbox(true);
Legend Box 크기고정 설명취소 : 나중에나옴
Marker Labels SeriesAttributes series = chart1.getseries(0); series.setpointlabels(true); series.setpointlabelangle((short) 90); series.setpointlabelalign( LabelAlign.RIGHT LabelAlign.VCENTER); series.setcolor(new Color(255, 255, 0));
Custom Marker Labels chart1.setpointlabelmask( "I represent the " + "%p" + "%%" + " n" + "of " + "%t" + " on " + "%l"); chart1.setpointlabels(true); chart1.setlegend(0, "Jan"); chart1.setlegend(1, "Feb"); chart1.setlegend(2, "Mar");
Double Labeling Axis axis3 = chart1.getaxis(3); axis3.setyaxis(false); axis3.setmin((short) 0); axis3.setmax((short) 9); axis3.setstyle(axis3.getstyle() AxisStyle.CENTERED); axis3.setlabel(3, "Group 1"); axis3.setlabel(5, "Group 2"); axis3.setlabel(9, "Group 3"); axis3.getline().setcolor(new Color(255, 255, 0)); axis3.getgrid().setcolor(new Color(255, 255, 0)); axis3.setcustomsteps(new double[] { 3, 2, 4 });
SerLeg & SerKey chart1.opendata(cod.values,5,6); for (int i=0;i<5;i++) for (int j=0;j<6;j++) { chart1.setvalue(i, j, Math.random() * 100); chart1.setserleg(i, "S" + (i+1)); chart1.setserkey(i, "S" + (i+1)); } chart1.closedata(cod.values); chart1.setcluster(true); chart1.setchart3d(true); chart1.setserlegbox(true);
그외팁
Headless Environment JDK 1.4, XVFB, Exceed on Demand
Cross-Hair & ClientScript Cross-Hair 마우스를차트에대고왼쪽버튼을누르면, 마무스초점을중심으로십자형의중심선이나타나서, 값의비교를비교적쉽게한다. 관련메소드 (Live / Edit) (Chart.)setCrossHairs(boolean value) (Chart.)setTypeEx(int value) (Chart.)isCrossHairs() ClientScript (JavaScript / VBScript) Chart FX for.net 예제를참조하는것이좋다.
Gantt-Stacking 40 일 (Live / Edit) 분기별 (Live / Edit)
범례박스크기의고정 범례박스의크기는입력되는범례의폰트크기, 길이등에의해서자동으로조절된다. 미관상의이유로, 범례박스의크기를고정시켜야할경우도있을수있다. 관련메소드 (Live / Edit) (UserLegendBox.)setWidth(int); //Docked.LEFT 또는 Docked.RIGHT 인경우에만 (UserLegendBox.)setHeight(int); //Docked.TOP 또는 Docked.BOTTOM 인경우에만 (UserLegendBox.)setDocked(int); (UserLegendBox.)setAutoSize(boolean); //default : false 6.0.1734 / 6.0.1605 / 6.0.1465
각종폰트퍼짐현상 타이틀용폰트가시스템과관계없이퍼지는현상이발생하는데, 이는 Anti-Aliasing 때문이다. 관련메소드 (Live / Edit) (Chart.)setSmoothFlags(int value) 주의사항글씨의퍼짐현상을개선하기위해 Anti-Aliasing 기능을제거한경우, 라인차트의라인의계단현상이심화될수있다.
한글폰트설정법 한글폰트등록 시스템폰트로등록 (TTF / TTC) JVM 폰트로등록 ($JAVA_HOME/jre/lib/fonts) 폰트테스트 (Live / Edit)
.NET Framework 다운로드 1. Microsoft 사이트에접속한다. 2. 좌측메뉴의 Product Resources에서 Downloads 를선택한다. 3. 좌측메뉴의 Download Categories에서 Development Resources 를선택한다. 4. Search for a Download의 Product/Technology (Optional) 에서.NET 을선택하고, Keywords(Optional) 에 Framework를입력하고 Go를누른다. 5. 검색된항목중.NET Framework Version x.x Redistributable Package 를선택한다. 6. 다운로드받기전에, Change Language에서 Korean으로변경후 Go 를누른다. 7. 한글페이지로변경이되었다면,.NET Framework 버전 x.x 재배포가능패키지 로되어있을것이다. 이제오른쪽에위치한 다운로드 버튼을눌러서다운로드한다.
.NET Framework 설정 설정은한글 Win XP Pro 기준으로시작 설정 제어판 관리도구 Microsoft.NET Framework 1.1 구성에서할수있다. 기본적으로 HTTP : 80 포트는무리없이수행되지만, 다른포트를사용시에는별도의설정이필요하다. 만약 80외의포트를사용할수밖에없다면, 클라이언트마다.. 런타임보안정책 컴퓨터 코드그룹 All_Code 자식코드그룹추가을통해서타켓 URL/ 도메인과포트를추가해주고, FullTrust 로설정해준다.
버전별.NET Ctrl 분석 6.0.1734.18542 (Patch / Live / Edit) 정상작동 (.NET Ctrl 버전은 6.0.1605 와동일 ) 6.0.1605.22277 (Patch / Live / Edit) 정상작동버전 6.0.1465.26138 (Patch / Live / Edit) 정상작동버전
Designer in JDK 1.3 관련조항 If you are running J2SE 1.3, you will need to download and install Java API for XML Processing (JAXP). This may require Downloading the Java Web Services Developer Pack 1.x from http://java.sun.com. 하지만, JDK 1.3 용 JAXP 는존재하지않는다. 테스트결과 only JDK 1.3 : 실패 JDK 1.4 : 성공 JDK 1.3 + JAXP : 성공 -Xbootclasspath/a:jaxp.jar jaxp.jar 를 classpath 에추가하면실패 jaxp.jar 는 JDK 1.4 가설치된머신에서따로추출한다.
차트를작게만들때유의점 차트가작게만들때, 실제차트표현영역을예상외로작아진다. 예 Live / Edit 차트의크기가작아질때에보더가보이면답답해보일수있다. 예 Live / Edit chart1.setborderobject(new DefaultBorder(0));
Contact Us E-Mail 기술지원 http://www.yessdata.com 의 Club 또는기술지원 영업 sales@yessdata.com 전화 영업 02)567-9169 홈페이지 국내총판 http://www.yessdata.com 제작사 http://www.softwarefx.com 제작사기술정보 http://support.softwarefx.com/cfxjava