티스토리 뷰

배움의 독백

TextEditor.java

뚜비콩 2017. 9. 13. 12:19
package chapter18;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.BevelBorder;
import javax.swing.SwingConstants;

public class TextEditor extends JFrame {

	MyFileWriter mfw;
	MyFileReader mfr;
	File file;

	private JPanel contentPane;
	private JMenuBar menuBar;
	private JMenu mnNewMenu;
	private JMenuItem menuOpen;
	private JMenuItem menuSave;
	
	private JMenuItem menuSaveAs;
	private JScrollPane scrollPane;
	private JTextArea textArea;
	private JLabel status;
	private JMenuItem newFile;

	/*
	 * 내가 직접 만든 건 이쯤에다가 쓰자
	 */
	
	public void save() {
		mfw = new MyFileWriter(file, textArea.getText());
		boolean b = mfw.write();
		
		if (b) {
			status.setForeground(Color.blue);
			status.setText("파일이 정상적으로 저장되었습니다.");
		} else {
			status.setForeground(Color.red);
			status.setText("파일 저장 중 오류 발생.");
		}
	}
	
	public void read() {
		mfr = new MyFileReader(file);
		String str = mfr.read();
		
		if (str == null){		//공백문자 txt파일이 있을 수도 있으니까 
			status.setForeground(Color.red);
			status.setText("해당 파일이 없거나 읽을 수 없는 파일입니다. ");
		} else {
			status.setText(""); //앞의 파일이 오류났을 때 상태바에 뜬 오류 메세지를 지우는 것 
			textArea.setText(str);
		}
	}
	
	/**
	 * Launch the application.
	 */
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TextEditor frame = new TextEditor();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TextEditor() {
		setFont(new Font("Verdana", Font.BOLD, 12));
		setTitle("T e x t  E d i t o r");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 468, 406);
		setJMenuBar(getMenuBar_1());
		contentPane = new JPanel();
		contentPane.setBackground(new Color(0, 0, 0));
		contentPane.setBorder(null);
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		contentPane.add(getScrollPane(), BorderLayout.CENTER);
		contentPane.add(getStatus(), BorderLayout.SOUTH);
	}

	private JMenuBar getMenuBar_1() {
		if (menuBar == null) {
			menuBar = new JMenuBar();
			menuBar.setOpaque(false);
			menuBar.setBackground(new Color(0, 0, 0));
			menuBar.setBorder(null);
			menuBar.add(getMnNewMenu());
		}
		return menuBar;
	}
	private JMenu getMnNewMenu() {
		if (mnNewMenu == null) {
			mnNewMenu = new JMenu("File");
			mnNewMenu.setForeground(new Color(75, 0, 130));
			mnNewMenu.setFont(new Font("맑은 고딕", Font.BOLD, 13));
			mnNewMenu.add(getNewFile());
			mnNewMenu.add(getMenuOpen());
			mnNewMenu.add(getMenuSave());
			mnNewMenu.add(getMenuSaveAs());
		}
		return mnNewMenu;
	}
	private JMenuItem getMenuOpen() {
		if (menuOpen == null) {
			menuOpen = new JMenuItem("open...");
			menuOpen.setBorder(null);
			menuOpen.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					//작성
					JFileChooser jc = new JFileChooser(file);
					int yn = jc.showOpenDialog(TextEditor.this); 		//텍스트 에디터 자기 자신이 parents다,,
					
					if (yn == JFileChooser.APPROVE_OPTION) {	  //열기버튼 선택시
						file = jc.getSelectedFile(); 		//선택된 파일의 객체를 파일객체로 넘겨와랏!
						//ㄴ->필드로 보냈음
						//textArea.append(file.getPath()); //파일 열기시 경로 표시해주기 
						setTitle("T e x t  E d i t o r :  "+file.getPath());						
						read();
					}
				}
			});
			menuOpen.setForeground(new Color(153, 50, 204));
			menuOpen.setFont(new Font("맑은 고딕", Font.BOLD, 13));
		}
		return menuOpen;
	}
	private JMenuItem getMenuSave() {
		if (menuSave == null) {
			menuSave = new JMenuItem("save");
			menuSave.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					//작성
					if ( file == null ) {//파일명을 미지정한 경우
						JFileChooser jc = new JFileChooser(file);
						int yn = jc.showOpenDialog(TextEditor.this); //this만 뜨면 Action e 지정이라 안됨
						
						if (yn == JFileChooser.APPROVE_OPTION) {
							file = jc.getSelectedFile();
						}
					}
					save();
				}
			});
			menuSave.setBorder(null);
			menuSave.setForeground(new Color(153, 50, 204));
			menuSave.setFont(new Font("맑은 고딕", Font.BOLD, 13));
		}
		return menuSave;
	}
	private JMenuItem getMenuSaveAs() {
		if (menuSaveAs == null) {
			menuSaveAs = new JMenuItem("save as...");
			menuSaveAs.setBorder(null);
			menuSaveAs.setForeground(new Color(153, 50, 204));
			menuSaveAs.setFont(new Font("맑은 고딕", Font.BOLD, 13));
		}
		return menuSaveAs;
	}
	private JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setViewportView(getTextArea());
		}
		return scrollPane;
	}
	private JTextArea getTextArea() {
		if (textArea == null) {
			textArea = new JTextArea();
			textArea.setBorder(new BevelBorder(BevelBorder.LOWERED, new Color(255, 250, 205), new Color(255, 105, 180), new Color(255, 255, 0), new Color(147, 112, 219)));
			textArea.setBackground(new Color(0, 0, 0));
			textArea.setForeground(new Color(255, 240, 245));
			textArea.setSelectionColor(new Color(0, 204, 204));
			textArea.setFont(new Font("맑은 고딕", Font.PLAIN, 13));
		}
		return textArea;
	}
	private JLabel getStatus() {
		if (status == null) {
			status = new JLabel("");
			status.setIconTextGap(0);
			status.setHorizontalAlignment(SwingConstants.LEFT);
			status.setHorizontalTextPosition(SwingConstants.CENTER);
			status.setForeground(new Color(204, 204, 255));
			status.setFont(new Font("맑은 고딕", Font.BOLD, 12));
			status.setPreferredSize(new Dimension(57, 20));
			status.setMaximumSize(new Dimension(80, 15));
		}
		return status;
	}
	private JMenuItem getNewFile() {
		if (newFile == null) {
			newFile = new JMenuItem("new file");
			newFile.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					//
					file = null;
					textArea.setText(""); 	//일단 clear해줌
					
				}
			});
			newFile.setForeground(new Color(153, 50, 204));
			newFile.setFont(new Font("맑은 고딕", Font.BOLD, 13));
			newFile.setBorder(null);
		}
		return newFile;
	}
}


댓글