33 é¢ã°ã©ã
ãã®ç« ã§ã¯ã2軞ãã£ãŒãã®ãã1ã€ã®ã¿ã€ãã§ããé¢ã°ã©ãã«ã€ããŠèª¬æããŸãã
æãç·ã°ã©ããšåãããã«ãããŒã¿ã¯ãçŽç·ã§çµã°ããäžé£ã®ç¹ãšããŠè¡šç€ºãããŸãã ãã ãã軞ãšç·ã®éã®é¢ã«ã¯è²ãä»ããããŸãã ããŒã¿ã®ç³»åããšã«ç°ãªãè²ãä»ããããŸãã å³33-1ã«ãããŒã¿ã®ç³»åã2ã€ããé¢ã°ã©ãã瀺ããŸãã
é¢ã°ã©ãã®äœæ
ã¢ããªã±ãŒã·ã§ã³ã§ç°¡åãªé¢ã°ã©ããäœæããã«ã¯ãæäœéã2ã€ã®è»žãå®çŸ©ããAreaChartã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããŠAreaChartãªããžã§ã¯ããäœæããXYChart.Seriesã¯ã©ã¹ã䜿çšããŠããŒã¿ã®ç³»åã1ã€ä»¥äžäœæããããŒã¿ãã°ã©ãã«å²ãåœãŠãå¿
èŠããããŸãã
AreaChartã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããå Žåãã³ã³ã¹ãã©ã¯ã¿å
ã§ããŒã¿ã®ç³»åãå«ãŸããç£èŠå¯èœãªã¹ããæå®ããããšããåŸã§AreaChartãªããžã§ã¯ãã«å¯ŸããŠgetDataããã³addAllã¡ãœãããã³ãŒã«ããŠããŒã¿ã®ç³»åã远å ããããšãã§ããŸãã
äŸ33-1ã§ã¯ã枩床ã¢ãã¿ãªã³ã°ã»ããŒã¿ã衚ãé¢ã°ã©ããäœæããŠããŸãã ãã®äŸã§ã¯ãAprilãšMayã®æéã«ã€ããŠåéããã2ã€ã®ããŒã¿ã®ç³»åã䜿çšããŠããŸãã
äŸ33-1 é¢ã°ã©ãã®äœæ
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class AreaChartSample extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Area Chart Sample");
final NumberAxis xAxis = new NumberAxis(1, 31, 1);
final NumberAxis yAxis = new NumberAxis();
final AreaChart<Number,Number> ac =
new AreaChart<>(xAxis,yAxis);
ac.setTitle("Temperature Monitoring (in Degrees C)");
XYChart.Series seriesApril= new XYChart.Series();
seriesApril.setName("April");
seriesApril.getData().add(new XYChart.Data(1, 4));
seriesApril.getData().add(new XYChart.Data(3, 10));
seriesApril.getData().add(new XYChart.Data(6, 15));
seriesApril.getData().add(new XYChart.Data(9, 8));
seriesApril.getData().add(new XYChart.Data(12, 5));
seriesApril.getData().add(new XYChart.Data(15, 18));
seriesApril.getData().add(new XYChart.Data(18, 15));
seriesApril.getData().add(new XYChart.Data(21, 13));
seriesApril.getData().add(new XYChart.Data(24, 19));
seriesApril.getData().add(new XYChart.Data(27, 21));
seriesApril.getData().add(new XYChart.Data(30, 21));
XYChart.Series seriesMay = new XYChart.Series();
seriesMay.setName("May");
seriesMay.getData().add(new XYChart.Data(1, 20));
seriesMay.getData().add(new XYChart.Data(3, 15));
seriesMay.getData().add(new XYChart.Data(6, 13));
seriesMay.getData().add(new XYChart.Data(9, 12));
seriesMay.getData().add(new XYChart.Data(12, 14));
seriesMay.getData().add(new XYChart.Data(15, 18));
seriesMay.getData().add(new XYChart.Data(18, 25));
seriesMay.getData().add(new XYChart.Data(21, 25));
seriesMay.getData().add(new XYChart.Data(24, 23));
seriesMay.getData().add(new XYChart.Data(27, 26));
seriesMay.getData().add(new XYChart.Data(31, 26));
Scene scene = new Scene(ac,800,600);
ac.getData().addAll(seriesApril, seriesMay);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
ãã®äŸã§ã¯ã暪軞ãšçžŠè»žäžã§æ°å€ããŒã¿ã衚ãããã«2ã€ã®NumberAxisãªããžã§ã¯ããäœæãããŠããŸãã æšªè»ž(X)ã§ã¬ã³ããªã³ã°ãããå€ã¯XYChart.Dataãªããžã§ã¯ãã®æåã®ãã©ã¡ãŒã¿ããååŸãããŸããäžæ¹ã瞊軞(Y)ã®ããŒã¿ã¯2çªç®ã®ãã©ã¡ãŒã¿ãæäŸããŸãã
ããŒã¿ã®ç³»åã¯ãgetDataããã³addAllã¡ãœããã䜿çšããŠã°ã©ãã«å²ãåœãŠãããŠããŸãã seriesMayããŒã¿ã¯æåŸã«è¿œå ãããããã察å¿ããç·è²ã®é¢ããAprilã®ããŒã¿ã衚ãé»è²ã®é¢ã®äžã«éãªã£ãŠè¡šç€ºãããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããçµæãå³33-2ã«ç€ºããŸãã
å³33-2 ããŒã¿ã®ç³»åã2ã€ããé¢ã°ã©ã

ãå³33-2 ããŒã¿ã®ç³»åã2ã€ããé¢ã°ã©ããã®èª¬æ
ç©äžãé¢ã°ã©ãã®äœæ
é¢ã°ã©ãã®ããŒã¿ã¯ãStackedAreaChartã¯ã©ã¹ã䜿çšããŠè¡šãããšãã§ããŸãã ãã®ã¯ã©ã¹ã§ã¯ãåé¢ãç©ã¿äžããŠãã«ãããããããããŒã¿ã®åç³»åã¯é£æ¥ããŸãããå
è¡ããããŒã¿ã®ç³»åãšéãªãåããŸããã äŸ33-2ã§ã¯ããã®ã¿ã¹ã¯ãå®è£
ããŠããŸãã
äŸ33-2 ç©äžãé¢ã°ã©ãã®äœæ
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.StackedAreaChart;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class StackedAreaChartSample extends Application {
final NumberAxis xAxis = new NumberAxis(1, 31, 1);
final NumberAxis yAxis = new NumberAxis();
final StackedAreaChart<Number, Number> sac =
new StackedAreaChart<>(xAxis, yAxis);
@Override
public void start(Stage stage) {
stage.setTitle("Area Chart Sample");
sac.setTitle("Temperature Monitoring (in Degrees C)");
XYChart.Series<Number, Number> seriesApril =
new XYChart.Series<>();
seriesApril.setName("April");
seriesApril.getData().add(new XYChart.Data(1, 4));
seriesApril.getData().add(new XYChart.Data(3, 10));
seriesApril.getData().add(new XYChart.Data(6, 15));
seriesApril.getData().add(new XYChart.Data(9, 8));
seriesApril.getData().add(new XYChart.Data(12, 5));
seriesApril.getData().add(new XYChart.Data(15, 18));
seriesApril.getData().add(new XYChart.Data(18, 15));
seriesApril.getData().add(new XYChart.Data(21, 13));
seriesApril.getData().add(new XYChart.Data(24, 19));
seriesApril.getData().add(new XYChart.Data(27, 21));
seriesApril.getData().add(new XYChart.Data(30, 21));
XYChart.Series<Number, Number> seriesMay =
new XYChart.Series<>();
seriesMay.setName("May");
seriesMay.getData().add(new XYChart.Data(1, 20));
seriesMay.getData().add(new XYChart.Data(3, 15));
seriesMay.getData().add(new XYChart.Data(6, 13));
seriesMay.getData().add(new XYChart.Data(9, 12));
seriesMay.getData().add(new XYChart.Data(12, 14));
seriesMay.getData().add(new XYChart.Data(15, 18));
seriesMay.getData().add(new XYChart.Data(18, 25));
seriesMay.getData().add(new XYChart.Data(21, 25));
seriesMay.getData().add(new XYChart.Data(24, 23));
seriesMay.getData().add(new XYChart.Data(27, 26));
seriesMay.getData().add(new XYChart.Data(31, 26));
Scene scene = new Scene(sac, 800, 600);
sac.getData().addAll(seriesApril, seriesMay);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
ãã®ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ãããšãå³33-3ã«ç€ºãã°ã©ããäœæãããŸãã
å³33-3 2ã€ã®é¢ã®ããç©äžãé¢ã°ã©ã

ãå³33-3 2ã€ã®é¢ã®ããç©äžãé¢ã°ã©ããã®èª¬æ
å³33-3ã«ç€ºãããŒã¿ãå³33-2ã®åãããŒã¿ãšæ¯èŒããŠãã ããã ç©äžãé¢ã°ã©ãå ã®é¢ã§ã¯ã暪軞äžã®ä»»æã®ç¹ã«ãããŠçžŠè»žã®å€ã环ç©ããŠè¡šç€ºãããŸãã ããšãã°ãç©äžãé¢ã°ã©ãå ã§5æ15æ¥ã«è¡šç€ºãããŠãã瞊軞äžã®å€ã¯36ã§ãããããã¯ãã®æ¥ã®å®éã®æž©åºŠãšã¯äžèŽããŸããã ãã®å€ã¯ã4æ15æ¥ãš5æ15æ¥ã®æž©åºŠã®çޝç©çµæã衚ããŸãã
JavaFXã¢ããªã±ãŒã·ã§ã³ã§é¢ã°ã©ããéçºããå Žåã瞊軞ã®ããŒã¿ã¯é¢ã°ã©ãã®ã¿ã€ã(AreaChartãŸãã¯StackedAreaChart)ã«å¿ããŠè§£éãããããšã«æ³šæããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ã®ã¿ã¹ã¯ã«æãé©ããããŒã¿è¡šçŸãéžæããŠãã ããã
軞ããããã£ãšãã£ãã¯ã»ããããã£ã®èšå®
å³33-2ããã³å³33-3ã®ãTemperature Monitoringãã¢ããªã±ãŒã·ã§ã³ã®åºåã¯ããŠãŒã¶ãŒãã¬ã³ããªãªæ¹æ³ã§ã¯ãªããããã©ã«ãã®äºéãã©ãŒãããã§è»žã«æ°å€ã衚瀺ãããŠããŸãã ããšãã°ãæ¥ä»ã¯æµ®åå°æ°ç¹å€ã§ã¯ãªãã1ãã31ãŸã§ã®ç¯å²å ã®æŽæ°ã§ããå¿ èŠããããŸãã
JavaFX SDK APIã«ã¯ãã°ã©ãã®è»žäžã§ã¬ã³ããªã³ã°ãããå€ã®å€èгã調æŽããããã«è€æ°ã®ã¡ãœãããçšæãããŠããŸãã å³33-4ã«ãã°ã©ãã®è»žã®ã¡ã€ã³èŠçŽ ã瀺ããŸããããã«ã¯ãç¯å²ã®æ°å€ã瀺ããã£ãã¯ã»ããŒã¯ãšãã£ãã¯ã»ã©ãã«ãå«ãŸããŸãã
äŸ33-3ã«ç€ºãããã«ãNumberAxisã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŸãã¯å¯Ÿå¿ããã¡ãœããã䜿çšããŠæ°å€ç¯å²å
ã®æå°å€ãšæå€§å€ãæå®ã§ããŸãã
äŸ33-3 暪軞ã®ããŒã¿ç¯å²ã®æå®
//Using the NumberAxis constructor final NumberAxis xAxis = new NumberAxis(1, 31, 1); //Using the corresponding methods xAxis.setLowerBound(1); xAxis.setUpperBound(31); xAxis.setTickUnit(1);
NumberAxisã¯ã©ã¹ã®3ãã©ã¡ãŒã¿ã®ã³ã³ã¹ãã©ã¯ã¿ã䜿çšããå Žåãæåã®ãã©ã¡ãŒã¿ã¯ç¯å²å
ã®æå°å€ãå®çŸ©ãã2çªç®ã®ãã©ã¡ãŒã¿ã¯ç¯å²å
ã®æå€§å€ã§ããã3çªç®ã®ãã©ã¡ãŒã¿ã¯ãã£ãã¯åäœ(軞äžã®2ã€ã®ãã£ãã¯ã»ããŒã¯éã®å€)ãå®çŸ©ããããšã«æ³šæããŠãã ããã
ãŸããæšªè»žã«å¯ãã£ãã¯ã衚瀺ããªãããã«ããå Žåã¯ãäŸ33-4ã«ç€ºãããã«ãminorTickCountããããã£ã«0ãæå®ããŸãã
ãã®ããããã£ã¯ãåäž»ãã£ãã¯ã»ããŒã¯éã«è¡šç€ºãããå¯ãã£ãã¯ã®æ°ãå®çŸ©ããŸãã ãã®å€ã0ã«èšå®ããããšã«ãããæšªè»žã®å¯ãã£ãã¯ãç¡å¹ã«ããŸãã
äŸ33-3ããã³äŸ33-4ã®ã³ãŒãè¡ããTemperature Monitoringãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ãããšã暪軞ãå³33-5ã«ç€ºãããã«å€æŽãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãã¯ã»ã©ãã«ã衚瀺ããå¿
èŠããªãå ŽåãsetTickLabelsVisibleã¡ãœããã«falseå€ã䜿çšããŸãã åæ§ã«ããã£ãã¯ã»ããŒã¯ã衚瀺ããªãå ŽåãsetTickMarkVisibleã«falseå€ã䜿çšããŸãã
瞊軞ã®å€ã®ç¯å²ã調æŽããã«ã¯ãäŸ33-5ã«ç€ºãã³ãŒãè¡ã䜿çšããŸãã
å¯ãã£ãã¯ã»ããŒã¯ãšäž»ãã£ãã¯ã»ããŒã¯ã®é·ããåãã«ãªãããã«ãã£ãã¯ã»ããŒã¯ã調æŽããããšãã§ããŸãã äŸ33-6ã«ç€ºãããã«ãtickLengthããã³minorTickLengthããããã£ã䜿çšããŸãã
äŸ33-6 å¯ãã£ãã¯ã»ããŒã¯ãšäž»ãã£ãã¯ã»ããŒã¯ã®é·ãã®èª¿æŽ
yAxis.setMinorTickLength(yAxis.getTickLength());
äŸ33-5ããã³äŸ33-6ã®ã³ãŒãè¡ããTemperature Monitoringãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ãããšã瞊軞ãå³33-6ã«ç€ºãããã«å€æŽãããŸãã
è² ã®å€ã®è¿œå
ãTemperature Monitoringãã¢ããªã±ãŒã·ã§ã³ã®çžŠè»žã¯NumberAxisã¯ã©ã¹ã䜿çšããŠäœæããããããé¢ã°ã©ãã»ããŒã¿ã«è² ã®å€ãæå®ã§ããŸãã
äŸ33-7ã«ç€ºãããã«ãããŒã¿ã®ç³»åããã1ã€äœæããŸãã
äŸ33-7 è² ã®å€ãããããŒã¿ã®ç³»åã®è¿œå
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class AreaChartSample extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Area Chart Sample");
final NumberAxis xAxis = new NumberAxis(1, 31, 1);
xAxis.setMinorTickCount(0);
final NumberAxis yAxis = new NumberAxis(-5, 27, 5);
yAxis.setMinorTickLength(yAxis.getTickLength());
yAxis.setForceZeroInRange(false);
final AreaChart<Number,Number> ac =
new AreaChart<Number,Number>(xAxis,yAxis);
ac.setTitle("Temperature Monitoring (in Degrees C)");
XYChart.Series seriesApril= new XYChart.Series();
seriesApril.setName("April");
seriesApril.getData().add(new XYChart.Data(0, 4));
seriesApril.getData().add(new XYChart.Data(3, 10));
seriesApril.getData().add(new XYChart.Data(6, 15));
seriesApril.getData().add(new XYChart.Data(9, 8));
seriesApril.getData().add(new XYChart.Data(12, 5));
seriesApril.getData().add(new XYChart.Data(15, 18));
seriesApril.getData().add(new XYChart.Data(18, 15));
seriesApril.getData().add(new XYChart.Data(21, 13));
seriesApril.getData().add(new XYChart.Data(24, 19));
seriesApril.getData().add(new XYChart.Data(27, 21));
seriesApril.getData().add(new XYChart.Data(30, 21));
XYChart.Series seriesMay = new XYChart.Series();
seriesMay.setName("May");
seriesMay.getData().add(new XYChart.Data(0, 20));
seriesMay.getData().add(new XYChart.Data(3, 15));
seriesMay.getData().add(new XYChart.Data(6, 13));
seriesMay.getData().add(new XYChart.Data(9, 12));
seriesMay.getData().add(new XYChart.Data(12, 14));
seriesMay.getData().add(new XYChart.Data(15, 18));
seriesMay.getData().add(new XYChart.Data(18, 25));
seriesMay.getData().add(new XYChart.Data(21, 25));
seriesMay.getData().add(new XYChart.Data(24, 23));
seriesMay.getData().add(new XYChart.Data(27, 26));
seriesMay.getData().add(new XYChart.Data(31, 26));
XYChart.Series seriesMarch = new XYChart.Series();
seriesMarch.setName("March");
seriesMarch.getData().add(new XYChart.Data(0, -2));
seriesMarch.getData().add(new XYChart.Data(3, -4));
seriesMarch.getData().add(new XYChart.Data(6, 0));
seriesMarch.getData().add(new XYChart.Data(9, 5));
seriesMarch.getData().add(new XYChart.Data(12, -4));
seriesMarch.getData().add(new XYChart.Data(15, 6));
seriesMarch.getData().add(new XYChart.Data(18, 8));
seriesMarch.getData().add(new XYChart.Data(21, 14));
seriesMarch.getData().add(new XYChart.Data(24, 4));
seriesMarch.getData().add(new XYChart.Data(27, 6));
seriesMarch.getData().add(new XYChart.Data(31, 6));
Scene scene = new Scene(ac,800,600);
ac.getData().addAll(seriesMarch, seriesApril, seriesMay);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
å³33-7ã«ãMarchãAprilãããã³Mayã®3ãæã«ã€ããŠå€©åããŒã¿ã衚瀺ãããã倿ŽããããTemperature Monitoringãã¢ããªã±ãŒã·ã§ã³ã瀺ããŸãã
é¢ã°ã©ãã®ã¹ã¿ã€ã«èšå®
äŸ33-7ã®åæã®è²ã¯ãaddAllã¡ãœããã§å®£èšãããŠãã察å¿ããããŒã¿ã®ç³»åã®é åºã«ãã£ãŠå®çŸ©ãããŸãã ããããå³33-7ã§Marchã®é¢ãé»è²ã§å¡ãããŠããçç±ã§ãã AreaChartãªããžã§ã¯ãã®è²ã¯CSSãä»ããŠèšå®ã§ããŸãã
Chart.cssãã¡ã€ã«ãäœæããAreaChartSampleã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ã»ã¯ã©ã¹ãšåããã£ã¬ã¯ããªã«ä¿åããŸãã äŸ33-8ã«ç€ºãè¡ãChart.cssãã¡ã€ã«ã«è¿œå ããŸãã
äŸ33-8 é¢ã°ã©ãã®CSSã¹ã¿ã€ã«
.default-color0.chart-area-symbol { -fx-background-color: #e9967a, #ffa07a; }
.default-color1.chart-area-symbol { -fx-background-color: #f0e68c, #fffacd; }
.default-color2.chart-area-symbol { -fx-background-color: #dda0dd, #d8bfd855; }
.default-color0.chart-series-area-line { -fx-stroke: #e9967a; }
.default-color1.chart-series-area-line { -fx-stroke: #f0e68c; }
.default-color2.chart-series-area-line { -fx-stroke: #dda0dd; }
.default-color0.chart-series-area-fill { -fx-fill: #ffa07a55; }
.default-color1.chart-series-area-fill { -fx-fill: #fffacd55; }
.default-color2.chart-series-area-fill { -fx-fill: #d8bfd855; }
chart-area-symbol CSSã¯ã©ã¹ã¯ãç¹å®ã®ããŒã¿ç³»åã®ã°ã©ãå¡äŸå
ã®èšå·ã®ãã©ã¡ãŒã¿ãå®çŸ©ããŸãã äŸ33-8ã§ã¯ãã°ã©ãã®å¡äŸã®åã®å
åŽãšå€åŽã®è²ãèšå®ããŠããŸãã
chart-series-area-line CSSã¯ã©ã¹ã¯ãé¢ã°ã©ãã®ç·ã®ãã©ã¡ãŒã¿ãèšå®ããŸãã ãã®äŸã§ã¯ãç·æç»ã®è²ã§ãã chart-series-area-fill CSSã¯ã©ã¹ã¯ãé¢ã®è²ãšäžéæåºŠã¬ãã«ãå®çŸ©ããŸãã
ãããã®ã¹ã¿ã€ã«ã¯ãäŸ33-9ã«ç€ºãããã«ãSceneã¯ã©ã¹ã®getStylesheets()ã¡ãœããã䜿çšããŠAreaChartSampleã¢ããªã±ãŒã·ã§ã³ã«é©çšãããŸãã
äŸ33-9 ã·ãŒã³ãžã®CSSã¹ã¿ã€ã«ã®é©çš
scene.getStylesheets().add("areachartsample/Chart.css");
ãã®ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ãããšãå³33-8ã«ç€ºãããã«ã倿Žãããé¢ã°ã©ãã®å€èгãçæãããŸãã
å³33-8 ã¹ã¿ã€ã«èšå®ãããé¢ã°ã©ã

ãå³33-8 ã¹ã¿ã€ã«èšå®ãããé¢ã°ã©ããã®èª¬æ
JavaFXã¢ããªã±ãŒã·ã§ã³ã§ã®CSSã¹ã¿ã€ã«ã®äœ¿çšã«ã€ããŠããã«åŠç¿ããã«ã¯ããCSSã«ãããã£ãŒãã®ã¹ã¿ã€ã«èšå®ããåç §ããŠãã ããã
é¢é£APIããã¥ã¡ã³ã






