이번에는 Main을 Parent로 바꾼다.


Parent root = FXMLLoader.load(getClass().getResource("main.fxml"));


primaryStage.setTitle("Progress 예제");




Border를 지워주고 Pane을 추가

Pane(400, 400) 위에

Label : Code : fx:id - result

ProgressBar : Code : fx:id - bar

ProgressIndicator : Code : fx:id - pi

Button(+) : Code : OnAction - plus

Button(auto) : Code : OnAction - auto

Button(-) : Code : OnAction - minus

Controller Class 설정을 마치고 코딩

다음 코드는 버튼을 누를 경우 +, - 가 되고 그 값을 Label에 띄우고 Progress bar, Indicator에도 띄운다.

또한 auto에 Thread를 적용하여 자동으로 증가하게끔 코딩





package app;

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

import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;

public class MainController implements Initializable{

	@FXML private Label result;
	@FXML private ProgressBar bar;
	@FXML private ProgressIndicator pi;
	private int percent = 0;
	
	@Override
	public void initialize(URL location, ResourceBundle resources) {
		System.out.println("FXML 완");
	}
	
	public void plus() {
		if(percent<100) {
			percent++;
		}else {
			percent = 0;
		}
		print(percent);
	}
	
	public void minus() {
		if(percent > 0) {
			percent--;
		}else {
			percent = 100;
		}
		print(percent);
	}
	
	public void print(int num) {
		result.setText(num + "%");
		bar.setProgress(num*0.01); // 1을 100%로 잡으므로 0.01을 곱한다.
		pi.setProgress(num*0.01);
	}
	
	public void auto() {
		// 스레드로 pi의 % 채우기
		Thread th = new Thread() {
			@Override
			public void run() {
				// 방법 1 (충돌 발생)
//				while(true) { // 스레드를 임의로 만들면 작동은 되지만 예외를 발생
//								// FX등록 스레드만 쓰라는것
//					try { // 코드 안의 값들은 상관없는데 UI도 하나의 스레드로 서로 간섭이 일어나 충돌
//						plus(); // 코드 안의 값들은 상관없는데 UI도 하나의 스레드로 서로 간섭이 일어나 충돌
//						Thread.sleep(100);
//					} catch (InterruptedException e) {
//						e.printStackTrace();
//					}
//				}
				
				// 방법 2, 1의 해결법
				while(true) {
					Platform.runLater(()->{ // 자바 8버젼부터 사용가능, UI 충돌이 예상되는 지점에 사용
						plus();
					});
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		th.start();
		
	}
}


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

[JAVA FX]01-12.Line Chart, Random  (0) 2018.09.11
[JAVA FX]01-11.PieChart  (0) 2018.09.11
[JAVA FX]01-09.속성 감시, 속성 바인딩  (0) 2018.09.10
[JAVA FX]01-08.Menu 바 추가  (0) 2018.09.10
[JAVA FX]01-07.TreeView  (0) 2018.09.10

+ Recent posts