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

+ Recent posts