본문 바로가기
자바

자바 자바fx 쓰레드를 이용한 시계 만들기 예제 [김철수홍길동]

by 세상 모든 것 들은 그 자신을 위해 존재한다. 2021. 2. 3.

사용 예제 ) 코드를 복붙 하여 실행해 보시기 바랍니다.

설명은 주석과 코드 아랫부분에 있습니다.

1. 메인 파일 예제입니다.(title 만 다르고 내용이 거의 변하지 않습니다.)

package timer;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application {

	@Override
	public void start(Stage primaryStage) throws Exception {


		Parent root=FXMLLoader.load(getClass().getResource("root.fxml"));
		Scene scene=new Scene(root);
		
		primaryStage.setTitle("시 계");
		
		//창크기 조절
		primaryStage.setResizable(false);
		primaryStage.setScene(scene);
		
		//타이클바 숨기기
		//primaryStage.initStyle(StageStyle.UNDECORATED);
		primaryStage.show();
		
		//항상위
		primaryStage.setAlwaysOnTop(true);
	}

	public static void main(String[] args) {
		launch(args);

	}

}

2. root.fxml 파일 예제입니다.

그대로 복붙 하여 테스트해보시면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="109.0" prefWidth="791.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="timer.EHMain">
   <children>
      <Label fx:id="lblTime" alignment="CENTER" layoutX="-1.0" prefHeight="105.0" prefWidth="726.0" style="-fx-background-color: black; -fx-text-fill: white;" text="yyyy.MM.dd E HH:mm:ss:SSS">
         <font>
            <Font size="47.0" />
         </font>
      </Label>
      <Button fx:id="btnStart" layoutX="727.0" layoutY="55.0" mnemonicParsing="false" onAction="#handleBtnStart" prefHeight="51.0" prefWidth="64.0" text="start">
         <font>
            <Font size="18.0" />
         </font>
      </Button>
      <Button fx:id="btnStop" layoutX="727.0" mnemonicParsing="false" onAction="#handleBtnStop" prefHeight="58.0" prefWidth="64.0" text="stop">
         <font>
            <Font size="18.0" />
         </font>
      </Button>
   </children>
</AnchorPane>

3. MainHandler.java 핸들러 파일입니다.

그대로 복붙 하여 테스트하시길 바랍니다.

package timer;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

public class MainHandler implements Initializable {
	@FXML private Label lblTime;
	@FXML private Button btnStart;
	@FXML private Button btnStop;
	
	private boolean stop;
	
	@Override
	public void initialize(URL location, ResourceBundle resources) {

	}
	
	public void handleBtnStart(ActionEvent e) {
		stop = false;
		Thread thread = new Thread() {
			@Override
			public void run() {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd E HH:mm:ss:SSS", Locale.US);
				while(!stop) {
					String strTime = sdf.format(new Date());
					Platform.runLater(()->{
						lblTime.setText(strTime);
					});
					try { Thread.sleep(100); } catch (InterruptedException e) {}
				}
			};
		};
		thread.setDaemon(true);
		thread.start();
		
	}
	
	public void handleBtnStop(ActionEvent e) {
		Platform.exit();
		
	}
}







 예제를 기본으로해서

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd E HH:mm:ss:SSS", Locale.US);

이부분만 변경하면 원하는 형식의 시계를 만들수 있겠습니다.

 

그리고 딜레이부분을 조절해 가시면서 원하는 움직임을 만들면 되겠습니다.

try { Thread.sleep(100); } catch (InterruptedException e) {}

 

자바로 만든 시계 동영상 입니다.

끝.

 

세상모든것들은 그자신을 위해 존재한다.

728x90
반응형

댓글