본문 바로가기

자바공부

자바 파일 다이얼로그, 고급 스윙 컴포넌트

728x90
반응형

* 한글이나 워드 등을 사용하는 중에 파일 읽기나 쓰기를 하려고 할 때 파일의 이름을 지정하는 다이얼로그를 파일 다이얼로그라고 부른다.

스윙은 간단한 방법으로 파일 다이얼로그를 만들 수 있도록 지원한다.

파일 다이얼로그를 사용하는 목적은 사용자로부터 파일의 이름을 입력받고자 하는 것이다.

 

* JFileChooser는 파일 탐색기(File Browser)와 같은 기능을 하는 파일 다이얼로그를 구현한 스윙 컴포넌트이다.

JFileChooser는 다이얼로그를 출력하여 사용자가 파일이나 디렉터리를 선택하게 한다.

JFileChooser는 파일 열기 다이얼로그(File Open Dialog)와 파일 저장 다이얼로그(File Save Dialog)를 모두 지원한다.

파일 열기 다이얼로그는 열려고 하는 파일의 이름을 입력받기 위한 용도이며, 파일 저장 다이얼로그는 저장하려는 파일 이름을 입력받기 위한 용도이다.

 

* 파일 열기 다이얼로그는 생성하고 다루는 과정은 6단계로 나누어진다.

1) JFileChooser 객체 생성

JFileChooser chooser = new JFileChooser();

2) 파일 필터 생성

파일 필터(file filter)란 파일 리스트를 보여줄 때 특정 확장자를 가진 파일만 걸러 보여주기 위해 사용되는 필터 정보이다.

파일 필터는 FileNameExtensionFilter 클래스를 이용하여 생성한다.

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

첫 번째 인자인 "JPG&GIF Images"는 파일 다이얼로그의 "파일 종류" 창에 출력되는 문자열 정보이다.

두 번째 인자부터는 필터링하고자 하는 확장자를 나열한다. 확장자는 무한정 나열할 수 있다.

FileNameExtensionFilter 클래스를 사용하기 위해서는 import javax.swing.filechooser.*; 를 포함해야 한다.

 

3) JFileChooser에 파일 필터 설정

setFileFilter() 메소드를 이용하여 파일 다이얼로그에 파일 필터를 설정한다.

chooser.setFileFilter(filter);

JFileChooser는 여러 개의 파일 필터를 가질 수 있다.

JFileChooser에 새로운 파일 필터를 추가하고자 하면 addChoosableFileFilter() 메소드를 이용한다.

chooser.addChoosableFileFilter(filter);

4) 파일 열기 다이얼로그 출력

showOpenDialog()를 이용하여 파일 다이얼로그를 열기 모드로 화면에 출력한다.

int ret = chooser.showOpenDialog(null);

showOpenDialog(Compotent parent) 메소드의 인자인 parent는 다이얼로그의 부모 컴포넌트를 지정하는 것으로, 다이얼로그의 위치가 정해질 때 참조하는 부모 컴포넌트이며, null을 주면 전체 화면을 기준으로 위치를 잡게 된다.

 

5) 사용자는 일반적으로 파일을 선택하고 "열기" 버튼을 누른다. 이때 파일 다이얼로그는 보이지 않게 되지만 사실 JFileChooser 객체가 사라진 것은 아니다.

그러므로 JFileChooser 객체 내부에는 사용자가 선택한 파일 이름, 파일 경로, 디렉터리명 등 다양한 정보가 남아 있다.

사용자가 선택한 파일 이름은 JFileChooser의 getSelectedFile() 메소드를 이용하여 알아낸다.

String pathName = chooser.getSelectedFile().getPath();

 

6) showOpenDialog()의 리턴 값 처리

마지막으로 사용자가 취소 버튼을 선택하거나 강제로 다이얼로그를 닫는 경우에 대한 확인이 필요하다.

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

⚀ JFileChooser.APPROVE_OPTION : "열기" 버튼을 누른 경우

⚁ JFileChooser.CANCEL_OPTION : "취소" 버튼을 누른 경우

⚂ JFileChooser.ERROR_OPTION : 오류가 발생하거나 사용자가 다이얼로그를 닫은 경우

 

응용프로그램에서 사용자가 선택한 파일 이름을 정확하게 얻기 위해서는 "열기" 버튼을 누른 경우를 가려낼 필요가 있다.

// JFileChooser로부터 사용자가 선택한 파일의 경로명과 이름을 알아내는 코드
int ret = chooser.showOpenDialog(null);
if (ret == JFileChooser.APPROVE_OPTION){
	String pathName = chooser.getSelectedFile().getPath(); // 선택한 파일의 완전 경로명
    String fileName = chooser.getSelectedFile().getName(); // 선택한 파일의 이름
}

예를 들어, 사용자가 선택한 파일이 a.jpg이면 위의 소스에 의해 얻어진 pathName은 다음과 같이 완전 경로명이다.

C: \Documents and Settings\UserId\My Documnets\My Pictures\a.jpg

그리고 여기서 fileName에 담긴 파일 이름은 다음과 같다.

a.jpg

 

* 파일 저장 다이얼로그를 출력하기 위해서는 showOpenDialog() 대신 showSaveDialog()를 호출하면 된다. 나머지 과정은 동일하다.

int ret = chooser.showSaveDialog(null);

 

❖ 파일 다이얼로그가 실제 파일 열기까지 수행하는 것은 아니다. 

다이얼로그는 사용자로부터 파일 이름을 알아내느 목적에 국한된다.

응용프로그램은 파일 다이얼로그로부터 사용자가 선택한 파일의 이름을 알아 온 후 파일을 여는 작업은 따로 해야 한다.

 

❖ 파일 다이얼로그가 닫혔다고 해서 JFileChooser 객체가 사라졌거나 사용 불가능하게 된 것은 아니다. showOpenDialog()나 showSaveDialog()를 다시 호출하면 다이얼로그가 다시 화면에 출력된다. 재사용이 가능하다.

반응형