Recent Posts
Recent Comments
Link
12-08 02:58
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

[SWT/JFace] FileDialog 파일 열기 대화 상자 본문

DEV&OPS/Java

[SWT/JFace] FileDialog 파일 열기 대화 상자

ALEPH.GEM 2024. 11. 27. 22:00

자바 SWT/JFace 를 이용한 GUI 애플리케이션에서 실행중인 PC의 파일(텍스트)을 읽을 수 있는 파일 열기 대화 상자의 간단한 사용법에 대해 알아보겠습니다.

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.jface.window.ApplicationWindow;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TextFileReaderApp extends ApplicationWindow {

    public TextFileReaderApp() {
        super(null);
    }

    @Override
    protected Control createContents(Composite parent) {
        parent.getShell().setText("Text File Reader");
        parent.setLayout(new FillLayout());

        Text textArea = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);

        Menu menuBar = new Menu(parent.getShell(), SWT.BAR);
        parent.getShell().setMenuBar(menuBar);

        MenuItem fileMenuHeader = new MenuItem(menuBar, SWT.CASCADE);
        fileMenuHeader.setText("File");

        Menu fileMenu = new Menu(parent.getShell(), SWT.DROP_DOWN);
        fileMenuHeader.setMenu(fileMenu);

        MenuItem openItem = new MenuItem(fileMenu, SWT.PUSH);
        openItem.setText("Open");

        openItem.addListener(SWT.Selection, e -> {
            FileDialog fileDialog = new FileDialog(parent.getShell(), SWT.OPEN);
            // 확장자를 txt으로 제한하려면 아래처럼 필터를 설정해줍니다. 
            fileDialog.setFilterExtensions(new String[] {"*.txt"}); 
            fileDialog.setFilterNames(new String[] {"Text Files (*.txt)"}); // 파일 유형 이름 설정
            String selectedFile = fileDialog.open();
            if (selectedFile != null) {
                try (BufferedReader br = new BufferedReader(new FileReader(selectedFile))) {
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        sb.append(line).append("\n");
                    }
                    textArea.setText(sb.toString());
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
        
        return parent;
    }

    public static void main(String[] args) {
        TextFileReaderApp app = new TextFileReaderApp();
        app.setBlockOnOpen(true);
        app.open();
        Display.getCurrent().dispose();
    }
}

 

 

 

 

 

728x90