본문 바로가기
BOOKS/수월한 Java

swing으로 만들어본 멀티 메모장 #1/2

by IT여행자 2023. 3. 1.
728x90

안녕하세요 IT여행자입니다.

 

이번 수첩은 자바 GUI API 중 하나인 swing을 사용하여 멀티 메모장을 만들어 볼까 합니다.

우리나라의 개발 환경은 대부분이 웹에 치중되어 있어 그리 흥미로운 인터페이스는 아니지만 자바언어만 알고 있어도 만들어 볼 수 있는 주제이기에 선정하였습니다.

 

개발 난이도는 아마추어 중급 수준입니다.

 

개발 난이도에 대한 설명이나  개발 환경은 영상을 참고해 주시기 바랍니다. 또한 영상은 두 개의 파트로 나뉘어 있습니다.

 

개발 환경

 

 

 

https://youtu.be/jJK67Ex2W58

 

아래의 코드들은 직접 작성된 코드가 아니라 이클립스의 윈도빌더에 의해 기본적으로 작성된 코드들입니다. 따라서 이 부분까지는 직접 작성하지 마시고 영상을 보면서 과정대로 따라가시면 만들어 보시기 바랍니다. 이점 양지해 주시기 바랍니다.

 

 

Main.java ( 메인 실행 파일)

package memo;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.BorderLayout;
import javax.swing.JDesktopPane;

public class Main extends JFrame {

	private JPanel contentPane;
	private JMenuBar menuBar;
	private JMenu mnNewMenu;
	private JMenuItem mntmNewMenuItem;
	private JMenuItem mntmNewMenuItem_1;
	private JMenuItem mntmNewMenuItem_2;
	private JMenuItem mntmNewMenuItem_3;
	private JMenuItem mntmNewMenuItem_4;
	private JDesktopPane desktopPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Main frame = new Main();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Main() {
		setTitle("메모장");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 457, 363);
		setJMenuBar(getMenuBar_1());
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(new BorderLayout(0, 0));
		contentPane.add(getDesktopPane(), BorderLayout.CENTER);
	}

	protected JMenuBar getMenuBar_1() {
		if (menuBar == null) {
			menuBar = new JMenuBar();
			menuBar.add(getMnNewMenu());
		}
		return menuBar;
	}
	protected JMenu getMnNewMenu() {
		if (mnNewMenu == null) {
			mnNewMenu = new JMenu("관리");
			mnNewMenu.add(getMntmNewMenuItem());
			mnNewMenu.add(getMntmNewMenuItem_1());
			mnNewMenu.add(getMntmNewMenuItem_2());
			mnNewMenu.add(getMntmNewMenuItem_3());
			mnNewMenu.add(getMntmNewMenuItem_4());
		}
		return mnNewMenu;
	}
	protected JMenuItem getMntmNewMenuItem() {
		if (mntmNewMenuItem == null) {
			mntmNewMenuItem = new JMenuItem("목차보기");
		}
		return mntmNewMenuItem;
	}
	protected JMenuItem getMntmNewMenuItem_1() {
		if (mntmNewMenuItem_1 == null) {
			mntmNewMenuItem_1 = new JMenuItem("새로만들기");
		}
		return mntmNewMenuItem_1;
	}
	protected JMenuItem getMntmNewMenuItem_2() {
		if (mntmNewMenuItem_2 == null) {
			mntmNewMenuItem_2 = new JMenuItem("저장");
		}
		return mntmNewMenuItem_2;
	}
	protected JMenuItem getMntmNewMenuItem_3() {
		if (mntmNewMenuItem_3 == null) {
			mntmNewMenuItem_3 = new JMenuItem("모두저장");
		}
		return mntmNewMenuItem_3;
	}
	protected JMenuItem getMntmNewMenuItem_4() {
		if (mntmNewMenuItem_4 == null) {
			mntmNewMenuItem_4 = new JMenuItem("종료");
		}
		return mntmNewMenuItem_4;
	}
	protected JDesktopPane getDesktopPane() {
		if (desktopPane == null) {
			desktopPane = new JDesktopPane();
		}
		return desktopPane;
	}
}

 

Content.java ( 메모 목차를 관리하는 클래스)

 

package memo;

import java.awt.EventQueue;

import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import javax.swing.JList;

public class Content extends JInternalFrame {
	private JScrollPane scrollPane;
	private JList list;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Content frame = new Content();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Content() {
		setTitle("메모목차");
		setBounds(100, 100, 376, 398);
		getContentPane().add(getScrollPane(), BorderLayout.CENTER);

	}

	protected JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setViewportView(getList());
		}
		return scrollPane;
	}
	protected JList getList() {
		if (list == null) {
			list = new JList();
		}
		return list;
	}
}

 

Editor.java ( 편집기)

 

package memo;

import java.awt.EventQueue;

import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import javax.swing.JTextArea;

public class Editor extends JInternalFrame {
	private JScrollPane scrollPane;
	private JTextArea textArea;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Editor frame = new Editor();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Editor() {
		setTitle("새메모");
		setBounds(100, 100, 450, 300);
		getContentPane().add(getScrollPane(), BorderLayout.CENTER);

	}

	protected JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setViewportView(getTextArea());
		}
		return scrollPane;
	}
	protected JTextArea getTextArea() {
		if (textArea == null) {
			textArea = new JTextArea();
		}
		return textArea;
	}
}