GUI學習筆記MyMenuTest.java(2)

 

import java.awt.*;
import java.awt.event.*;
import java.io.*;//未學不懂。。
//保存的功能有bug
//存儲時要保存兩次纔有。
//關閉時優化了確認對話框
//關閉跳出對話框(無操作)

//退出界面跳出文件框。。
 //對話框關閉無效
  //保存異常
  //取消異常(取消成關閉程序)
//文件名不變

class MyMenuTest 
{
 private Frame f;
 private FileDialog fd,saveFD;
 private TextArea ta;
 private MenuBar mb;
 private Menu m;
 private MenuItem closeItem,openFileItem,saveFileItem;
 private File file;
 private Label b;
 private Dialog d;
 private Button saveBut,unSaveBut,quitBut;
 
 MyMenuTest()
 {
  init();
 }
 public void init()
 {
  f=new Frame("我的打開保存文件測試");
  f.setBounds(300,200,600,500);
  
  
  fd=new FileDialog(f,"打開",FileDialog.LOAD);
  saveFD=new FileDialog(f,"保存",FileDialog.SAVE);
  
  mb=new MenuBar();//只是一個Bar 參數爲空
  
  m=new Menu("文件");
  
  openFileItem=new MenuItem("打開");
  saveFileItem=new MenuItem("保存");
  closeItem=new MenuItem("退出");
  
  d=new  Dialog (f,"退出",true);
  b=new Label("文件是否保存修改",Label.CENTER);
  saveBut=new Button("保存");
  unSaveBut=new Button("不保存");
  quitBut=new Button("取消");
  d.setBounds(300,200,300,250);
  d.setLayout(new FlowLayout());
  
  ta=new TextArea();
  
  
  

  f.setMenuBar(mb);
  mb.add(m);
  m.add(openFileItem);
  m.add(saveFileItem);
  m.add(closeItem);
  f.add(ta);
  myEvent();
  d.add(b);
  d.add(saveBut);
  d.add(unSaveBut);
  d.add(quitBut);
  f.setVisible(true);

 }
 public void myEvent()
 {
  openFileItem.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    
     fd.setVisible(true);
     String dirPath=fd.getDirectory();
     String fileName=fd.getFile();
     //System.out.println(dirPath+"...."+fileName);
     if(dirPath==null||fileName==null)
      return;
     ta.setText("");
     file=new File(dirPath,fileName);

     try
     {
      BufferedReader bufr=new BufferedReader(new FileReader(file));

      String line=null;

      while((line=bufr.readLine())!=null)
      {
       ta.append(line+"\r\n");
      }
      bufr.close();
     }
     catch (IOException ex)
     {
      throw new RuntimeException("讀取失敗");
     }
     

   }
  }
  );
  saveFileItem.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
     if(file==null)
     {
     saveFD.setVisible(true);
     String dirPath=saveFD.getDirectory();
     String fileName=saveFD.getFile();
     if(dirPath==null||fileName==null)
      return;
     file=new File(dirPath,fileName); 
     }
    else{
     try
       {
       BufferedWriter bufw=new BufferedWriter(new FileWriter(file));

       String text=ta.getText();
       bufw.write(text);
       //bufw.flush();
       bufw.close();
       }
       catch (IOException ex)
      {
       throw new RuntimeException("存儲失敗");
      }
     }
    
     
     

   }
  }
  );
  f.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    
     if(file==null)
      d.setVisible(true);
     System.exit(0);
    
    
   } 
     
  }
  );
  ta.addKeyListener(new KeyAdapter()
  {
   
   public void keyPressed(KeyEvent e)
   {
    if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_S)
    {
       if(file==null)
      {
      saveFD.setVisible(true);
      String dirPath=saveFD.getDirectory();
      String fileName=saveFD.getFile();
      if(dirPath==null||fileName==null)
       return;
      file=new File(dirPath,fileName); 
      }
    
      try
      {
      BufferedWriter bufw=new BufferedWriter(new FileWriter(file));

      String text=ta.getText();
      bufw.write(text);
      //bufw.flush();
      bufw.close();
      }
      catch (IOException ex)
     {
      throw new RuntimeException("存儲失敗");
     }
     
    
     
     
    }
   }
  }
  );
  saveBut.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
     if(file==null)
     {
     saveFD.setVisible(true);
     String dirPath=saveFD.getDirectory();
     String fileName=saveFD.getFile();
     if(dirPath==null||fileName==null)
      return;
     file=new File(dirPath,fileName); 
     }
    else{
     try
       {
       BufferedWriter bufw=new BufferedWriter(new FileWriter(file));

       String text=ta.getText();
       bufw.write(text);
       //bufw.flush();
       bufw.close();
       }
       catch (IOException ex)
      {
       throw new RuntimeException("存儲失敗");
      }
     }
    
     
     

   }
  }
  );
  unSaveBut.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    System.exit(0);
   }
  }
  );
  quitBut.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    d.setVisible(false);
   }
  }
  );


  

  
  closeItem.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    d.setVisible(true);
   }
  }
  );
 }
 public static void main(String[] args)
 {
  new MyMenuTest();
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章