-
java) 메모장 만들기 1) 메뉴 + 열기 + 저장JAVA/멀티스레드, 이벤트 2024. 5. 27. 10:59
▤ 목차
✔ 메뉴바 만들기
💻 코드로 보기
// 메모장 만들기 public class Memojang extends JFrame implements ActionListener { private JTextArea txtMemo = new JTextArea("", 10, 30); private String copyText; private JMenuItem mnuNew, mnuSave, mnuOpen, mnuExit; private JMenuItem mnuCopy, mnuPaste, mnuCut, mnuDel, mnuFontSize; private JMenuItem mnuAbout, mnuEtc1, mnuEtc2; public Memojang() { super("메모장"); initLayout(); menuLayout(); setBounds(200, 200, 400, 350); setVisible(true); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { // 무명 클래스여서 this를 지정해줘야한다. int close = JOptionPane.showConfirmDialog(Memojang.this, "종료하시겠습니까?", "종료", JOptionPane.YES_NO_OPTION); // 내부 무명클래스에서는 클래스명을 넣어줘야한다. switch (close) { case JOptionPane.YES_OPTION: System.exit(0); break; case JOptionPane.NO_OPTION: break; } } }); } private void initLayout() { JScrollPane scroollpane = new JScrollPane(txtMemo); // 스크롤바 생김 txtMemo.setFont(new Font("돋음", Font.PLAIN, 16)); add("Center", scroollpane); } private void menuLayout() { JMenuBar menuBar = new JMenuBar(); // 메뉴바 JMenu mnuFile = new JMenu("파일"); // 주메뉴 mnuNew = new JMenuItem("새문서"); mnuOpen = new JMenuItem("열기..."); // ... > 사용자 배려 mnuSave = new JMenuItem("저장..."); mnuExit = new JMenuItem("종료"); mnuFile.add(mnuNew); mnuFile.add(mnuOpen); mnuFile.add(mnuSave); mnuFile.addSeparator(); // 구분선 : 같은 성격끼리 묶어놓는다. mnuFile.add(mnuExit); // 메뉴에 부메뉴 등록 JMenu mnuEdit = new JMenu("편집"); mnuCopy = new JMenuItem("복사(c)"); mnuCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); mnuPaste = new JMenuItem("붙여넣기"); mnuCut = new JMenuItem("잘라내기"); mnuDel = new JMenuItem("삭제"); mnuFontSize = new JMenuItem("글꼴 크기..."); mnuEdit.add(mnuCopy); mnuEdit.add(mnuPaste); mnuEdit.add(mnuCut); mnuEdit.add(mnuDel); mnuEdit.addSeparator(); // 구분선 mnuEdit.add(mnuFontSize); JMenu mnuShow = new JMenu("보기"); mnuAbout = new JMenuItem("메모장이란.."); mnuEtc1 = new JMenuItem("계산기"); mnuEtc2 = new JMenuItem("프리셀"); mnuShow.add(mnuAbout); mnuShow.addSeparator(); // 구분선 mnuShow.add(mnuEtc1); mnuShow.add(mnuEtc2); menuBar.add(mnuFile); // 메뉴바에 주메뉴 등록 menuBar.add(mnuEdit); menuBar.add(mnuShow); setJMenuBar(menuBar); // JFrame에 메뉴바 등록 // 메뉴에 리스너 달기 > actionPerformed()넘어간다. mnuNew.addActionListener(this); mnuSave.addActionListener(this); mnuOpen.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { // System.out.println(e.getActionCommand()); // System.out.println(e.getSource()); if (e.getSource() == mnuNew) { // 새문서 txtMemo.setText(""); // 덮어쓰기 setTitle("제목 없음"); } else if (e.getSource() == mnuOpen) { // 열기 // 파일 열기을 위한 경로명과 파일명 얻기는 os지원 창을 사용 FileDialog dialog = new FileDialog(this, "열기", FileDialog.LOAD); dialog.setDirectory("."); // 현재 디렉토리 dialog.setVisible(true); if (dialog.getFile() == null) return; String dfName = dialog.getDirectory() + dialog.getFile(); try { BufferedReader reader = new BufferedReader(new FileReader(dfName)); txtMemo.setText(""); String line = ""; while((line = reader.readLine()) != null) { txtMemo.append(line + "\n"); } reader.close(); setTitle(dialog.getFile() + " - 메모장"); } catch (Exception e2) { System.out.println(e2.getMessage()); // 개발자용 JOptionPane.showMessageDialog(this, e2.getMessage(), "에러", JOptionPane.WARNING_MESSAGE); // 사용자용 } } else if (e.getSource() == mnuSave) { // 저장 // 파일 저장을 위한 경로명과 파일명 얻기는 os지원 창을 사용 FileDialog dialog = new FileDialog(this, "저장", FileDialog.SAVE); dialog.setDirectory("."); // 현재 디렉토리 dialog.setVisible(true); if (dialog.getFile() == null) return; String dfName = dialog.getDirectory() + dialog.getFile(); // System.out.println("dfName " + dfName); try { // BufferedWriter writer = new BufferedWriter(new FileWriter("c:/work/a.txt")); // 윈도우 타입으로 경로 지정 방식 : "c:\\work\\a.txt" BufferedWriter writer = new BufferedWriter(new FileWriter(dfName)); writer.write(txtMemo.getText()); writer.close(); setTitle(dialog.getFile() + " - 메모장"); } catch (Exception e2) { System.out.println(e2.getMessage()); // 개발자용 JOptionPane.showMessageDialog(this, e2.getMessage(), "에러", JOptionPane.WARNING_MESSAGE); // 사용자용 } } public static void main(String[] args) { // TODO Auto-generated method stub new Memojang(); } }
👏 결과
📝 ...
메뉴바에서 ...에서 누르면 윈도우 os에서 지원하는 창을 띄울것이다. ... 표시는 일종의 사용자 배려이다.
... 표시가 있으면 새 창이 띄워지는 것은 일종의 약속이다.
😊정리
저장하기 위해 OS에서 지원하는 창을 띄울 것이다.
사용자가 창에서 위치를 누르고 '저장'버튼을 누르면 프로그램에 경로를 가지고 와서
java 프로그램에서 사용자가 창을 통해 전달한 경로를 통해 저장해준다.
'JAVA > 멀티스레드, 이벤트' 카테고리의 다른 글
java) Swing 코드 연습 ( JFrame 사용 ) + Mnemonic (0) 2024.05.29 java) 메모장 만들기 2) 나가기, 복사, 붙여 넣기, 잘라내기, 삭제, 글꼴크기, 모달창 띄우기 (0) 2024.05.28 java) 메모장 만들기 3) 윈도우 계산기 띄우기, 브라우저 실행하기, 팝업 메뉴 (+Desktop 클래스 / URI 클래스) (0) 2024.05.28 java 리스너 이벤트 처리 방법 (익명 객체, 내부 클래스) (0) 2024.05.24 GUI / Layout / awt/ 컴포넌트 / 컨테이너 개념정리 (0) 2024.05.23