分析记事本框架与完成记事本

记事本框架图

以上是记事本的整个框架,我以后可以看着这个框架想起我的记事本内容。本记事本肯定是对的,为什么要强调这么一句呢?因为我看的那本参考书上的代码是不对的!

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;

public class JNotePadUI extends JFrame
 {
 private JMenuItem menuOpen;
 private JMenuItem menuSave;
 private JMenuItem menuSaveAs;
 private JMenuItem menuClose;
 
 private JMenu editMenu;
 private JMenuItem menuCut;
 private JMenuItem menuCopy;
 private JMenuItem menuPaste;
 private JMenuItem menuAbout;
 private JLabel stateBar;
 private JTextArea textArea;
 
 private JFileChooser fileChooser;
 
 private JPopupMenu popUpMenu;//弹出式菜单
 
 public JNotePadUI(){
  super("新建文本文件");
  setUpUIComponent();
  setUpEventListener();
  setVisible(true);
 }
 private void setUpUIComponent(){
  setSize(640,480);
  JMenuBar menuBar=new JMenuBar();
  
  JMenu fileMenu=new JMenu("文件");
   menuOpen = new JMenuItem("打开");
  
  menuOpen.setAccelerator(KeyStroke.getKeyStroke
    (KeyEvent.VK_O,InputEvent.CTRL_MASK));
   menuSave = new JMenuItem("保存");
  menuSave.setAccelerator(KeyStroke.getKeyStroke
    (KeyEvent.VK_S,InputEvent.CTRL_MASK));
 
 menuSaveAs = new JMenuItem("另存为");
 menuClose = new JMenuItem("关闭");
menuClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
 fileMenu.add(menuOpen);
 fileMenu.addSeparator();
 fileMenu.add(menuSave);
 fileMenu.add(menuSaveAs);
 fileMenu.addSeparator();
 fileMenu.add(menuClose);

 //设置“编辑”菜单
 editMenu =new JMenu("编辑");
 popUpMenu=editMenu.getPopupMenu();
  menuCut= new JMenuItem("剪切");
 menuCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
 
 menuCopy= new JMenuItem("复制");
 menuCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
 
 menuPaste= new JMenuItem("粘贴");
 menuPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
 
 editMenu.add(menuCut);
 editMenu.add(menuCopy);
 editMenu.add(menuPaste);
 //关于菜单的添加
 JMenu aboutMenu = new JMenu("关于");
  menuAbout=new JMenuItem("关于哈哈");
 aboutMenu.add(menuAbout);
 
 menuBar.add(fileMenu);
 menuBar.add(editMenu);
 menuBar.add(aboutMenu);
 setJMenuBar(menuBar);
 //文字编辑区域
 textArea=new JTextArea();
 textArea.setFont(new Font("宋体",Font.PLAIN,16));
 textArea.setLineWrap(true);//自动换行
 JScrollPane panel= new JScrollPane(textArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 Container contentPane=this.getContentPane();//初始化一个容器,用来在容器上添加一些组件。
 contentPane.add(panel,BorderLayout.CENTER);//BorderLayout将屏幕分为east west center south north
 //五部分中间部分可以改变,其余四块宽度不变
 
 //状态栏
 stateBar = new JLabel("未修改");
 stateBar.setHorizontalAlignment(SwingConstants.LEFT);//状态栏的字在左边
 stateBar.setBorder(BorderFactory.createEtchedBorder());//设置状态栏的边框
 contentPane.add(stateBar,BorderLayout.SOUTH);//设置状态栏的位置/
 }
private void setUpEventListener(){
 //单击窗口关闭按钮事件处理
 addWindowListener(
   new WindowAdapter(){
    public void windowClosing(WindowEvent e){closeFile();
    
    }
   }
   );
 //菜单-打开
 menuOpen.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
   openFile();
  }
 });


 //菜单-保存
 menuSave.addActionListener(
 new ActionListener(){
  public void actionPerformed(ActionEvent e){
   saveFile();
  }
  
 }
 );
 //菜单-另存为
 menuSaveAs.addActionListener(
 new ActionListener(){
  public void actionPerformed(ActionEvent e){
   saveFileAs();
  }
 }
 );
 //菜单-关闭文件
 menuClose.addActionListener(
 new ActionListener (){
  public void actionPerformed(ActionEvent e){
   closeFile();
  }
 }
 );
 //菜单-剪切
 menuCut.addActionListener(
 new ActionListener(){
  public void actionPerformed(ActionEvent e){
   cut();
  }
 }
 );
 //菜单-复制
 menuCopy.addActionListener(
   new ActionListener(){
    public void actionPerformed(ActionEvent e){
     copy();
    }
   }
   );
 //菜单-粘贴
 menuPaste.addActionListener(
   new ActionListener(){
    public void actionPerformed(ActionEvent e){
     paste();
    }
   }
   );
 //菜单-关于
 menuAbout.addActionListener(
   new ActionListener(){
    public void actionPerformed(ActionEvent e){
     //显示对话框
     JOptionPane.showOptionDialog(null,
       "nihao","dajiahao",
       JOptionPane.DEFAULT_OPTION,
       JOptionPane.INFORMATION_MESSAGE,
       null, null, null);
     
    }
   }
   );
 
 //编辑区键盘事件
 textArea.addKeyListener(
 new KeyAdapter(){
  public void keyTyped(KeyEvent e){
   processTextArea();
  }
 }
 );
 //编辑区鼠标事件
 textArea.addMouseListener(
 new MouseAdapter(){
  public void mouseReleased(MouseEvent e){
   if (e.getButton()==MouseEvent.BUTTON3)
    popUpMenu.show(editMenu,e.getX(),e.getY());//右击后弹出框
   }
   public void mouseCliked(MouseEvent e){
    if (e.getButton()==MouseEvent.BUTTON1)
     popUpMenu.setVisible(false);//左击后弹出框隐藏
    }
   }
  
 );
}

private void openFile(){
 if (isCurrentFileSaved()){
  open();
 }
 else{
  int option = JOptionPane.showConfirmDialog(null, "文件已修改,是否保存?",
    "文件保存?", JOptionPane.YES_NO_CANCEL_OPTION,
    JOptionPane.WARNING_MESSAGE,null);
  switch(option){
  case JOptionPane.YES_NO_OPTION:
   saveFile();
   break;
  case JOptionPane.NO_OPTION:
   open();
   break;
   
  }
 }
 
}

private void saveFile(){
 File file=new File(getTitle());
 if (!file.exists()){
  saveFileAs();
  
 }
 else{
  try{//打开指定的文件
   BufferedWriter buf = new BufferedWriter(new FileWriter(file));
   buf.write(textArea.getText());
   buf.close();
   //设定状态栏为未修改
   stateBar.setText("未修改");
  }
  catch (IOException e){
   JOptionPane.showMessageDialog(null, e.toString(),
     "写入文件失败",JOptionPane.ERROR_MESSAGE);
  }
 }
}
private void saveFileAs(){
 int option=fileChooser.showDialog(null, null);
 if (option==JFileChooser.APPROVE_OPTION){
  File file =fileChooser.getSelectedFile();
  setTitle(file.toString());
  try{
   file.createNewFile();
   saveFile();
  }
  catch (IOException e){
   JOptionPane.showMessageDialog(null, e.toString(),
     "无法建立新文件",JOptionPane.ERROR_MESSAGE);
  }
 }
}
private void closeFile(){
 if (isCurrentFileSaved()){
  //释放窗口资源,然后关闭程序
  dispose();
 }
 else{
  int option=JOptionPane.showConfirmDialog(null, "文件已经修改,是否保存?","保存文件?",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null);
  switch(option){
  case JOptionPane.YES_OPTION:
   saveFile();
   break;
  case(JOptionPane.NO_OPTION):
   dispose();
  }
 }
}
private void cut(){
 textArea.cut();
 stateBar.setText("已修改");
 popUpMenu.setVisible(false);
}
private void copy(){
 textArea.copy();

 popUpMenu.setVisible(false);
}
private void paste(){
 textArea.paste();
 stateBar.setText("已修改");
 popUpMenu.setVisible(false);
}
private void processTextArea(){
 stateBar.setText("已修改");

}
private void open(){

 fileChooser=new JFileChooser();//要实例化这个fileChooser
 //显示文件选取的对话框
 int option =fileChooser.showDialog(null, null);
 
 if (option==JFileChooser.APPROVE_OPTION){
  try{
   BufferedReader buf=
    new BufferedReader(
      new FileReader(
        fileChooser.getSelectedFile()));
  //设定文件标题
   setTitle(fileChooser.getSelectedFile().toString());
   //删除前一次的文件
   textArea.setText("");
   //设定状态栏
   stateBar.setText("未修改");
   //取得系统相依的换行字符
   String lineSeparator=System.getProperty("line.swparator");//可以去掉,但是,不知道加上之后什么意思
   //读取文件并附加之文字编辑区
   String text;
   while ((text=buf.readLine())!=null){
    textArea.append(text);//添加文字
    textArea.append(lineSeparator);//可以去掉,但是不知道加上之后什么意思。
   }
   buf.close();
 
 }
  catch(IOException e){
   JOptionPane.showMessageDialog
   (null, e.toString(),"开启文件失败",JOptionPane.ERROR_MESSAGE);
  }
 }
 
}
private boolean isCurrentFileSaved(){
 if (stateBar.getText().equals("已修改")){//如果出于未修改状态
 return false;
}
 else {
  return true;
 }
}
 public static void main(String[] args) {
  // TODO 自动生成方法存根
new JNotePadUI();
 }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值