Chart FX for JAVA을 이용한Charting...

Post on 06-Feb-2018

253 views 10 download

Transcript of Chart FX for JAVA을 이용한Charting...

Chart FX for JAVA을이용한 Charting 프로그램Chart FX for JAVA을이용한 Charting 프로그램

㈜예쓰월드(YESSData.com)소프트웨어 사업부기술지원 팀

2005. 02. 02

AgendaAgenda

회사소개

Chart FX for JAVA 소개

Chart FX for JAVA의 API (데모)

그외

Contact Us

YESSWorldYESSWorld개발용 소프트웨어를 전문적으로 공급

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 FXSoftware 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 ExtensionChart FX Financial

Chart FX Statistical

Chart FX OLAP

Chart FX Real-Time

Chart FX for JAVA 소 개Chart FX for JAVA 소 개

JAVA 버전 특징JAVA 버전 특징

기존 COM버전 보다 유연하다.다중 축의 개수 제한이 없음

강화된 UI – 그라디언트, 안티앨리어싱…

강력한 마법사 기능과 편리한 도움말

다양한 출력형태Image, SVG, Flash, .NET Control

순수한 JAVA 컴포넌트

제 품 구 성제 품 구 성Server Component (JSP/Servlet)

Client Component (.NET Control)

Designer (Templates)

DesignerDesignerDesigner

Chart FX for JAVA의 도움말Chart FX for JAVA의 도움말

Chart FX for JAVA의 APIChart FX for JAVA의 API

Chart 생성하기Chart 생성하기

import SoftwareFX.ChartFX.*;

ChartServer chart1 = new ChartServer(application,request,response );

chart1.getHtmlTag("400","240","PNG");

Gallery TypesGallery Types

Axis ChartsLines, Bar, Curve, Scatter, Area, Step, OpenHiLowClose …

Non-axisPie, Radar, Polar, Doughnut…

Chart와 Series의 Gallery 속성 사용chart1.setGallery(Gallery.GANTT);

series.setGallery(Gallery.LINES);

GanttGantt

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");:

BubbleBubble

2가지 값을 동시에 표현Y값, 풍선의 크기

chart1.setValue(0, j, dY) //Bubble Y Value

chart1.setValue(1, j, dSize) //Bubble Size

XY BubbleX, Y, 풍선의 크기

chart1.setValue(0, j, dY) //Bubble Y Value

chart1.setXValue(0, j, dX) //Bubble X Value

chart1.setValue(1, j, dSize) //Bubble Size

BubbleBubble

DoughnutDoughnut

chart1.setGallery(Gallery.DOUGHNUT);chart1.setChart3D(true);chart1.setPointLabels(true);chart1.getPoint(2).setSeparateSlice((short) 35);

XY Plot - ScatterXY 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);

OpenHiLowCloseOpenHiLowClose

TextProvider txtProvider = new TextProvider(application.getRealPath("/data/openhighlowclosedata.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);

OpenHiLowCloseOpenHiLowClose

Surface & ContourSurface & Contour

Series와 Point, 값을 이용하여 표현 (more)

Surface & ContourSurface & Contour

CombinationCombination

전체 설정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를 이용한 전달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 Pointschart1.setValue(0, 3, Chart.HIDDEN);

기존값의 변경chart1.openData(COD.VALUES, COD.UNCHANGE

, COD.UNCHANGE);

DatabaseDatabase

JDBCDataProvider provider = new JDBCDataProvider(ResultSet);

chart1.setDataType(0,DataType.LABEL);chart1.setDataType(1,DataType.VALUE);chart1.setDataType(2,DataType.VALUE);

chart1.getAxisX().getLabelsFormat().setFormat(AxisFormat.DATE);

chart1.setDataSource(provider);

Text FilesText Files

//Create TextProviderTextProvider txtProvider = new TextProvider(application.ge

tRealPath("/data/rangebanddata.txt"));

//Setting chart1 collumns data typechart1.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);

XMLXML

XMLProvider sfxXml = new XMLProvider();

sfxXml.load(XML파일위치);

chart1.setDataSource(sfxXml);

Collection & ArraysCollection & Arrays

ListProvider lstProvider = new ListProvider();

lstProvider.add(labels);

lstProvider.add(arrVals[0]);

lstProvider.add(arrVals[1]);

chart1.setDataSource(lstProvider);

Axis HandlingAxis Handling

Scaling

Formatting

Labeling

Scrolling

Multiple Axes

Gridlines & Tickmarks

ScalingScaling

/*****************************************/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();/*****************************************/

LogBaseLogBase

FormattingFormatting

Axis axis=chart1.getAxisY();

Pre-Definedaxis.getLabelsFormat().setFormat(AxisFormat.SCIENTIFIC);

User-Definedaxis.getLabelsFormat().setCustomFormat("mm/dd/yy");

"$#,##0;($#,##0)“txtProvider.setDateFormat("M/d/yyyy");

Logarithmic Scalesaxis.setLogBase((short) 10);

Manipulating Dates and TimesAxis axis = chart1.getAxisX();axis.getLabelsFormat().setFormat(AxisFormat.TIME);axis.setMin(0);axis.setMax(2);axis.setStep(1/24);

LabelingLabeling

//the interval between 2 consecutive tickmarks is equal to 10chart1.getAxisY().setLabelValue((short) 10);

//assign each labelfor (int i=0;i<=9;i++)

chart1.getAxisY().setLabel(i, "레이블 " + i);

//set the text color of the y axis labelschart1.getAxisY().setTextColor(new Color(255,0,0));

//set the font properties for the y axis labelschart1.getAxisY().setFont( new Font("굴림", Font.BOLD, 14));

chart1.getAxisY().setLabelAngle((short) 30);

ScrollingScrolling

chart1.setScrollable(true);

chart1.getAxisX().setScrollView(20,60);

chart1.getAxisY().setScrollView(30, 70);

chart1.getHtmlTag("450","280",".NET")

Multiple AxesMultiple 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 & TickmarksGridlines & 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 & ExportImport & 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 & LabelsLegends & Labels

Series Legend

Point Legend

User Legend

Marker Labels

Custom Marker Labels

Double Labeling

SerLeg & SerKey

Series LegendSeries 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 LegendPoint Legendchart1.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 LegendUser Legend

// Configure user legend for special pointsString 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 크기 고정Legend Box 크기 고정

설명 취소 : 나중에 나옴

Marker LabelsMarker 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 LabelsCustom 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 LabelingDouble 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 & SerKeySerLeg & 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 EnvironmentHeadless EnvironmentJDK 1.4, XVFB, Exceed on Demand

Cross-Hair & ClientScriptCross-Hair & ClientScript

Cross-Hair마우스를 차트에 대고 왼쪽 버튼을 누르면, 마무스 초점을 중심으로 십자형의 중심선이 나타나서, 값의 비교를 비교적 쉽게 한다.

관련 메소드 (Live / Edit)(Chart.)setCrossHairs(boolean value)

(Chart.)setTypeEx(int value)

(Chart.)isCrossHairs()

ClientScript (JavaScript / VBScript)Chart FX for .NET 예제를 참조하는 것이 좋다.

Gantt-StackingGantt-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 다운로드.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 설정.NET Framework 설정

설정은 한글 Win XP Pro 기준으로시작→설정→제어판→관리 도구→Microsoft .NET Framework 1.1 Microsoft .NET Framework 1.1 구성구성에서 할 수 있다.기본적으로 HTTP : 80 포트는 무리없이 수행되지만, 다른 포트를 사용시에는 별도의 설정이 필요하다.만약 80외의 포트를 사용할 수 밖에 없다면, 클라이언트 마다.. 런타임 보안 정책→컴퓨터→코드 그룹→All_Code→자식 코드 그룹 추가을 통해서 타켓 URL/도메인과 포트를 추가해주고, ‘FullTrust’로 설정해 준다.

버전별 .NET Ctrl 분석버전별 .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.3Designer 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 / Editchart1.setBorderObject(new DefaultBorder(0));

Contact UsContact 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