티스토리 뷰
들어가며
- JavaFX를 이용해 실시간으로 업데이트되는 Timer 컨트롤을 구현해보고자 합니다.
- 원본 소스는 아래 위치에 있습니다.
rlawlstjd0077/JavaFxPlayGround
Contribute to rlawlstjd0077/JavaFxPlayGround development by creating an account on GitHub.
github.com
구현
Timer.fxml
<fx:root type="StackPane" prefHeight="400.0" prefWidth="260.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Rectangle height="50.0"
style="-fx-fill: #2d4035; -fx-stroke: transparent; -fx-arc-height: 7; -fx-arc-width: 7; -fx-stroke-type: inside; -fx-stroke-width: 0;"
width="400.0"/>
<Text fx:id="time"
style="-fx-fill: #FFF5E2; -fx-font-weight: bold; -fx-font-size: 30px; -fx-stroke-type: outside; -fx-stroke-width: 0;"
text="0000-00-00 00:00:00">
<StackPane.margin>
<Insets left="20.0" right="20.0"/>
</StackPane.margin>
</Text>
</children>
</fx:root>
-
따로 CSS는 없어서 디자인 좀 구립니다..
-
시각이 표현될 TextView를 Rectangle을 이용하여 만들어 줍니다.
- fx:root가 궁금하다면 아래 글 참고
- fx:root가 궁금하다면 아래 글 참고
(JavaFX) FXML 작성 시 "" 를 사용하는 이유
란 JavaFX 2.2에 새로 추가된 .fxml 파일 작성 사용하는 root Tag이다. jinseongsoft.tistory.com
TimerViewModel.java
public class TimerViewModel {
private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private final StringProperty time = new SimpleStringProperty();
private ScheduledFuture<?> scheduledFuture;
public TimerViewModel() { startRealTimeMode(); }
public void startRealTimeMode() {
stopTimer();
scheduledFuture = Executors.newSingleThreadScheduledExecutor()
.scheduleWithFixedDelay(() -> Platform.runLater(() -> setTime(ZonedDateTime.now(ZoneId.of("Asia/Seoul")))),
0,
500,
TimeUnit.MILLISECONDS);
}
private void setTime(ZonedDateTime targetTime) { time.set(targetTime.format(TIME_FORMAT)); }
private void stopTimer() {
if (scheduledFuture != null && !scheduledFuture.isDone()) {
scheduledFuture.cancel(true);
scheduledFuture = null;
}
}
public StringProperty timeProperty() { return time; }
}
-
실시간으로 변경되는 시각 데이터를 가지고 있는 ViewModel 클래스입니다.
-
내부에서 Timer를 통하여 1초마다 시각을 업데이트 해줍니다.
-
시각 정보는
StringProperty
로 제공이 되며 후에 Text를 표현할 컨트롤에 bind되어 활용될 예정입니다.
TimerController.java
public class TimerController extends StackPane {
@FXML
private Text time;
TimerViewModel viewModel;
public TimerController() {
viewModel = new TimerViewModel();
FxUtil.loadFxml(this);
init();
}
private void init() {
time.textProperty().bind(viewModel.timeProperty());
}
}
-
Timer를 전시할 Controller 클래스 입니다.
- FxUtil.loadFxml(this)는 FXML 파일을 로딩하는 코드를 Util 클래스로 분리한 것으로 이 곳을 참고
-
내부에서
TimerViewModel
인스턴스를 생성하여 viewmodel의timeProperty()
를 TextView 역할을 하는time
에 바인딩 시켜줍니다.
실행
TimerTest.java
public class TimerTest extends Application {
@Test
public void test() {
launch();
}
@Override
public void start(Stage primaryStage) throws IOException {
TimerController controller = new TimerController();
primaryStage.setScene(new Scene(controller));
primaryStage.setTitle("Timer Test");
primaryStage.show();
}
}
- 테스트 코드를 만들어 전시해주도록 합시다.
결과 화면
- 기능은 잘 동작하는군요. (디자인은 신경쓰지 않겠습니다)
관련 글
[JavaFx] Tray Icon 전시 방법
이번 시간에는 JavaFX에서 Tray Icon을 전시하는 방법에 대해서 알아보도록 하겠습니다. Tray Icon이란? Tray Icon은 작업 표시줄에 표시되는 아이콘입니다. 아래와 같이 말이죠. JavaFX Application을 개발하면..
jinseongsoft.tistory.com
(JavaFX) JavaFX 애니메이션 사용법
이번 시간에는 JavaFX에서 애니메이션을 사용하는 방법에 대해서 알아보도록 하겠습니다. JavaFX 애니메이션 종류 Transitions 내부 타임라인을 이용한 애니메이션 Fade Transition 주어진 시간 동안 투명도를 변..
jinseongsoft.tistory.com
[JavaFx] Tray Icon에 메뉴 추가 방법 (Tray Menu 사용법)
들어가며 JavaFX의 Tray Icon에 메뉴를 추가하는 방법에 대해서 알아보도록 하겠습니다. Tray Menu Tray Icon에 추가하는 메뉴는 아래와 같은 형태로 Tray Icon에 오른쪽 마우스 클릭을 했을 때 전시되는 메뉴를..
jinseongsoft.tistory.com
끝으로
이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
'프로그래밍 > JavaFX' 카테고리의 다른 글
(JavaFX) JavaFX TableView 사용법 ver.2 (2) | 2020.03.18 |
---|---|
[JavaFX] JavaFX UI Test Code 작성 방법 (0) | 2020.03.14 |
(JavaFX) FXML 작성 시 "<fx:root>" 를 사용하는 이유 (0) | 2020.02.27 |
(JavaFX) JavaFX 애니메이션 사용법 (0) | 2020.02.01 |
[JavaFx] Tray Icon에 메뉴 추가 방법 (Tray Menu 사용법) (1) | 2019.11.16 |
- Total
- Today
- Yesterday
- java
- springboot
- JavaFX 종료
- 일본 자전거 여행
- windows
- 배낭여행
- git
- 이펙티브
- 일본여행
- 이펙티브자바
- TableView
- JavaFX
- 인텔리제이
- intelij
- 일본 배낭여행
- effectivejava
- effective java
- JavaFX Window Close
- 이펙티브 자바
- JavaFX 테이블뷰
- 일본 여행
- Java UI
- 스프링부트
- 자전거
- 자바
- 자전거 여행
- 방통대 과제물
- 배낭 여행
- JavaFX Table View
- 텐트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |