Main은 터치 하지 않고 FXML
BoderPane Center위에 Pane(400, 400) 추가
BarChart - Code : fx:id - chart
상황에 따라서 Properties에서 Animate를 끄면 더 자연스러울 수 있음
BarChart의 + 버튼을 눌러 펼치면 나오는 CategoryAxis - Code : fx:id - Xaxis
Button - Code : fx:id - style1
Button - Code : fx:id - style2
package app;
import java.net.URL;
import java.util.Arrays;
import java.util.Random;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.XYChart;
public class MainController implements Initializable{
// Number은 다른 숫자형의 최상위, Integer, Long, Float, Double 다 사용가능, 다형성
@FXML private BarChart<String, Number> chart; // 제네릭은 X, Y축
@FXML private CategoryAxis Xaxis; // X축
// 카테고리의 레이블을 담을 자료 구조
String[] cates = {"속도", "평점", "주행거리", "안정성"};
// 시리즈를 담을 자료 구조
XYChart.Series<String, Number> series = null; // 그래프의 값을 담을 series 변수
private ObservableList<String> xLables = FXCollections.observableArrayList(); // 카테고리를 만들 xLables 배열 변수
@Override
public void initialize(URL location, ResourceBundle resources) {
System.out.println("FXML 완");
xLables.addAll(Arrays.asList(cates)); // 한번에 다 넣기, add로 하나씩 넣어도 됨
Xaxis.setCategories(xLables);
}
public void style1() { // 바 하나짜리 차트
// 바 추가
series = new XYChart.Series<String, Number>();
// 기존 차트 초기화
chart.getData().clear();
// 바의 이름 설정
series.setName("자동차");
// 데이터 생성
for(int i = 0; i < cates.length; i++) {
series.getData().add(new XYChart.Data<String, Number>(xLables.get(i), random()));
}
// 차트에 추가
chart.getData().add(series);
}
// 여러개의 바 추가
public void style2() {
// 시리즈를 여러개(4개) 생성
chart.getData().clear(); // 차트 초기화, 안하면 바가 계속 추가됨
String[] names = {"코인", "떡락", "열차", "뿜붐"};
for(int i = 0; i < names.length; i++) {
// 시리즈를 여러개(4개) 생성
series = new XYChart.Series<String, Number>();
// 시리즈의 이름(4개) 생성
series.setName(names[i]);
// 시리즈별 데이터 생성(4개)
for(int j = 0; j < cates.length; j++) {
series.getData().add(new XYChart.Data<String, Number>(xLables.get(j), random()));
}
// 차트에 추가
chart.getData().add(series);
}
}
// 임의의 값을 추출
public int random() {
Random rand = new Random();
return rand.nextInt(9) + 1; // 1~100의 랜덤값
}
}
스타일 1을 누를 경우 각 카테고리에 바가 1가지 생성되며
스타일 2를 누르면 4개씩 생성된다.
'JavaFX > 01.Node 추가' 카테고리의 다른 글
| [JAVA FX]01-15.AudioPlayer (0) | 2018.09.12 |
|---|---|
| [JAVA FX]01-14.Media Player (0) | 2018.09.11 |
| [JAVA FX]01-12.Line Chart, Random (0) | 2018.09.11 |
| [JAVA FX]01-11.PieChart (0) | 2018.09.11 |
| [JAVA FX]01-10.Progress Bar, Progress Indicator, Thread (0) | 2018.09.11 |