-
JavaFX - 차트 컨트롤고급 JAVA/FX 2020. 5. 23. 11:58
차트 컨트롤
차트 컨트롤들은 javafx.scene.chart 패키지에 포함되어 있고,
다양항 차트를 생성하는 컨트롤을 제공함.
종류 : PieChart, LineChart, AreaChart, BarChart, BubbleChart, ScatterChart
PieChart : <PieChart/> 끝! X축과 Y축이 없으므로 정의할 필요 X
LineChart,AreaChart,BarChart 는 X축과 Y축의 정의가 필요!
ex) BarChart
X축이 위 아래 있고, Y축이 좌우에 있다 => 눈금을 나타낼 위치를 지정해야함.
<BarChart> <xAxis> <CategoryAxis side="BOTTOM"/> // 분류 눈금을 아래 축에 나타냄. </xAxis> <yAxis> <NumberAxis side="LEFT" /> // 숫자 눈금을 왼쪽 축에 나타냄. </yAxis> </BarChart>
컨트롤러는 DB나 네트워크에서 차트의 데이터를 전달받아 차트컨트롤에 추가함.
ex)
pieChart.setData(FXCollections.observableArrayList( new PieChart.Data("봄", 20), new PieChart.Data("여름", 32), new PieChart.Data("가을", 24), new PieChart.Data("겨울", -7) ));
X축과 Y축이 필요한 차트에서 데이터 추가 방법. (LineChart,AreaChart,BarChart모두 동일)
XYChart.Series s1 = new XYChart.Series(); s1.setName("시리즈이름"); s1.setData(FXCollections.observableArrayList( new XYChart.Data("네이버", 1), new XYChart.Data("블로그", 2), new XYChart.Data("부르곰", 3) )); barChart.getData().add(s1); // 차트에 시리즈 추가
XYChart.Series : 하나의 그래프를 의미.
XYChart.Series를 그래프 갯수에 맞게 생성하면 여러 개의 그래프가 겹쳐보인다.
예제
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.chart.*?> <?import java.lang.*?> <?import javafx.geometry.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.control.*?> <HBox xmlns:fx="http://javafx.com/fxml" fx:controller="thisisjava.RootController" prefHeight="250" prefWidth="850" > <children> <PieChart fx:id="pieChart" /> <BarChart fx:id="barChart"> <xAxis> <CategoryAxis side="BOTTOM" /> </xAxis> <yAxis> <NumberAxis side="LEFT" /> </yAxis> </BarChart> <AreaChart fx:id="areaChart"> <xAxis> <CategoryAxis side="TOP" /> </xAxis> <yAxis> <NumberAxis side="RIGHT" /> </yAxis> </AreaChart> </children> </HBox> 자바1) package thisisjava; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.chart.AreaChart; import javafx.scene.chart.BarChart; import javafx.scene.chart.PieChart; import javafx.scene.chart.XYChart; public class RootController implements Initializable { @FXML private PieChart pieChart; @FXML private BarChart barChart; @FXML private AreaChart areaChart; @Override public void initialize(URL location, ResourceBundle resources) { pieChart.setData(FXCollections.observableArrayList( new PieChart.Data("10대", 12), new PieChart.Data("20대", 18), new PieChart.Data("30대", 20), new PieChart.Data("40대이상", 50) )); XYChart.Series series1 = new XYChart.Series(); series1.setName("남자"); series1.setData(FXCollections.observableArrayList( new XYChart.Data("2015", 70), new XYChart.Data("2016", 40), new XYChart.Data("2017", 50), new XYChart.Data("2018", 30) )); XYChart.Series series2 = new XYChart.Series(); series2.setName("여자"); series2.setData(FXCollections.observableArrayList( new XYChart.Data("2015", 30), new XYChart.Data("2016", 60), new XYChart.Data("2017", 50), new XYChart.Data("2018", 60) )); barChart.getData().add(series1); barChart.getData().add(series2); XYChart.Series series3 = new XYChart.Series(); series3.setName("평균온도"); series3.setData(FXCollections.observableArrayList( new XYChart.Data("봄", 20), new XYChart.Data("여름", 32), new XYChart.Data("가을", 24), new XYChart.Data("겨울", -7) )); areaChart.getData().add(series3); } } 자바2) package thisisjava; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class AppMain extends Application { @Override public void start(Stage primaryStage) throws Exception { Parent root = (Parent)FXMLLoader.load(getClass().getResource("root.fxml")); Scene scene = new Scene(root); primaryStage.setTitle("ChartControl"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
'고급 JAVA > FX' 카테고리의 다른 글
javaFX - CSS스타일 (외부 CSS스타일 : 선택자, css파일 적용) (0) 2020.05.23 javaFX - CSS (inline 스타일) (0) 2020.05.23 javaFX - view 컨트롤 (ImageView, ListView, TableView) (0) 2020.05.22 javaFX - 입력 컨트롤 (0) 2020.05.22 javaFX 컨트롤 - 버튼 컨트롤 (0) 2020.05.22