• 2010. 4. 20.

    by. 별머루

      
      

    Swing을 이용한 윈도우 메모장 만들기

      

    /*---------------------------------------------------------------------------

    Jmemo.java

    스윙으로 구현한 윈도우 메모장

    첨부 파일 - 이미지+ 도움말... ( 경로 /img )

    제작 : 박성철

    도움말 미완성.. ㅠㅠ

    ---------------------------------------------------------------------------*/

    import java.io.*;
    import java.beans.*;
    import java.awt.*;
    import java.awt.datatransfer.*;
    import java.awt.print.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;
    import javax.swing.event.*;
    import javax.swing.undo.*;
    import javax.swing.border.*;


    public class Jmemo extends JFrame implements ClipboardOwner,ActionListener,Printable,UndoableEditListener
    {
       Container contentPane;
     private JTextArea ta = new JTextArea(); //글을쓸 텍스트에어리어
     private JMenuBar mb = new JMenuBar();//메뉴바
     private JMenu m1,m2,m3,m4;//메뉴
     private JMenuItem mi11,mi12,mi13,mi14,mi15,mi16,mi17
      ,mi21,mi22,mi23,mi24,mi25,mi26,mi27,mi28,mi29,mi2a,mi2b
      ,mi32
      ,mi41,mi42 ;//메뉴 아이템
     private JCheckBoxMenuItem mi31;
     
     String st="";
     File file;
     private JOptionPane jOptionPane;
     Object options[]={"예","아니오","취소"};
     int cnt;

     JViewport viewPort;
     JScrollPane scrollPane;
     
     UndoManager undoManager=new UndoManager();

      public Jmemo(String title)
      {
      super(title);
      
    /*  
      try
      {//룩앤필 설정 : 윈도우(윈도우에서만 가능)
       UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
      }
      catch(Exception e)
      {
       System.err.println("자바 룩앤필 에러 :"+e.getMessage());
       JOptionPane.showMessageDialog(this,"Windows환경에서만 가능합니다."
        ,"자바 룩앤필 에러",JOptionPane.ERROR_MESSAGE);
      }
    */
      try
      {//룩앤필 설정 : 크로스
       UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
      }
      catch(Exception e)
      {
       System.err.println("자바 룩앤필 에러 :"+e.getMessage());
         JOptionPane.showMessageDialog(this,"설정하신 룩앤필이 존재하지 않습니다.","자바 룩앤필 에러",JOptionPane.ERROR_MESSAGE);
      }


      
      Image img=getToolkit().getImage("img/memo.gif");
      setIconImage(img);//윈도우 아이콘 변경
      addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent we){
               System.exit(0);}});//윈도우 종료시 프로그램 종료   
      
      ta.getDocument().addUndoableEditListener(this);   
      contentPane = getContentPane();  
          scrollPane =new JScrollPane(ta);
          //scrollPane.add(ta);
          viewPort=scrollPane.getViewport();    
          viewPort.add(ta);     
      contentPane.add(scrollPane);//TextArea       
           
          
         
      
      this.setJMenuBar(mb);//메뉴바  
     ///////////////////////////////메뉴 구성////////////////////////////////////////////// 
      m1 = new JMenu("파일");  
      
      mi11 = new JMenuItem("새로만들기");
      mi12 = new JMenuItem("열기");
      mi13 = new JMenuItem("저장");
      mi14 = new JMenuItem("다른이름으로저장");
      mi15 = new JMenuItem("페이지설정");
      mi16 = new JMenuItem("인쇄");
      mi17 = new JMenuItem("끝내기");

      mi11.addActionListener(this);//액션리스너 등록
      mi12.addActionListener(this);
      mi13.addActionListener(this);
      mi14.addActionListener(this);
      mi15.addActionListener(this);
      mi16.addActionListener(this);
      mi17.addActionListener(this);
      
      mi11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
      mi12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
      mi13.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
      mi14.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.ALT_MASK));
      mi15.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.ALT_MASK));
      mi16.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK));
      mi17.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK));
      
      mb.add(m1);  
      
      m1.add(mi11);
      m1.add(mi12);
      m1.add(mi13);
      m1.add(mi14);
      m1.addSeparator();
      m1.add(mi15);
      m1.add(mi16);
      m1.addSeparator();
      m1.add(mi17);
      
      m2 = new JMenu("편집");
      
      mi21 = new JMenuItem("실행취소");
      mi22 = new JMenuItem(new DefaultEditorKit.CutAction());
          mi22.setText("잘라내기");
          mi23 = new JMenuItem(new DefaultEditorKit.CopyAction());
          mi23.setText("복사");
      mi24 = new JMenuItem(new DefaultEditorKit.PasteAction());
          mi24.setText("붙여넣기");
      mi25 = new JMenuItem("삭제");
      mi26 = new JMenuItem("찾기");
      mi27 = new JMenuItem("다음찾기");
      mi28 = new JMenuItem("바꾸기");
      mi29 = new JMenuItem("이동");
      mi2a = new JMenuItem("모두선택");
      mi2b = new JMenuItem("시간날짜");
      
      mi21.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, ActionEvent.CTRL_MASK));
      mi22.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
      mi23.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
      mi24.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
      //mi25.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE));
      mi26.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK));
      //mi27.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,ActionEvent.META_MASK));
      mi28.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.CTRL_MASK));
      mi29.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, ActionEvent.CTRL_MASK));
      mi2a.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));
      //mi2b.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,ActionEvent.META_MASK));
      
      mi21.addActionListener(this);
      mi22.addActionListener(this);
      mi23.addActionListener(this);
      mi24.addActionListener(this);
      mi25.addActionListener(this);
      mi26.addActionListener(this);
      mi27.addActionListener(this);
      mi28.addActionListener(this);
      mi29.addActionListener(this);
      mi2a.addActionListener(this);
      mi2b.addActionListener(this);
      
      mb.add(m2);
      
      m2.add(mi21);
      m2.addSeparator();
      m2.add(mi22);
      m2.add(mi23);
      m2.add(mi24);
      m2.add(mi25);
      m2.addSeparator();
      m2.add(mi26);
      m2.add(mi27);
      m2.add(mi28);
      m2.add(mi29);
      m2.addSeparator();
      m2.add(mi2a);
      m2.add(mi2b);
      
      m3 = new JMenu("서식");
      
      mi31 = new JCheckBoxMenuItem("자동줄바꿈");
      mi32 = new JMenuItem("글꼴");
      
      mi31.addActionListener(this);
      mi32.addActionListener(this);
      
      mb.add(m3);
      
      m3.add(mi31);
      m3.add(mi32);
      
      m4 = new JMenu("도움말");
      
      mi41 = new JMenuItem("도움말항목");
      mi42 = new JMenuItem("메모장정보");
      
      mi41.addActionListener(this);
      mi42.addActionListener(this);
      
      mb.add(m4);
      
      m4.add(mi41);
      m4.addSeparator();
      
      m4.add(mi42);  
          
      }
     
     public boolean keyDown(Event e,int key)
     {
      cnt++;
      System.out.println("SD");
      return false;
     }
     
     public void actionPerformed(ActionEvent ae)//메뉴 액션 처리
     {
      try{
       String gac=ae.getActionCommand();
       if(gac.equals("새로만들기"))
       {    
        File f=getFile();
        if(!("".equals(ta.getText()))&&f==null)  
        {
         jOptionPane = new JOptionPane();
         jOptionPane.showOptionDialog(this,getTitle().replaceAll("- 메모장","")+
          " 파일의 내용이 변경되 었습니다.\n 변경된 내용을 저장 하시겠습니까?",
          "메모장",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,
            null, options,options[0]);
         if(jOptionPane.getValue().equals(options[0]))
           saveDocument(true);
         else
          ta.setText("");
         /*
         JOptionPane.showOptionDialog(this,getTitle().replaceAll("- 메모장","")+
         " 파일의 내용이 변경되 었습니다.\n 변경된 내용을 저장 하시겠습니까?",
                "메모장",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null, options,options[0]);
         */
        }   
        else if(cnt>0)
        {
         JOptionPane.showOptionDialog(this,getTitle().replaceAll("- 메모장","")+
         " 파일의 내용이 변경되 었습니다.\n 변경된 내용을 저장 하시겠습니까?",
                "메모장",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null, options,options[0]);
        }
       }
       else if(gac.equals("열기"))
       {
        cnt=0;
        ta.setText("");
        openDocument();
       }
       else if(gac.equals("저장"))
       {
        saveDocument(false);
       }
       else if(gac.equals("다른이름으로저장"))
       {
        saveDocument(true);
       }
       else if(gac.equals("페이지설정"))
       {
          printPage();
       }
       else if(gac.equals("인쇄"))
       {
          printDocument();
       }
       else if(gac.equals("끝내기"))
       {
        System.exit(0);
       }
       else if(gac.equals("실행취소"))
       {
        undoManager.undo();
       }
       else if(gac.equals("삭제"))
       {
        ta.replaceRange("",ta.getSelectionStart(), ta.getSelectionEnd());
       }
       else if(gac.equals("찾기"))
       {
        FindDialog fd=new FindDialog(this);
        fd.setBounds(getX()+40,getY()+70,450,150);
        fd.show();    
       }
       else if(gac.equals("바꾸기"))
       {
        ChangeDialog cd=new ChangeDialog(this);
        cd.setBounds(getX()+40,getY()+70,450,200);
        cd.show();      
       }
       else if(gac.equals("이동"))
       {
        MoveDialog md=new MoveDialog(this);
        md.setBounds(getX()+40,getY()+70,250,130);
        md.show();  
        int line= md.lineNumber();
        //viewPort.setViewPosition(new Point(0,line));
        ta.setCaretPosition(line);
        //System.out.print(line);
       }   
       else if(gac.equals("자동줄바꿈"))
       {
        if(mi31.getState())
         ta.setLineWrap(true);
        else
         ta.setLineWrap(false);
       }
       else if(gac.equals("글꼴"))
       {
        FontDialog ftd=new FontDialog(this);
        ftd.setBounds(getX()+40,getY()+70,530,320);    
        ftd.show(); 
        Font ft= ftd.fontSet();
        ta.setFont(ft);
       }
       else if(gac.equals("모두선택"))
       {    
        ta.selectAll ();
        ta.requestFocus();
       }
       else if(gac.equals("메모장정보"))
       {    
        HelpDialog hd=new HelpDialog(this);
        hd.setBounds(getX()+40,getY()+70,411,313);
        hd.show();
       }
       else if(gac.equals("도움말항목"))
       {
        //String [] cmdar={"/img/hh.exe","/img/notepad.chm","/img/hh.exe"};
        //Process p = Runtime.getRuntime().exec("/img/hh.exe notepad.chm");
        //Process p = Runtime.getRuntime().exec(cmdar);
        //Process p = Runtime.getRuntime().exec("C:/WINNT/help/hh.exe notepad.chm");
        Process p = Runtime.getRuntime().exec("C:/WINNT/notepad.exe"); 
       }
      }catch(Exception e){}
     }
     
     public void openDocument()
     {
       JFileChooser chooser=new JFileChooser();
      System.out.println(chooser.getFileFilter() );
       chooser.setDialogTitle("파일 열기");
       int returnVal=chooser.showOpenDialog(this);
       if(returnVal !=JFileChooser.APPROVE_OPTION)//cancel 버튼이 눌려지면 취소
        return;
        File f=chooser.getSelectedFile();//대화상자에서 선택된 파일객체 인스턴스를 구한다
       
       if(!f.exists())
       {//파일이 존재하지 않으면 에러 메세지를 띄운후 취소
         JOptionPane.showMessageDialog(this,file.getName()+" 파일을 찾을 수 없습니다.",
          "파일 열기 에러",JOptionPane.ERROR_MESSAGE);
          return;
       }
      openFile(f);
     }///////////////////////openDocument() ////////////////////
     
     public void openFile(File file)
     {///파일을 읽어들여 jta에 표시
      
      BufferedReader in=null;//버퍼 문자 입력 스트림
      //ta.setText("");//텍스트에리어 내용 초기화
      setTitle(file.getName());//윈도우 제목을 파일 이름으로
       try
       {
       in=new BufferedReader(new FileReader(file));
       }
       catch(FileNotFoundException fnfe)
       {//에러 메세지
        System.err.println("파일 열기 에러 :"+file.getName()+"파일을 찾을 수 없습니다.");
        JOptionPane.showMessageDialog(this,file.getName()+"파일을 찾을 수 없습니다.","파일 열기에러",JOptionPane.ERROR_MESSAGE);
        return;
       }
       catch(Exception e)
       {
        System.err.println("파일 열기 에러 :"+file.getName()+"파일을 찾을 수 없습니다.");
        JOptionPane.showMessageDialog(this,e.getMessage(),"파일 열기에러",JOptionPane.ERROR_MESSAGE);
        return;
       }
       
       try
       {////한 줄씩 읽어서 string형에 저장한후 ta에 보낸다
        String string="";    
        while((string=in.readLine())!=null)
        {
         st=st+(string+'\n');
        }
       ta.setText("");
       ta.setText(st);   
       }
       catch(IOException ie)
       {
       System.err.println("파일 읽기 에러 :"+ie.getMessage());
       }
       try
       {
        in.close();//입력 스트림 닫는다.
       }catch(IOException ie){}
       
       ta.setCaretPosition(0);//커서를 처음으로 위치
       viewPort.setViewPosition(new Point(0,0));//위쪽을 보여줌
      System.out.print(file.getName());
       this.file=file;//읽어들인 파일을 file멤버 필드로 설정
     }//////////////////////////////////////openFile(File file) end/////////////////

     public File getFile()
     {///문서 윈도우의 내용을 파일로 알림
      return file;
     }
     
     public void saveDocument(boolean isSaveAs)
     {//true면 새이름으로 false면 저장
      if(isSaveAs==true)
      {//새이름으로 저장할 경우 파일 대화상자 표시
       JFileChooser chooser=new JFileChooser();
       chooser.setDialogTitle("새 이름으로 저장");
       int returnVal=chooser.showSaveDialog(this);
       
        if(returnVal !=JFileChooser.APPROVE_OPTION)
         return;
        File f=chooser.getSelectedFile();
        if(f.exists())
        {//파일 이름이 이미 존재하면 덮어쓸 것인지 물어본다
         Object options[]={"예","아니오"};
         if(JOptionPane.showOptionDialog(this,"파일이 이미 존재 합니다.덮어쓸까요?","경고",
          JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]) !=0)
           return;//아니오를 선택하면 저장취소
        }
        saveFile(f);
       }
        else if(isSaveAs==false)
        {//현재 문서 윈도우에 지정된 파일 인스턴스를 가져온다.
        File f=getFile();
       if(f==null)
       {
        saveDocument(true);
       }
         if(!f.exists())
         {//파일이 이미 존재하지 않으면 저장을 계속할 것인지 한번더 확인 한다.
          Object options[]={"예","아니오"};
         if(JOptionPane.showOptionDialog(this,"파일이 존재하지 않습니다.그래도 저장 할까요?","경고",
          JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]) !=0)
           return;
         }     
        }
       }/////////saveDocument(boolean isSaveAs) end//////////////
     
     public void saveFile(File file)
     {///////////file 인자로 지정된 파일로 현재 내용 저장
      PrintWriter out=null;//문자 출력 스트림
      
       try
       {
        out=new PrintWriter(new BufferedWriter(new FileWriter(file)));
       }
       catch(IOException ie)
       {
        System.err.println("파일 저장 에러 :"+file.getName()+"파일을 생성 할 수 없습니다.");
        JOptionPane.showMessageDialog(this,file.getName()+"파일을 생성 할 수 없습니다.",
         "파일 저장 에러",JOptionPane.ERROR_MESSAGE);
       }
       
       String string=ta.getText();
       out.print(string);//실제 파일에 쓴다
       if(out.checkError())
       {//print() 메서드는  IOException을 던지지 않으므로 직접 검사를 해보아야 한다.
         System.err.println("파일 쓰기 에러");
       }
       else
       {
         JOptionPane.showMessageDialog(this,file.getName()+" 파일을 저장 하였습니다.","안내 메세지",JOptionPane.INFORMATION_MESSAGE);
       }
       out.close();//출력 스트림을 닫는다.
       setTitle(file.getName());//현재 파일 이름으로 윈도우 제목 설정
       this.file=file;//현재 저장된 파일 객체 인스턴스를 멤버 필드값으로 저장
     }////////////////////////////////////////saveFile(File file) end//////////////////
     
     public void printPage()
     {/////쪽 설정////
      PrinterJob pj=PrinterJob.getPrinterJob();
      pj.setPrintable(this);
      pj.pageDialog(pj.defaultPage());     
     }///쪽설정 끝////
     
     public void printDocument()
     {////프린트//////
      try{
       PrinterJob pj=PrinterJob.getPrinterJob();
       pj.setPrintable(this);
       pj.printDialog();
       pj.print();
       }catch(Exception e){}
     }////프린트 끝//// 
      
     public int print(Graphics g, PageFormat pf, int pi)throws PrinterException
     {////////Printable 구현/////////  
      if (pi >= 1)
      {
       return Printable.NO_SUCH_PAGE;
      }
      Graphics g2=(Graphics2D)g;
      g2.translate((int)pf.getImageableX(),(int)pf.getImageableY());
      this.paint(g2);
      return Printable.PAGE_EXISTS;
      }////////Printable 구현 끝/////////
     
     public void lostOwnership(Clipboard cb, Transferable contents){}//ClipboardOwner 구현
     
     public void undoableEditHappened(UndoableEditEvent undoe)
     {//UndoableEditListener 구현
      if(undoManager !=null)
       undoManager.addEdit(undoe.getEdit());
     }//UndoableEditListener 구현 끝   
     
      public static void main(String args[])
     {
      Jmemo jm=new Jmemo("제목 없음 - 메모장");
      jm.setBounds(300,200,600,400);
      jm.setVisible(true) ;
     }
    }

    class FindDialog extends JDialog implements ActionListener
    {
      private JLabel fjdl = new JLabel();
      private JTextField jfdt = new JTextField();
      private JButton jdsbn = new JButton();
      private JButton jfdc = new JButton();
      private JPanel jfdp = new JPanel();
      private TitledBorder titledBorder1;
      private JRadioButton jfdup = new JRadioButton();
      private JRadioButton jfddown = new JRadioButton();
      private JCheckBox jfdul = new JCheckBox();

      public FindDialog(Frame parent)
     {
        super(parent,"찾기",false);
      
      setResizable(false);

        titledBorder1 = new TitledBorder(new EtchedBorder(EtchedBorder.RAISED,Color.gray,Color.white),"방향");
        jfdc.setBounds(342, 63, 98, 26);
        jfdc.setText("취소");
      jfdc.addActionListener(this);
        jdsbn.setBounds(342, 28, 98, 26);
        jdsbn.setText("다음 찾기");  
      jdsbn.addActionListener(this);  
      jdsbn.setEnabled(false);//첫 프로그램 실행시 선택 되지 않게 설정
      fjdl.setText("찾을 내용:");
        fjdl.setBounds(17, 29, 58, 24);
        this.getContentPane().setLayout(null);
        jfdt.setBounds(94, 29, 235, 21);
        jfdp.setBorder(titledBorder1);
        jfdp.setBounds(128, 59, 200, 45);
        jfdp.setLayout(null);
        jfdup.setText("위쪽");
        jfdup.setBounds(18, 20, 62, 14);
        jfddown.setText("아래쪽");
        jfddown.setBounds(108, 20, 62, 14);
        jfdul.setText("대/소문자 구분");
        jfdul.setBounds(20, 75, 101, 26);
        this.getContentPane().add(fjdl, null);
        this.getContentPane().add(jfdt, null);
        this.getContentPane().add(jdsbn, null);
        this.getContentPane().add(jfdc, null);
        this.getContentPane().add(jfdp, null);
        jfdp.add(jfdup, null);
        jfdp.add(jfddown, null);
        this.getContentPane().add(jfdul, null);
      
      //jfdt.requestFocus();
       jfdt.setCaretPosition(0);
      }
     
     public void actionPerformed(ActionEvent ae)
     {
      try{
      String gac=ae.getActionCommand();
      
       if(gac.equals("취소"))
       {
        dispose();
       }
       else if(gac.equals("다음 찾기"))
       {
       }
      }catch(Exception e){} 
     }  
    }

    class ChangeDialog extends JDialog implements ActionListener
    {
      private JLabel jcdl1 = new JLabel();
      private JLabel jcdl2 = new JLabel();
      private JTextField jcdtf1 = new JTextField();
      private JTextField jcdtf2 = new JTextField();
      private JButton jcdb1 = new JButton();
      private JButton jcdb2 = new JButton();
      private JButton jcdb3 = new JButton();
      private JButton jcdb4 = new JButton();
      private JCheckBox jcdcb = new JCheckBox();

      public ChangeDialog(Frame parent)
     {
        super(parent,"바꾸기",false);
      
      setResizable(false);

        jcdcb.setText("대/소문자 구분");
        jcdcb.setBounds(24, 125, 178, 24);
        jcdb4.setBounds(318, 135, 106, 28);
        jcdb4.setText("취소");
        jcdb3.setBounds(318, 102, 106, 28);
        jcdb3.setText("모두 바꾸기");

        jcdb2.setBounds(318, 68, 106, 28);
        jcdb2.setText("바꾸기");
        jcdb1.setBounds(318, 35, 106, 28);
        jcdb1.setText("다음 찾기");
        jcdtf2.setBounds(100, 75, 197, 22);
        jcdtf1.setBounds(100, 39, 197, 22);
        jcdl2.setText("바꿀 내용: ");
        jcdl2.setBounds(20, 59, 79, 28);
        jcdl1.setText("찾을 내용: ");
        jcdl1.setBounds(20, 29, 79, 28);
        this.getContentPane().setLayout(null);
        this.getContentPane().add(jcdtf2, null);
        this.getContentPane().add(jcdl1, null);
        this.getContentPane().add(jcdl2, null);
        this.getContentPane().add(jcdtf1, null);
        this.getContentPane().add(jcdb1, null);
        this.getContentPane().add(jcdb2, null);
        this.getContentPane().add(jcdb3, null);
        this.getContentPane().add(jcdb4, null);
        this.getContentPane().add(jcdcb, null);
      }
     
     public void actionPerformed(ActionEvent ae)
     {
      dispose();
     }  
    }

    class MoveDialog extends JDialog implements ActionListener
    {
     private JTextField jmdt = new JTextField();
     private JButton jmdb1 = new JButton();
     private JButton jmdb2 = new JButton();
     String getline   = new String();
     
     public MoveDialog(Frame parent)
     {
        super(parent,"이동",true);
      
      jmdt.setBounds(14, 21, 115, 26);
        this.getContentPane().setLayout(null);
        jmdb1.setBounds(143, 16, 87, 29);
        jmdb1.setText("확인");
      jmdb1.addActionListener(this);
        jmdb2.setBounds(144, 60, 87, 29);
        jmdb2.setText("취소");
      jmdb2.addActionListener(this);
        this.getContentPane().add(jmdb1, null);
        this.getContentPane().add(jmdb2, null);
        this.getContentPane().add(jmdt, null);  
     }
     
     public int lineNumber()
     {  
      return Integer.parseInt(getline);
     }
     
     public void actionPerformed(ActionEvent ae)
     {
      try{
       String gac=ae.getActionCommand();
       
       if(gac.equals("확인"))
       {    
        getline=jmdt.getText();  
        dispose();
       }
       else if(gac.equals("취소"))
       {
        dispose();
       }
      }catch(Exception e){}
     } 
    }

    class FontDialog extends Dialog implements ActionListener
    {
      private Label jfdl1 = new Label();
      private Label jfdl2 = new Label();
      private Label jfdl3 = new Label();
      private Label jfdl4 = new Label();
      private Label jfdl5 = new Label();
      private Label jfdl6 = new Label();
      private TextField jfdtf1 = new TextField();
      private TextField jfdtf2 = new TextField();
      private TextField jfdtf3 = new TextField();
      private List jfdls1 = new List();
      private List jfdls2 = new List();
      private List jfdls3 = new List();
      private Choice jfdcb = new Choice();
      private Button jfdb1 = new Button();
      private Button jfdb2 = new Button();
      private TextField jfdtf4 = new TextField();
      Graphics g;
     
     Font f;
     String fontname="SansSerif";
     int fontstyle=Font.PLAIN;
     int size=8;
     
      String [] allFonts=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
      private String [] allSizes = {"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};
      private String [] allStyle ={"보통","기울임꼴","굵게","굵은 기울임꼴"};
      FontDialog(Frame parent) 
     {
        super(parent,"글꼴",true);
      
      setResizable(false);
      addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){dispose();}});
          setLayout(null);
      
      for(int i=0;i<allFonts.length;i++)
      {
      jfdls1.add(allFonts[i]);
      }
      
      for(int i=0;i<16;i++)
      {
       jfdls3.add(allSizes[i]);
      }  
      
      for(int i=0;i<4;i++)
      {
       jfdls2.add(allStyle[i]);
      }
        jfdl1.setText("글꼴");
        jfdl1.setBounds(10, 24, 98, 26);
        jfdl2.setText("글꼴 스타일");
        jfdl2.setBounds(198, 26, 98, 26);
        jfdl3.setText("크기");
        jfdl3.setBounds(340, 24, 98, 26);
        jfdl4.setText("보기");
      jfdl4.setBounds(266,157,49,25);
      jfdl5.setText("스크립트");
        jfdl5.setBounds(266, 236, 98, 25);
        jfdtf1.setBounds(10, 49, 181, 24);
        jfdtf2.setBounds(201, 49, 129, 24);
        jfdtf3.setBounds(340, 49, 91, 24);
        jfdls1.setBounds(10, 77, 181, 79);
      jfdls1.addActionListener(this);
        jfdls2.setBounds(201, 77, 129, 79);
      jfdls2.addActionListener(this);
        jfdls3.setBounds(340, 77, 91, 79);
      jfdls3.addActionListener(this);
        jfdcb.setBounds(258, 263, 180, 22);
        jfdb1.setBounds(436, 51, 82, 28);
        jfdb1.setLabel("확인");
      jfdb1.addActionListener(this);
        jfdb2.setBounds(436, 85, 82, 28);
        jfdb2.setLabel("취소");
      jfdb2.addActionListener(this);

      add(jfdcb);
      add(jfdl4);
      add(jfdl5);
      add(jfdl1);
      add(jfdtf1);
      add(jfdls1);
      add(jfdb1);
      add(jfdb2);
      add(jfdls3);
      add(jfdl3);
      add(jfdtf3);
      add(jfdls2);
      add(jfdtf2);
      add(jfdl2);  
      
      jfdl6.setBounds(212, 190,220,40);
      jfdl6.setText("가나다AaBbYyZz");
      add(jfdl6);
     }
     
     public void paint(Graphics g)
     {
      g.setColor(Color.lightGray);
      g.draw3DRect (202, 182, 232, 50,false);
      g.setColor(Color.black);  
     }
     
     public Font fontSet()
     {
      jfdls1.getSelectedItem();
      fontname=jfdls1.getSelectedItem();
      
      if(jfdls2.getSelectedItem().equals("보통"))
       fontstyle=Font.PLAIN;
      if(jfdls2.getSelectedItem().equals("기울임꼴"))
       fontstyle=Font.ITALIC;   
      if(jfdls2.getSelectedItem().equals("굵게"))
       fontstyle=Font.BOLD;
      if(jfdls2.getSelectedItem().equals("굵은 기울임꼴"))
       fontstyle=Font.ITALIC+Font.BOLD;
      
      jfdtf3.setText(jfdls3.getSelectedItem());   
       size=Integer.parseInt(jfdls3.getSelectedItem());
      
      return f=new Font(fontname,fontstyle,size);
     }
      
     public void actionPerformed(ActionEvent ae)
     {
      if((ae.getSource()).equals(jfdls1))
      {
       jfdtf1.setText(jfdls1.getSelectedItem());
       fontname=jfdls1.getSelectedItem();
       f=new Font(fontname,fontstyle,size);
       jfdl6.setFont(f); 
      }
      else if((ae.getSource()).equals(jfdls2))
      {
       jfdtf2.setText(jfdls2.getSelectedItem());
       
       if(jfdls2.getSelectedItem().equals("보통"))
        fontstyle=Font.PLAIN;
       if(jfdls2.getSelectedItem().equals("기울임꼴"))
        fontstyle=Font.ITALIC;   
       if(jfdls2.getSelectedItem().equals("굵게"))
        fontstyle=Font.BOLD;
       if(jfdls2.getSelectedItem().equals("굵은 기울임꼴"))
        fontstyle=Font.ITALIC+Font.BOLD;
      
       f=new Font(fontname,fontstyle,size);
       jfdl6.setFont(f);   
      }
      else if((ae.getSource()).equals(jfdls3))
      {
       jfdtf3.setText(jfdls3.getSelectedItem());   
       size=Integer.parseInt(jfdls3.getSelectedItem());
       f=new Font(fontname,fontstyle,size);
       jfdl6.setFont(f);  
      }
      else if((ae.getSource()).equals(jfdb1))
      {
       dispose();
      }
      else if((ae.getSource()).equals(jfdb2))
      {
       dispose();
      }
     }  
    }

    class HelpDialog extends Dialog implements ActionListener
    {//도움말 새창
     Button ok;//누르면 창이 닫히는 버튼
     Image img=getToolkit().getImage("img/memo.gif");
     Image mh=getToolkit().getImage("img/mh.gif");
     Image minfo=getToolkit().getImage("img/minfo.gif");
     Font f=new Font("굴림",Font.PLAIN,12);
     
     HelpDialog(Frame parent)
     {
      super(parent,"메모장 정보",true);
      
      setResizable(false);  
      
      setLayout(null);
      ok=new Button("확 인");
      ok.addActionListener(this);
      ok.setBounds(290,280,90,25);  
      add(ok);    
        
      addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){dispose();}}); 
     } 
     
     public void paint(Graphics g)
     {
      Insets insets=getInsets();  
      
      g.setFont(f);
      g.drawImage(minfo,insets.left,insets.top,410,77,this);
      g.drawImage(mh,15,105,32,30,this);  
      g.drawString("Wicrosoft (R) 메모장",66,120);
      g.drawString("버전 1.0 (빌드 2195: Service Pack 3)",66,137);
      g.drawString("Copyright (C) 1981-1999 Wicrosoft Corp.",66,153);
      g.drawString("이 제품은 다음 사용자에게 사용이 허가되었습니다.",66,200);
      g.drawString("jdk 깔린 컴텨",66,216);
      g.setColor(Color.lightGray);
      g.draw3DRect (66,248,334,1,false);
      g.setColor(Color.black);
      String p= Runtime.getRuntime().totalMemory()/1024+"";   
      g.drawString("Virtual Machine에서 사용할 수 있는 실제 메모리: "+p ,66,265); 
     }
     
     public void actionPerformed(ActionEvent ae)
     {
      dispose();
     }  
    }

     

     

    /*

    에러를 잡아야 하는뎅.... 귀차니즘...킁..

    */

    'Other > Java' 카테고리의 다른 글

    활용 예제및.. 과제 내용.  (0) 2010.04.20
    예제_01  (0) 2010.04.20
    뭔지모를 소스 -_-;;;;;  (0) 2010.04.20