프로그래밍 언어/JAVA

파일 다이얼로그

· 코딩마이데이

파일의 이름을 선택하는 다이얼로그가 출력되는데, 이 다이얼로그를 파일 다이얼로그라고 부릅니다.

 

JFileChooser

JFileChooser는 파일 탐색기(File Brower)와 같은 기능을 하는 파일 다이얼로그를 구현한 스윙 컴포넌트입니다. JFileChooser를 이용하면 파일 열기 다이얼로그(File Open Dialog)와 파일 저장 다이얼로그(File Save Dialog)를 모두 출력할 수 있습니다.

파일 열기 다이얼로그는 열고자 하는 파일의 이름을 사용자로부터 입력받기 위한 것이며, 파일 저장 다이얼로그는 저장하려는 파일 이름을 입력받기 위한 것입니다.

 

JFileChooser를 이용하여 출력한 파일 열기 다이얼로그

 

파일 열기 다이얼로그 생성

1. JFileChooser 객체 생성

JFileChooser chooser = new JFileChooser();

 

2. 파일 필터 생성

파일 필터(file filter)란 파일 다이얼로그가 특정 확장자를 가진 파일만 보여주기 위해 사용되는 필터 정보로, FileNameExtensionFilter 클래스를 이용하여 다음과 같이 생성합니다.

FileNameExtensionFilter filter = new fileNameExtensionFilter( "JPG & GIF Images", "jpg", "gif");

 

첫 번째 인자는 다이얼로그의 "파일 종류" 창에 출력되는 문자열 정보이며, 두 번째 인자부터는 필터링하고자 하는 확장자를 나열합니다. 확장자는 무한정 나열할 수 있습니다.

FileNameExtensionFilter 클래스를 사용하기 위해서는 다음 import가 필요합니다.

import javax.swing.filechooser.*;

 

3. JFileChooser에 파일 필터 설정

파일 필터를 다이어로그에 설정할 차례입니다. 다음과 같이 setFileFilter() 메서드를 이용하여 파일 다이얼로그에 파일 필터를 설정합니다.

chooser.setFileFilter(filter);

 

JFileChooser는 여러 개의 파일 필터를 가질 수 있습니다. JFileChooser에 새로운 파일 필터를 추가하려면 다음과 같이 addChoosableFileFilter() 메서드를 이용하면 됩니다.

chooser.addChooseableFileFilter(filter);

 

4. 파일 대신 디렉터리를 선택하고자 할 때

setFileSelectorMode() 메서드를 이용하면 파일 다이얼로그에서 파일이나, 디렉터리, 혹은 둘 다 선택 가능하므로 설정할 수 있습니다. 다음 코드는 파일이나 디렉터리 모두 선택 가능하게 합니다.

chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

 

5. 파일 열기 다이얼로그 출력

showOpenDialog()를 이용하여 파일 다이얼로그를 화면에 출력합니다.

int ret = chooser.showOpenDialog(null);

 

showOpenDialog(Component parent) 메서드의 인자인 parent는 다이얼로그의 부모 컴포넌트를 지정하는 것으로, 다이얼로그를 출력할 위치를 정할 때, 기준이 되는 부모 컴포넌트이며, null을 주면 전체 화면을 기준으로 위치를 잡게 됩니다.

 

6. 사용자가 선택한 파일 이름 알아내기

파일 다이얼로그는 보이지 않게 될 뿐이지 JFileChooser 객체가 사라진 것은 아닙니다. JFileChooser 객체 내부에는 사용자가 선택한 파일 이름, 파일 경로명, 디렉터리 명 등 다양한 정보가 남아 있습니다.  사용자가 선택한 파일 이름은 다음과 같이 JFileChooser의 getSelectedFile() 메서드(File 객체 리턴)를 이용하여 알아냅니다.

String pathName = chooser.getSelectedFile().getPath(); // 완전경로명

 

7. showOpenDialog()의 리턴 값 처리

showOpenDialog()는 사용자의 행위에 따라 3가지의 값 중 하나를 리턴합니다.

  • JFileChooser.APPROVE_OPTION:  "열기" 버튼을 누른 경우
  • JFileChooser.CANCEL_OPTION: "취소" 버튼을 누른 경우
  • JFileChooser.ERROR_OPTION: 오류가 발생하거나 사용자가 다이얼로그를 닫은 경우
int ret = chooser.showOpenDialog(null);
if(ret != JFileChooser.APPROVE_OPTION) {
	String pathName = chooser.getSelectedFile().getPath(); // 선택한 파일의 완전 경로명
	String fileName = chooser.getSelectedFile().getName(); // 파일의 이름
}

 

파일 저장 다이얼로그 생성

파일 저장 다이얼로그를 출력하기 위해서는 showOpenDialog() 대신 다음과 같이 showSaveDialog()를 호출하면 됩니다.

int ret = chooser.showSaveDialog(null);

 

파일 열기 다이얼로그 생성 및 출력

import javax.swing.*;
import javax.swing.filechooser.*;
import java.awt.event.*;
import java.awt.*;

public class MenuAndFileDialogEx extends JFrame {
    private JLabel imageLabel = new JLabel();

    public MenuAndFileDialogEx() {
        setTitle("Menu와 JFileChooser 활용 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.add(imageLabel);
        createMenu();
        setSize(350,200);
        setVisible(true);
    }

    private void createMenu() {
        JMenuBar mb = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenuItem openItem = new JMenuItem("Open");

        // Open 메뉴아이템에 Action 리스너를 등록한다.
        openItem.addActionListener(new OpenActionListener());
        fileMenu.add(openItem);
        mb.add(fileMenu);
        setJMenuBar(mb);
    }

    // Open 메뉴아이템이 선택되면 호출되는 Action 리스너
    class OpenActionListener implements ActionListener {
        private JFileChooser chooser;

        public OpenActionListener() {
            chooser = new JFileChooser(); // 파일 다이얼로그 생성
        }
        public void actionPerformed(ActionEvent e) {
            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "JPG & GIF Images", // 파일 이름난에 출력될 문자열
                    "jpg", "gif"); // 파일 필터로 사용되는 확장자. *.jpg. *.gif만 나열됨

            chooser.setFileFilter(filter); // 파일 다이얼로그에 파일 필터 설정
            int ret = chooser.showOpenDialog(null); // 파일 다이얼로그 출력
            if(ret != JFileChooser.APPROVE_OPTION) { // 사용자가 창을 강제로 닫았거나 취소 버튼을 누른 경우
                JOptionPane.showMessageDialog(null, "파일을 선택하지 않았습니다",
                        "경고", JOptionPane.WARNING_MESSAGE);
                return;
            }

            // 사용자가 파일을 선택하고 "열기" 버튼을 누른 경우
            String filePath = chooser.getSelectedFile().getPath(); // 파일 경로명 리턴
            imageLabel.setIcon(new ImageIcon(filePath)); // 이미지 출력
            pack(); // 이미지의 크기에 맞추어 프레임 크기 조절
        }
    }
    public static void main(String [] args) {
        new MenuAndFileDialogEx();
    }
}

 

[실행 결과]

 

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

탭팬  (0) 2025.09.18
컬러 다이얼로그  (0) 2025.09.15
팝업 다이얼로그  (1) 2025.09.09
모달 다이얼로그와 모달리스 다이얼로그  (0) 2025.09.06
다이얼로그 만들기  (0) 2025.09.03