즐거운프로그래밍

[자바] Canvas의 이해와 활용(그림 파일 불러오기)

수수께끼 고양이 2023. 10. 24. 16:21
728x90
반응형

 

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public class Main {
    public static Image img;
    public static Canvas canvas;
    public static void main(String[] args) {
        final Frame frame = new Frame();
        frame.setTitle("Image Display");
        frame.setBounds(100,100,600,400);

        frame.setLayout(new BorderLayout());

        img = null;
        canvas = new Canvas() {
            public void paint(Graphics g) {
                if(img != null)
                    g.drawImage(img,0,0, this);
            }
        };

        frame.add(canvas,BorderLayout.CENTER);

        Button button = new Button("파일 선택");
        button.setSize(100,50);
        frame.add(button,BorderLayout.SOUTH);

        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });

        // 버튼 입력 처리기
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String filename = File.separator+"tmp";
                JFileChooser fc = new JFileChooser(new File(filename));
                fc.showOpenDialog(frame);
                File selFile = fc.getSelectedFile();
                if(selFile != null) {
                    String fileName = selFile.toString();
                    System.out.println(selFile.toString());
                    Toolkit toolkit = frame.getToolkit();
                    img = toolkit.createImage(fileName);
                    canvas.repaint();
                }
            }
        });
    }
}

아래 파일 선택 후 이미지를 불러오면 됩니다

 

이미지 불러오기 완료하시면 캔버스에 그림이 붙습니다

 

 

 

728x90
반응형