본문 바로가기
2023/PROJECT

[JAVA]이미지창에 api캘린더 추가

by Or0i쿠 2023. 6. 19.

캘린더 오픈 API를 이미지 창에 추가하려면 먼저 캘린더를 가져들인 다음 이미지 창에 출력하도록 코드를 수정해야 합니다. JavaFX를 사용하여 캘린더를 가져오고 간단하게 이미지 창에 표시할 수 있습니다. 다음과 같이 작업을 수행할 수 있습니다.

  1. JavaFX 라이브러리를 프로젝트에 연결하세요. 프로젝트 빌드 도구(Maven 또는 Gradle)를 사용하여 라이브러리를 가져오거나 직접 다운로드하여 프로젝트에 추가합니다.
  2. `ImageDisplay` 클래스를 JavaFX를 사용하도록 수정하고 캘린더 오픈 API 추가합니다. 아래는 코드 예시입니다.
import javafx.application.Application;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import javax.swing.*;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javafx.scene.control.DatePicker;

public class ImageDisplay extends JFrame {
    private String imagePath;
    private String anotherImagePath;
    private Rectangle clickableArea;
    private final JFXPanel fxPanel = new JFXPanel();

    public ImageDisplay(String imagePath, String anotherImagePath, Rectangle clickableArea) {
        this.imagePath = imagePath;
        this.anotherImagePath = anotherImagePath;
        this.clickableArea = clickableArea;

        add(fxPanel);
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        showImage();
    }

    public void showImage() {
        SwingUtilities.invokeLater(() -> {
            try {
                BufferedImage image = ImageIO.read(new File(imagePath));
                ImageIcon icon = new ImageIcon(image);
                JLabel label = new JLabel(icon);
                this.add(label);
                this.pack();

                this.addMouseListener(new MouseAdapter() {
                    public void mouseClicked(MouseEvent e) {
                        if (clickableArea.contains(e.getPoint())) {
                            showDatePicker();
                        }
                    }
                });

                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setVisible(true);

            } catch (IOException e) {
                System.out.println("Error reading image: " + e.getMessage());
                System.exit(1);
            }
        });
    }

    private void showDatePicker() {
        SwingUtilities.invokeLater(() -> {
            Runtime.getRuntime().runFinalization();
            javafx.application.Platform.runLater(() -> {
                DatePicker datePicker = new DatePicker();
                Stage datePickerStage = new Stage();
                StackPane stackPane = new StackPane(datePicker);
                Scene scene = new Scene(stackPane);

                datePickerStage.setTitle("날짜 선택");
                datePickerStage.setScene(scene);
                datePickerStage.show();
            });
        });
    }
}

다음과 같이 코드를 수정하면, 원하는 이미지 영역을 클릭할 때 팝업으로 캘린더가 출력됩니다. 이 코드를 사용하면, 이미지 창에 캘린더를 성공적으로 추가할 수 있습니다. 참고: JavaFX를 사용하려면 Java 11 이상의 버전이 필요합니다. Java 8을 사용하면 JavaFX가 Java에 포함되어 있지만 다양한 호환성 문제가 있을 수 있습니다. 최신 버전의 Java를 사용하여 이러한 문제를 해결하는 것이 좋습니다.

'2023 > PROJECT' 카테고리의 다른 글

[JAVA] 검색창  (0) 2023.06.21
[JAVA] 캘린더 UI  (0) 2023.06.20
[JAVA] 오라클 일정 추가 캘린더  (0) 2023.06.20
[JAVA] 둥근 검색창  (0) 2023.06.19
[JAVA] 지정된 좌표 클릭 이벤트  (0) 2023.06.19