이번에는 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 |