본문 바로가기
Programming/Java

자바GUI(Swing) - Simple text editor

by Wilkyway 2022. 7. 11.
반응형

 인텔리제이(Intellij) IDE 를 사용하여 간단한 텍스트 에디터를 만들어보도록 하겠습니다.

 

1. 새 프로젝트 생성

인텔리제이 메뉴에서 File - New - Project 를 클릭하여 새 프로젝트를 생성해줍니다. Name은 editor로 하고, 적당한 위치에 아래와 같은 세팅으로 진행할 예정입니다. JDK는 설치되어있지 않다면 JDK의 드롭다운 메뉴 중 Download JDK를 눌러, 적당한 버전을 고른 후 다운로드 받아줍니다. 혹은 직접 원하는 JDK를 다운로드 받아서 선택할 수도 있습니다.

2. Main Class 생성

프로젝트 하위 폴더 중 src에서 우클릭하여 New - Java Class 를 클릭한 후, 클래스 이름을 editor로 하여 새로운 클래스를 생성해줍니다. 

만들어진 클래스 내부에 프로그램 진입점인 main함수를 만들어서 테스트해보겠습니다.

public class editor {
    public static void main(String[] args){
        System.out.println("Hello world");
    }
}

3. Build & Run

Build - Build Project를 눌러 프로젝트를 빌드해줍니다. (최초에는 Run 메뉴가 아직 활성화되지 않았습니다. 한번만 Build해주면, 다음부터는 Run만해도 자동으로 Build까지 수행해줍니다.)

다음으로 Run해줍니다. 그리고 editor라고 되어있는 메뉴를 클릭합니다.

콘솔에 Hello world가 잘 나옵니다.

4. GUI 프로그램 코드

아래의 코드를 복사하여 실행이 되는지 확인해봅니다.

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


public class editor extends JFrame implements ActionListener {

    JTextArea t;
    JFrame f;

    // Constructor
    editor(){
        f = new JFrame("editor");
        f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
        
        // 테마 설정
        try{
            UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
        } catch (Exception e) {
            System.out.println(e + "오류 발생");
        }
                
        t = new JTextArea(); // 텍스트 편집창
        JMenuBar mb = new JMenuBar(); // 메뉴바

        JMenu m1 = new JMenu("File"); //메뉴1
        JMenuItem mi1 = new JMenuItem("New"); //메뉴 아이템1
        JMenuItem mi2 = new JMenuItem("Open"); //메뉴 아이템2
        JMenuItem mi3 = new JMenuItem("Save"); //메뉴 아이템3
        JMenuItem mi9 = new JMenuItem("Print"); //메뉴 아이템4
        mi1.addActionListener(this);
        mi2.addActionListener(this);
        mi3.addActionListener(this);
        mi9.addActionListener(this);
        m1.add(mi1);
        m1.add(mi2);
        m1.add(mi3);
        m1.add(mi9);

        JMenu m2 = new JMenu("Edit");	// 메뉴2
        JMenuItem mi4 = new JMenuItem("cut"); //메뉴 2-1
        JMenuItem mi5 = new JMenuItem("copy");//메뉴 2-2
        JMenuItem mi6 = new JMenuItem("paste");//메뉴 2-3
        mi4.addActionListener(this);
        mi5.addActionListener(this);
        mi6.addActionListener(this);
        m2.add(mi4);
        m2.add(mi5);
        m2.add(mi6);

        JMenuItem mc = new JMenuItem("close"); // 메뉴3
        mc.addActionListener(this);

        mb.add(m1);
        mb.add(m2);
        mb.add(mc);

        f.setJMenuBar(mb);
        f.add(t);
        f.setSize(500, 500);
        f.show();


    }

	// 각 클릭 이벤트에 대한 기능 정의
    @Override
    public void actionPerformed(ActionEvent e) {
        String s = e.getActionCommand();

        if (s.equals("cut")){
            t.cut();
        } else if (s.equals("copy")){
            t.copy();
        } else if(s.equals("paste")){
            t.paste();
        } else if (s.equals("Save")){
            JFileChooser j = new JFileChooser("f:");

            int r = j.showSaveDialog(null);

            if (r == JFileChooser.APPROVE_OPTION){
                File fi = new File(j.getSelectedFile().getAbsolutePath());
                try {
                    FileWriter wr = new FileWriter(fi, false);
                    BufferedWriter w = new BufferedWriter(wr);
                    w.write(t.getText());

                    w.flush();
                    w.close();
                } catch (Exception evt){
                    JOptionPane.showMessageDialog(f, evt.getMessage());
                }
            } else JOptionPane.showMessageDialog(f, "the user cancelled the operation");
        } else if (s.equals("Print")) {
            try {
                t.print();
            } catch (Exception evt) {
                JOptionPane.showMessageDialog(f, evt.getMessage());
            }
        } else if (s.equals("Open")){
            JFileChooser j = new JFileChooser("f:");
            int r = j.showOpenDialog(null);
            if (r == JFileChooser.APPROVE_OPTION){
                File fi = new File(j.getSelectedFile().getAbsolutePath());

                try {
                    String s1 = "", sl = "";
                    FileReader fr = new FileReader(fi);
                    BufferedReader br = new BufferedReader(fr);

                    sl = br.readLine();

                    while((s1 = br.readLine()) != null){
                        sl = sl + "\n" + s1;
                    }
                    t.setText(sl);
                } catch(Exception evt){
                    JOptionPane.showMessageDialog(f, evt.getMessage());

                }
            } else JOptionPane.showMessageDialog(f, "the user canced the operation");
        }
        else if (s.equals("New")){
            t.setText("");
        } else if(s.equals("close")){
//            f.setVisible(false);
            System.exit(0);
        }
    }

    public static void main(String[] args) {

        editor e = new editor();
    }
}

 

 

5. 테마 적용

프로젝트(editor) 에서 우클릭 후 New- Directory를 클릭하고, 폴더 이름을 libs로 하여 새 폴더를 생성합니다.

생성된 폴더에 제가 애용하는 liquid 테마를 복사해 넣습니다. 해당 테마(라이브러리)는 첨부 참조하시기 바랍니다.

liquidlnf.jar
0.35MB

폴더를 보면 liquidlnf.jar파일이 추가되어 있는 것이 보입니다. libs폴더를 우클릭 후, Add as Library...를 클릭, OK 클릭하면 해당 폴더의 라이브러리들이 자동으로 프로젝트 라이브러리 리스트에 추가됩니다.

실행해보면 liquid 테마가 들어간 프로그램이 실행되는 모습을 볼 수 있습니다. (버튼이 많아야 좀 더 화려한데...)

 

이상으로 간단한 텍스트 에디터를 Swing으로 만들어보았습니다.

 

~~끝~~

반응형

댓글