Main은 그대로 냅두고 





Border Pane Center 위에 Pane(400, 400)


Pane 위에 


MediaView - Code : fx:id - mediaView


Button - Code : On Action - fileOpen


Controller class 설정으로 마치고 코딩



package app;

import java.io.File;
import java.net.URL;
import java.util.ResourceBundle;

import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;

public class MainController implements Initializable{
	
	@FXML private MediaView mediaView;
	
	Media media;
	MediaPlayer player;

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		System.out.println("FXML 완");
	}
	
	public void fileOpen() {
		// 파일 선택창
		FileChooser fc = new FileChooser();
		fc.setTitle("미디어 선택");
		fc.setInitialDirectory(new File("C:/"));
		
		// 확장자 필터링(선택 사항)
		ExtensionFilter audioType = new ExtensionFilter("오디오", "*.mp3");
		ExtensionFilter videoType = new ExtensionFilter("비디오", "*.mp4", "*.avi");
		fc.getExtensionFilters().addAll(audioType, videoType);
		
		// 띄우기
		File selectedFile = fc.showOpenDialog(null); // 창위치 null은 최상단 좌측을 의미
//		System.out.println(selectedFile.toString());
		System.out.println(selectedFile.toURI().toString());
		String path = selectedFile.toURI().toString();
		
		// 미디어 생성 -> 플레이어 등록 -> 뷰에 등록
		media = new Media(path);
		player = new MediaPlayer(media);
		mediaView.setMediaPlayer(player);
		mediaView.setLayoutX(media.getWidth());
		mediaView.setLayoutY(media.getHeight());
		player.setAutoPlay(true);
		
		// 크기 조정, 창의 크기에 따라서 영상 사이즈 변경
		DoubleProperty width = mediaView.fitWidthProperty();
		DoubleProperty height = mediaView.fitHeightProperty();
		
		width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width"));
		height.bind(Bindings.selectDouble(mediaView.sceneProperty(), "height"));
	}	
}



설명은 코드의 주석


'JavaFX > 01.Node 추가' 카테고리의 다른 글

[JAVA FX]01-16.Popup 띄우기 (방법 1,2)  (0) 2018.09.12
[JAVA FX]01-15.AudioPlayer  (0) 2018.09.12
[JAVA FX]01-13.BarChart  (0) 2018.09.11
[JAVA FX]01-12.Line Chart, Random  (0) 2018.09.11
[JAVA FX]01-11.PieChart  (0) 2018.09.11

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

Main에는 따로 터치없이 Scene Builder




BorderPane의 Center 위에 Pane(400, 400)을 하나 배치


그 위에


LineChart - Code : fx:id - linechart


Button - code : On Action - multiChart


Controller class 설정 후 코딩



package app;

import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.XYChart;

public class MainController implements Initializable{

	@FXML LineChart<String, Integer> lineChart; // Generic은 차트의 X축과 Y축을 의미 
	XYChart.Series<String, Integer> series = null;

	
	@Override
	public void initialize(URL location, ResourceBundle resources) {
		System.out.println("FXML 완");
		drawChart();
	}
	
	// 차트 그리기
	public void drawChart() {
		series = new XYChart.Series<String, Integer>();
		series.getData().add(new XYChart.Data<String, Integer>("1차", 30)); // 특징으로 무엇을 할 때마다 getData
		series.getData().add(new XYChart.Data<String, Integer>("2차", 50));
		series.getData().add(new XYChart.Data<String, Integer>("3차", 20));
		series.getData().add(new XYChart.Data<String, Integer>("4차", 70));
		series.setName("Month Pay");
		// 라인차트에 시리즈 추가
		lineChart.getData().add(series); // 다른 라인을 추가하고 싶으면 다른 series 만들면 된다.
		
		series = new XYChart.Series<String, Integer>();
		series.getData().add(new XYChart.Data<String, Integer>("1차", 150)); // 특징으로 무엇을 할 때마다 getData
		series.getData().add(new XYChart.Data<String, Integer>("2차", 120));
		series.getData().add(new XYChart.Data<String, Integer>("3차", 140));
		series.getData().add(new XYChart.Data<String, Integer>("4차", 180));
		series.setName("Year Pay");
		// 라인차트에 시리즈 추가
		lineChart.getData().add(series); // 다른 라인을 추가하고 싶으면 다른 series 만들면 된다.
		
		
	}
	
	public void multiChart() {
		 // 기존 라인 제거
		lineChart.getData().clear();
		series = null;
		for(int i = 0; i < 4; i++) {
			// 새로운 시리즈 만들기
			series = new XYChart.Series<String, Integer>();
			// 새로운 데이터 추가(5개)
			for(int j = 1; j < 6; j++) {
				series.getData().add(new XYChart.Data<String, Integer>(j + "차", 30 + random()));
			}
			series.setName("pay " + i);
			// 라인 차트에 추가
			lineChart.getData().add(series);
		}
	}
	
	// 임의의 값을 추출
	public int random() {
		Random rand = new Random();
		return rand.nextInt(100); // 1~100의 랜덤값
	}
}


랜덤 값을 얻을때엔 Random을 객체화하여 nextInt(범위) 메소드를 사용


결과는 LineChart 하나가 나올것이고 버튼을 누르면 새로운 차트 항목이 추가된다

+ Recent posts