국비 23일차_1

강지수·2024년 1월 16일
0

국비교육

목록 보기
44/97

지난 시간 복습


메모장 만들기

package com.tech.gt001.notepad;

import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintStream;
import java.io.StringWriter;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
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.JTextField;

public class Notepad extends JFrame implements ItemListener, ActionListener {

	public static byte[] bytecounter;
	private boolean isButton = false;
	private String name = "굴림";
	private int style = 0;
	private int fontsize = 12;

	JPanel fontPanel1, fontPanel2;
	Choice fontCombo1, fontCombo2, fontCombo3;
	JButton fontConfirm, fontCancel;
	String[] fontList = { "굴림", "굴림체", "궁서", "궁서체", "견고딕", "고딕체", "verdana" };// 폰트 콤보 리스트
	String[] fontStyleList = { "보통", "기울임", "굵게" };
	String[] fontSizeList = { "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "30", "40",
			"60" };
	JTextField txtFont, txtFontStyle, txtFontSize;// JTextField준비
	JFrame fontFrame;

	JMenuBar menuBar = new JMenuBar();
	JMenu mnFile = new JMenu("파일(F)");
	JMenu mnEdit = new JMenu("편집(E)");
	JMenu mnForm = new JMenu("서식(O)");
	JMenu mnHelp = new JMenu("도움말(H)");

	JMenuItem new_m = new JMenuItem("새로만들기(N)");
	JMenuItem open_m = new JMenuItem("열기(O)");
	JMenuItem save_m = new JMenuItem("저장(S)");//
	JMenuItem exit_m = new JMenuItem("종료(X)");//
	JMenuItem cut_m = new JMenuItem("잘라내기(T)");//
	JMenuItem copy_m = new JMenuItem("복사하기(C)");//
	JMenuItem paste_m = new JMenuItem("붙여넣기(P)");//
	JMenuItem allsel_m = new JMenuItem("모두선택(A)");//
	JMenuItem del_m = new JMenuItem("삭제(L)");//
	JMenuItem font_m = new JMenuItem("글꼴(F)...");//

	JMenuItem info_m = new JMenuItem("메모장 정보(A)");
	JMenuItem time_m = new JMenuItem("시간보기");//
	JFileChooser jfc = new JFileChooser();
	JScrollPane scrollPane = null;
	JTextArea txtArea = null;
	JTextField txtField = new JTextField();

	public Notepad() {
//		화면구성
		setTitle("메모장-제목없음");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(800,500);
		
//		노트패드 컴포넌트 구성
		add(menuBar ,"North");
		menuBar.add(mnFile);
		menuBar.add(mnEdit);
		menuBar.add(mnForm);
		menuBar.add(mnHelp);
		
//		파일 메뉴에 소메뉴 추가
		mnFile.add(new_m);
		mnFile.add(open_m);
		mnFile.add(save_m);
		mnFile.addSeparator();
		mnFile.add(exit_m);
		
		mnEdit.add(cut_m);
		mnEdit.add(copy_m);
		mnEdit.add(paste_m);
		mnEdit.add(del_m);
		mnEdit.addSeparator();
		mnEdit.add(allsel_m);
		
		mnForm.add(font_m);
		
		mnHelp.add(time_m);
		mnHelp.addSeparator();
		mnHelp.add(info_m);
		
//		센터 내용
		scrollPane=new JScrollPane(txtArea=new JTextArea());//scrollPane에 txtArea 부착
		add(scrollPane,"Center");
		scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum());
//		스크롤 바를 최하단으로 맞춤
		validate();
		
//		font 컴포넌트 추가
		fontFrame=new JFrame("글꼴");
		fontPanel1=new JPanel();
		fontPanel2=new JPanel();
		
		txtFont=new JTextField(10);//글꼴
		txtFontStyle=new JTextField(8);
		txtFontSize=new JTextField(5);
		
		fontConfirm=new JButton("확인");
		fontCancel=new JButton("취소");
		
//		Choice 객체 생성
		fontCombo1=new Choice();
		fontCombo2=new Choice();
		fontCombo3=new Choice();
		
		for (int i = 0; i < fontList.length; i++) {
			fontCombo1.add(fontList[i]);
		}
		for (int i = 0; i < fontStyleList.length; i++) {
			fontCombo2.add(fontStyleList[i]);
		}
		for (int i = 0; i < fontSizeList.length; i++) {
			fontCombo3.add(fontSizeList[i]);
		}
		
//		초기세팅 Choice
		fontCombo1.select(0);
		fontCombo2.select(0);
		fontCombo3.select(4);
		
//		fontPanel1,2에 내용 부착
		fontPanel1.setLayout(new GridLayout(3,3));
		fontPanel1.add(new Label("글꼴"));
		fontPanel1.add(new Label("글꼴스타일"));
		fontPanel1.add(new Label("크기"));
		fontPanel1.add(txtFont);
		fontPanel1.add(txtFontStyle);
		fontPanel1.add(txtFontSize);
		fontPanel1.add(fontCombo1);
		fontPanel1.add(fontCombo2);
		fontPanel1.add(fontCombo3);
		
		fontPanel2.setLayout(new GridLayout(3,1));
		fontPanel2.add(fontConfirm);
		fontPanel1.add(fontCancel);
		
//		fontFrame에 fontPanel1,2 부착
		fontFrame.add(fontPanel1,BorderLayout.CENTER);
		fontFrame.add(fontPanel2,BorderLayout.EAST);
		
//		fontFrame에 Listener 부착
		fontFrame.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				fontFrame.setVisible(false);
				super.windowClosing(e);
			}
		});
		
//		Listener 부착
		fontConfirm.addActionListener(this);
		fontCancel.addActionListener(this);
		fontCombo1.addItemListener(this);
		fontCombo2.addItemListener(this);
		fontCombo3.addItemListener(this);
		fontFrame.setBounds(300,300,300,100);
		
//		event listener 부악
		new_m.addActionListener(this);
		open_m.addActionListener(this);
		save_m.addActionListener(this);
		exit_m.addActionListener(this);
		cut_m.addActionListener(this);
		copy_m.addActionListener(this);
		paste_m.addActionListener(this);
		allsel_m.addActionListener(this);
		del_m.addActionListener(this);
		font_m.addActionListener(this);
		
		time_m.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				Calendar cal=Calendar.getInstance();
				int year=cal.get(Calendar.YEAR);
				int month=cal.get(Calendar.MONTH+1);
				int day=cal.get(Calendar.DAY_OF_MONTH);
				int hour=cal.get(Calendar.HOUR);
				int minute=cal.get(Calendar.MINUTE);
				int second=cal.get(Calendar.SECOND);
				
				txtArea.setText(txtArea.getText()+"\n"
						+year+" 년 "+month+" 월 "+day+" 일 "
						+hour+" 시 "+minute+" 분 "+second+" 초 ");
			}
		});
		info_m.addActionListener(this);
		
		setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String itemPressed=e.getActionCommand();
		
		if(itemPressed.equals("저장(S)")) {
//			저장기능
			if(jfc.showSaveDialog(this)==JFileChooser.CANCEL_OPTION) {
				return;//종료
			}
//			저장구현
			File f=jfc.getSelectedFile();
			PrintStream ps;
			try {
				ps=new PrintStream(f);
				ps.println(txtArea.getText());
//				출력 객체를 통해 txtArea의 내용을 저장
				ps.close();
			} catch (FileNotFoundException e1) {
				e1.printStackTrace();
			}
		}
		if(itemPressed.equals("열기(O)")) {
//			열기 기능
			if(jfc.showSaveDialog(this)==JFileChooser.CANCEL_OPTION) {
				return;//종료
			}
//			열기 구현
			File f=jfc.getSelectedFile();
			setTitle(f.getName());
			
			try {
				FileReader fr=new FileReader(f);
				StringWriter sw=new StringWriter();
				while(true) {
					int ch=fr.read();
					if(ch==-1) break;
					sw.write(ch);
				}
				txtArea.setText(sw.toString());
				sw.close();
				fr.close();
			} catch (Exception e1) {
			}
		}
		if(itemPressed.equals("복사하기(C)")) {
			txtArea.copy();
		}
		if(itemPressed.equals("붙여넣기(P)")) {
			txtArea.paste();
		}
	}

	@Override
	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub

	}

	public static void main(String[] args) {
		new Notepad();
	}
}

메모장-파일열기/저장/ 복사/붙여넣기 기능까지



폰트 적용/취소



자바 끝


db 시작








profile
개발자 준비의 준비준비중..

0개의 댓글