java를 이용하여 메모장을 구현하자.
- Java Programming -
메모장 구현하기
자바를 이용하여 우리가 흔히 사용하는 메모장 기능을 구현해 보도록 하겠습니다. 직접 구현하려고 하니 메모장 하나도 쉽지 않더군요. 프로그래밍 공부 더 열심히 해야 될 것 같습니다;; 변수 선언 과정은 생략하도록 하겠습니다.
public class HeyoriNotepad implements WindowListener, ActionListener, TextListener, KeyListener, DocumentListener, ListSelectionListener { //======================================================== // 이 벤 트 핸 들 러 모 음 //======================================================== //-------------------------------------------------------- // 윈 도 우 이 벤 트 핸 들 러 //-------------------------------------------------------- public void windowClosing(WindowEvent we) { String s = we.toString(); we.getSource().equals(wow); if(we.getSource().equals(wow)){ wow.setVisible(false); wow.dispose(); } if(we.getSource().equals(frame)){ frame.setVisible(false); frame.dispose(); System.exit(0); } } public void windowOpened (WindowEvent we) {} public void windowIconified (WindowEvent we) {} public void windowDeiconified (WindowEvent we) {} public void windowClosed (WindowEvent we) {} public void windowActivated (WindowEvent we) {} public void windowDeactivated (WindowEvent we) {} //-------------------------------------------------------- //-------------------------------------------------------- // 텍 스 트 이 벤 트 핸 들 러 //-------------------------------------------------------- public void textValueChanged ( TextEvent e ) { editState = true; } //-------------------------------------------------------- //-------------------------------------------------------- // 도큐멘트 이벤트 핸들러 //-------------------------------------------------------- @Override public void changedUpdate(DocumentEvent e) { // TODO Auto-generated method stub } @Override public void insertUpdate(DocumentEvent e) { // TODO Auto-generated method stub editState = true; } @Override public void removeUpdate(DocumentEvent e) { // TODO Auto-generated method stub } //-------------------------------------------------------- //-------------------------------------------------------- // ListSelectionListener //-------------------------------------------------------- @Override public void valueChanged(ListSelectionEvent arg0) { // TODO Auto-generated method stub Object obj = arg0.getSource(); if((String)(list.getSelectedValue())!=null){ font = (String)(list.getSelectedValue()); } if((String)(list2.getSelectedValue())!=null){ fontstyle = (String)(list2.getSelectedValue()); } if((String)(list3.getSelectedValue())!=null){ fontcolor = (String)(list3.getSelectedValue()); } if((String)(list4.getSelectedValue())!=null){ fontsize = (String)(list4.getSelectedValue()); } } //-------------------------------------------------------- //-------------------------------------------------------- // KeyListener //-------------------------------------------------------- @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub // char str = e.getKeyChar(); if(e.getKeyCode()==KeyEvent.VK_ENTER){ wow.setVisible(true); } } //-------------------------------------------------------- //-------------------------------------------------------- // 액 션 이 벤 트 핸 들 러 //-------------------------------------------------------- public void actionPerformed( ActionEvent ae) { String itemPressed = ae.getActionCommand(); if ( itemPressed.equals("새로 만들기(N)") ) { if ( editState ) { mb.setOpenDialogbox(); String strReturn = mb.getFileinfo(); if ( strReturn != null ) curFilename = strReturn; } else { curFilename = "제목 없음"; txtArea.setText(null); } frame.setTitle(curFilename + progName); } if ( itemPressed.equals("열 기(O)...") ) { String strReturn = mb.openFileDialog(); try { if ( strReturn != null ){ curFilename = strReturn; frame.setTitle(curFilename + progName); String filePath = mb.getPathinfo(); mb.openFile(filePath, curFilename); editState = false; } } catch ( FileNotFoundException e1 ) {} catch ( IOException e2 ) {} } if ( itemPressed.equals("저 장(S)") ) { try{ if ( curFilename.equals("제목 없음") ) { String strReturn = mb.saveFileDialog(); if ( strReturn != null ) { curFilename = strReturn; frame.setTitle(curFilename + progName); String filePath = mb.getPathinfo(); mb.saveFile(filePath, curFilename); editState = false; } } else { String filePath = mb.getPathinfo(); mb.saveFile(filePath, curFilename); } } catch ( FileNotFoundException e1 ) {} catch ( IOException e2 ) {} } if ( itemPressed.equals("다른 이름으로 저장(A)") ) { try { String strReturn = mb.saveFileDialog(); if ( strReturn != null ) { curFilename = strReturn; frame.setTitle(curFilename + progName); editState = false; } } catch ( FileNotFoundException e1 ) {} catch ( IOException e2 ) {} } if ( itemPressed.equals("끝내기(X)") ){ frame.setVisible(false); frame.dispose(); System.exit(0); } if ( itemPressed.equals("실행취소(U)") ) { System.out.println("hhh"); } if ( itemPressed.equals("자동 줄 바꿈(W)") ) { System.out.println("sss"); } if ( itemPressed.equals("메모장 정보(A)") ) { System.out.println("vvv"); } if ( itemPressed.equals("상태표시줄 표시") ) { System.out.println("상태표시줄 클릭"); } if ( itemPressed.equals("찾기") ) { find(); } if ( itemPressed.equals("바꾸기") ) { change(); } if ( itemPressed.equals("글꼴") ) { edit(); } if ( itemPressed.equals("이전") ) { card.previous(middlepanel); changetxtarea = changetxtarea - 1; } if ( itemPressed.equals("다음") ) { card.next(middlepanel); changetxtarea = changetxtarea + 1; } if ( itemPressed.equals("메모장 정보(A)") ) { new HeyoriInfo("메모장 정보"); } if ( itemPressed.equals("Cut") ) { cut(); } if ( itemPressed.equals("Copy") ) { copy(); } if ( itemPressed.equals("Paste") ) { paste(); } } //-------------------------------------------------------- //-------------------------------------------------------- // 아 이 템 이 벤 트 핸 들 러 //-------------------------------------------------------- ItemListener il = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { // TODO Auto-generated method stub Object object = e.getSource(); int statecheck = e.getStateChange(); // 상태바 보이기 토글 if ( object == checkstatus) { if(statecheck==1){ panel1.setVisible(true); }else{ panel1.setVisible(false); } } // 토글바 보이기 토글 if( object == togglebar){ if(statecheck==1){ Northp.setVisible(true); }else{ Northp.setVisible(false); } } // 자동줄바꿈 if( object == autoline){ if(statecheck==1){ txtArea.setLineWrap(true); txtArea2.setLineWrap(true); }else{ txtArea.setLineWrap(false); txtArea2.setLineWrap(false); } } } }; //-------------------------------------------------------- //-------------------------------------------------------- // 검색및 바꾸기 기능 //-------------------------------------------------------- private void find() { // 찾기 기능 log = new JDialog(log, "찾기"); log.setLayout(new GridLayout(2, 1)); //각 요소 패널에 넣기 log.add(findpanel = new JPanel()); log.add(btnpanel = new JPanel()); findpanel.add(new JLabel("찾을 단어 : ")); findpanel.add(findfield = new JTextField(5)); btnpanel.add(prevbtn = new JButton("이전")); btnpanel.add(nextbtn = new JButton("다음")); // 단어 검색 prevbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 이전 버튼을 클릭했을 시 작동 // txtarea 선택 되었을 시 작동 if(changetxtarea%2==1){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); id = form.txtArea.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea.getText(); id = text.lastIndexOf(find, id-find.length()-1); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea.select(id, find.length()+id); } } // txtarea2 선택 되었을 시 작동 if(changetxtarea%2==0){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); id = form.txtArea2.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea2.getText(); id = text.lastIndexOf(find, id-find.length()-1); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea2.select(id, find.length()+id); } } } }); nextbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 다음 버튼을 클릭했을 시 작동 // txtarea 선택 되었을 시 작동 if(changetxtarea%2==1){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); id = form.txtArea.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea.getText(); id = text.indexOf(find, id); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea.select(id, find.length()+id); } } // txtarea2 선택 되었을 시 작동 if(changetxtarea%2==0){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); id = form.txtArea2.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea2.getText(); id = text.indexOf(find, id); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea2.select(id, find.length()+id); } } } }); // Dialog 셋팅! log.setVisible(true); log.setBounds(800, 200, 300, 150); } private void change() { // 바꾸기 기능 log = new JDialog(log, "바꾸기"); log.setLayout(new GridLayout(3, 1)); // 각 요소 패널에 넣기 log.add(findpanel = new JPanel()); log.add(changepnanel = new JPanel()); log.add(btnpanel = new JPanel()); findpanel.add(new JLabel("찾을 단어 : ")); findpanel.add(findfield = new JTextField(5)); changepnanel.add(new JLabel("바꿀 단어 : ")); changepnanel.add(changefield = new JTextField(5)); btnpanel.add(prevbtn = new JButton("이전")); btnpanel.add(nextbtn = new JButton("다음")); btnpanel.add(changebtn = new JButton("바꾸기")); // 단어 검색 후 변경 prevbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 이전 버튼을 클릭했을 시 작동 // txtarea 탭 선택 되어있을 시 작동 if(changetxtarea%2==1){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); change = changefield.getText(); id = form.txtArea.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea.getText(); id = text.lastIndexOf(find, id-find.length()-1); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea.select(id, find.length()+id); } } // txtarea2 탭 선택 되어있을 시 작동 if(changetxtarea%2==0){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); change = changefield.getText(); id = form.txtArea2.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea2.getText(); id = text.lastIndexOf(find, id-find.length()-1); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea2.select(id, find.length()+id); } } } }); nextbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 다음 버튼을 클릭했을 시 작동 // txtarea 탭 선택 되어있을 시 작동 if(changetxtarea%2==1){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); change = changefield.getText(); id = form.txtArea.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea.getText(); id = text.indexOf(find, id); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea.select(id, find.length()+id); } } // txtarea2 탭 선택 되어있을 시 작동 if(changetxtarea%2==0){ // 단어 값 + 커서의 위치 값 받기 find = findfield.getText(); change = changefield.getText(); id = form.txtArea2.getCaretPosition(); // 문장을 읽어와서 단어의 위치 검색 String text = form.txtArea2.getText(); id = text.indexOf(find, id); // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea2.select(id, find.length()+id); } } } }); changebtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 바꾸기 버튼을 클릭했을 시 작동 // txtarea 탭 선택 되었있을시 작동 if(changetxtarea%2==1){ // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea.replaceRange(change, id, find.length()+id); form.txtArea.select(id, change.length()+id); } } // txtarea2 탭 선택 되었있을시 작동 if(changetxtarea%2==0){ // 검색이 되었을 경우에만 실행 if (id != -1) { form.txtArea2.replaceRange(change, id, find.length()+id); form.txtArea2.select(id, change.length()+id); } } } }); // Dialog 셋팅! log.setVisible(true); log.setBounds(800, 200, 300, 150); } //-------------------------------------------------------- //-------------------------------------------------------- // 편집창 띄우기 //-------------------------------------------------------- private void edit(){ editFrame = new JFrame("서식 설정"); editFrame.setLayout(new FlowLayout(FlowLayout.CENTER)); editFrame.setSize(780, 160); yesbutton = new JButton("확인"); nobutton = new JButton("취소"); JPanel panel = new JPanel(); JLabel label1 = new JLabel("글꼴 :"); list = new JList(); DefaultListModel dlm1 = new DefaultListModel(); list.setBounds(100, 100, 300, 200); dlm1.addElement("궁서체"); dlm1.addElement("돋움체"); dlm1.addElement("바탕체"); dlm1.addElement("굴림체"); dlm1.addElement("견명조"); dlm1.addElement("엽서"); dlm1.addElement("나무"); dlm1.addElement("휴먼아미체"); dlm1.addElement("휴먼엑스포"); dlm1.addElement("휴먼편지체"); list.setModel(dlm1); list.addListSelectionListener(this) ; list.setVisibleRowCount(4) ; scroll1 = new JScrollPane(list); JPanel panel2 = new JPanel(); JLabel label2 = new JLabel("글꼴 스타일 :"); list2 = new JList(); DefaultListModel dlm2 = new DefaultListModel(); dlm2.addElement("보통"); dlm2.addElement("기울임"); dlm2.addElement("굵게"); list2.setModel(dlm2); list2.addListSelectionListener(this) ; list2.setVisibleRowCount(4) ; scroll2 = new JScrollPane(list2); JPanel panel3 = new JPanel(); JLabel label3 = new JLabel("글꼴 색상 :"); list3 = new JList(); DefaultListModel dlm3 = new DefaultListModel(); dlm3.addElement("검정"); dlm3.addElement("노랑"); dlm3.addElement("초록"); dlm3.addElement("파랑"); dlm3.addElement("빨강"); list3.setModel(dlm3); list3.addListSelectionListener(this) ; list3.setVisibleRowCount(4) ; scroll3 = new JScrollPane(list3); JLabel label4 = new JLabel("크기 :"); list4 = new JList(); DefaultListModel dlm4 = new DefaultListModel(); dlm4.addElement("10"); dlm4.addElement("12"); dlm4.addElement("14"); dlm4.addElement("16"); dlm4.addElement("18"); dlm4.addElement("20"); dlm4.addElement("22"); dlm4.addElement("24"); dlm4.addElement("26"); dlm4.addElement("28"); dlm4.addElement("30"); dlm4.addElement("32"); list4.setModel(dlm4); list4.addListSelectionListener(this) ; list4.setVisibleRowCount(4) ; scroll4 = new JScrollPane(list4); // 확인 버튼 눌렀을시 변경하기 yesbutton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub Font f1 = null; // txtarea 탭 선택 되었있을시 작동 if(changetxtarea%2==1){ if(fontcolor=="검정"){ txtArea.setForeground(Color.black); } else if(fontcolor=="노랑"){ txtArea.setForeground(Color.yellow); } else if(fontcolor=="초록"){ txtArea.setForeground(Color.green); } else if(fontcolor=="파랑"){ txtArea.setForeground(Color.blue); } else{ txtArea.setForeground(Color.red); } if(fontstyle=="보통"){ f1 = new Font(font, Font.PLAIN , Integer.parseInt(fontsize)); }else if(fontstyle=="기울임"){ f1 = new Font(font, Font.ITALIC , Integer.parseInt(fontsize)); }else{ f1 = new Font(font, Font.BOLD , Integer.parseInt(fontsize)); } txtArea.setFont(f1); } // txtarea2 탭 선택 되었있을시 작동 if(changetxtarea%2==0){ if(fontcolor=="검정"){ txtArea2.setForeground(Color.black); } else if(fontcolor=="노랑"){ txtArea2.setForeground(Color.yellow); } else if(fontcolor=="초록"){ txtArea2.setForeground(Color.green); } else if(fontcolor=="파랑"){ txtArea2.setForeground(Color.blue); } else{ txtArea2.setForeground(Color.red); } if(fontstyle=="보통"){ f1 = new Font(font, Font.PLAIN , Integer.parseInt(fontsize)); }else if(fontstyle=="기울임"){ f1 = new Font(font, Font.ITALIC , Integer.parseInt(fontsize)); }else{ f1 = new Font(font, Font.BOLD , Integer.parseInt(fontsize)); } txtArea2.setFont(f1); } editFrame.setVisible(false); } }); // 취소버튼 눌렀을시 창 nobutton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub editFrame.setVisible(false); } }); editFrame.add(yesbutton); editFrame.add(nobutton); editFrame.add(panel); editFrame.add(label1); editFrame.add(scroll1); editFrame.add(panel2); editFrame.add(label2); editFrame.add(scroll2); editFrame.add(panel3); editFrame.add(label3); editFrame.add(scroll3); editFrame.add(label4); editFrame.add(scroll4); editFrame.add(yesbutton); editFrame.add(nobutton); editFrame.setVisible(true); } //-------------------------------------------------------- // popup 창에서 copy , paste, cut //-------------------------------------------------------- private void copy() { // 복사 기능 // txtarea 탭 선택 되었있을시 작동 if(changetxtarea%2==1){ form.txtArea.copy(); } // txtarea2 탭 선택 되었있을시 작동 if(changetxtarea%2==0){ form.txtArea2.copy(); } } private void paste() { // 붙여넣기 기능 // txtarea 탭 선택 되었있을시 작동 if(changetxtarea%2==1){ form.txtArea.paste(); } // txtarea2 탭 선택 되었있을시 작동 if(changetxtarea%2==0){ form.txtArea2.paste(); } } private void cut() { // 잘라내기 기능 // txtarea 탭 선택 되었있을시 작동 if(changetxtarea%2==1){ form.txtArea.cut(); } // txtarea2 탭 선택 되었있을시 작동 if(changetxtarea%2==0){ form.txtArea2.cut(); } } //-------------------------------------------------------- // 컨 스 럭 터 //-------------------------------------------------------- HeyoriNotepad () { frame = new JFrame(curFilename + progName); frame.addWindowListener(this); txtArea = new JTextArea(); txtArea.setFont(new Font("굴림체", Font.BOLD, 15)); txtArea.setBackground(new Color(237, 220, 240)); txtArea.getDocument().addDocumentListener(this); txtArea.addKeyListener(this); txtArea2 = new JTextArea(); txtArea2.setFont(new Font("굴림체", Font.BOLD, 15)); txtArea2.setBackground(new Color(200, 220, 240)); txtArea2.getDocument().addDocumentListener(this); txtArea2.addKeyListener(this); JScrollPane txtscroll = new JScrollPane(txtArea); JScrollPane txtscrol2 = new JScrollPane(txtArea2); // txtField = new JTextField() ; // txtField.setFont(new Font("굴림체", Font.BOLD, 15)); // txtField.setBackground(new Color(237, 220, 240)); // txtField.addTextListener(this); /////////////////////////////////// // TextArea를 TAB으로 만들기 // ////////////////////////////////// wholepanel = new JPanel(); sheetpanel = new JPanel(); middlepanel = new JPanel(); card = new CardLayout( ); sheet1 = new JButton("이전"); sheet2 = new JButton("다음"); sheet1.addActionListener(this); sheet2.addActionListener(this); sheetpanel.add(sheet1); sheetpanel.add(sheet2); middlepanel.setLayout(card); middlepanel.add(txtscroll,"1"); middlepanel.add(txtscrol2,"2"); wholepanel.setLayout(new BorderLayout()); wholepanel.add("North",sheetpanel); wholepanel.add("Center",middlepanel); ///////////////////////////////////// /////////////////////////////////// //객체 단어를 입력하였을시 띄어줄 다이얼로그 창 // ////////////////////////////////// wow = new JDialog(frame, "알람"); JLabel lb4 = new JLabel("q를 입력하셨습니다"); wow.add(lb4); wow.setSize(150,70); wow.addWindowListener(this); wow.setVisible(false); frame.setSize(800, 500); frame.setVisible(true); /////////////////////////////////// // 팝업메뉴 만들기 // ////////////////////////////////// pMenu = new PopupMenu("Edit"); miCut = new MenuItem("Cut"); miCut.addActionListener(this); miCopy = new MenuItem("Copy"); miCopy.addActionListener(this); miPaste = new MenuItem("Paste"); miPaste.addActionListener(this); pMenu.add(miCut); pMenu.add(miCopy); pMenu.add(miPaste); frame.add(pMenu); txtArea.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { if (me.getModifiers() == me.BUTTON3_MASK) pMenu.show(frame, me.getX(), me.getY()); } }); txtArea2.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { if (me.getModifiers() == me.BUTTON3_MASK) pMenu.show(frame, me.getX(), me.getY()); } }); /////////////////////////////////// panel1 = new JPanel(); lb1 = new JLabel("입력된 글자수는 0입니다"); lb2 = new JLabel(parseDate()); lb3 = new JLabel("분당 타이핑 속도 : 0/분"); panel1.add(lb1); panel1.add(lb3); panel1.add(lb2); menuBar = new JMenuBar(); mnFile = new JMenu("파일(F)"); mnEdit = new JMenu("편집(E)"); mnForm = new JMenu("서식(O)"); mnHelp = new JMenu("도움말(H)"); miFile01 = new JMenuItem("새로 만들기(N)"); miFile01.addActionListener(this); miFile02 = new JMenuItem("열 기(O)..."); miFile02.addActionListener(this); miFile03 = new JMenuItem("저 장(S)"); miFile03.addActionListener(this); miFile04 = new JMenuItem("다른 이름으로 저장(A)"); miFile04.addActionListener(this); miFile05 = new JMenuItem("끝내기(X)"); miFile05.addActionListener(this); /,, miFile01.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK )); miFile02.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK )); miFile03.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK )); togglebar = new JCheckBoxMenuItem("툴바 표시",true); togglebar.addItemListener(il); // Status Bar를 메뉴에서 Toggle시키기 checkstatus = new JCheckBoxMenuItem("상태표시줄 표시",true); checkstatus.addItemListener(il); findword = new JMenuItem("찾기"); findword.addActionListener(this); changeword = new JMenuItem("바꾸기"); changeword.addActionListener(this); miForm01 = new JMenuItem("글꼴"); miForm01.addActionListener(this); autoline = new JCheckBoxMenuItem("자동 줄바꿈",false); autoline.addItemListener(il); miHelp01 = new JMenuItem("메모장 정보(A)"); miHelp01.addActionListener(this); menuBar.add(mnFile); menuBar.add(mnEdit); menuBar.add(mnForm); menuBar.add(mnHelp); mnFile.add(miFile01); mnFile.add(miFile02); mnFile.add(miFile03); mnFile.add(miFile04); mnFile.addSeparator(); mnFile.add(miFile05); mnEdit.add(togglebar); mnEdit.add(checkstatus); mnEdit.add(findword); mnEdit.add(changeword); mnForm.add(autoline); mnForm.add(miForm01); mnHelp.add(miHelp01); Northp = new JPanel(); Northp.add(new Button("Toolbar")); Northp.add(new Button("toggle")); Northp.add(new Button("is")); Northp.setBackground(Color.red); frame.setJMenuBar(menuBar); frame.add(Northp,BorderLayout.NORTH); frame.add(wholepanel, BorderLayout.CENTER); frame.add(panel1 ,BorderLayout.SOUTH); } //-------------------------------------------------------- public static void main ( String[] args ) { HeyoriNotepad notepad = new HeyoriNotepad(); mb = new HeyoriMessageBox(); // 글자수 세기 위한 쓰레드 생성 및 시작 TextLnegthThread textLnegthThread = new TextLnegthThread(); textLnegthThread.start(); // 시간을 나타내기 위한 쓰레드 생성 및 시작 TimeThread timethread = new TimeThread(); timethread.start(); // 분당 타이핑 속도를 나타내기 위한 쓰레드 생성 및 시작 TypingThread typingThread = new TypingThread(); typingThread.start(); } //-------------------------------------------------------- // 시스템 시간 불러오기 //-------------------------------------------------------- public static String parseDate() { long time = System.currentTimeMillis(); SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date dd = new Date(time); return format.format(dd); } } //-------------------------------------------------------- // 글자수를 세기위한 쓰레드 //-------------------------------------------------------- class TextLnegthThread extends Thread { public void run( ) { while(true) { try { sleep(500); if(HeyoriNotepad.changetxtarea%2==1){ HeyoriNotepad.textlength = HeyoriNotepad.txtArea.getText(); int textSize = HeyoriNotepad.textlength.length(); HeyoriNotepad.lb1.setText("입력된 글자수는 "+textSize+"입니다"); } if(HeyoriNotepad.changetxtarea%2==0){ HeyoriNotepad.textlength = HeyoriNotepad.txtArea2.getText(); int textSize = HeyoriNotepad.textlength.length(); HeyoriNotepad.lb1.setText("입력된 글자수는 "+textSize+"입니다"); } } catch(InterruptedException e) { } } } } //-------------------------------------------------------- // 시간을 나타내기 위한 쓰레드 //-------------------------------------------------------- class TimeThread extends Thread { public void run( ) { while(true) { try { sleep(1000); String time = HeyoriNotepad.parseDate(); HeyoriNotepad.lb2.setText(time); } catch(InterruptedException e) { } } } } //-------------------------------------------------------- //쓰레드로 타자실력(타수/분당)보여주기 //-------------------------------------------------------- class TypingThread extends Thread { public void run( ) { int temp =0; while(true) { try { sleep(1000); if(HeyoriNotepad.changetxtarea%2==1){ if(HeyoriNotepad.txtArea.getText().length()>=1){ temp=temp+1; String checkchar = HeyoriNotepad.txtArea.getText(); int textSize = checkchar.length(); HeyoriNotepad.lb3.setText("분당 타이핑 속도 : "+(textSize *60)/temp+"/분"); } } if(HeyoriNotepad.changetxtarea%2==0){ if(HeyoriNotepad.txtArea2.getText().length()>=1){ temp=temp+1; String checkchar = HeyoriNotepad.txtArea2.getText(); int textSize = checkchar.length(); HeyoriNotepad.lb3.setText("분당 타이핑 속도 : "+(textSize *60)/temp+"/분"); } } } catch(InterruptedException e) { } } } }