zoukankan      html  css  js  c++  java
  • Java简易记事本

    Java作业,写一个简易记事本。

    要求:

    使用swing编写一个记事本程序。可以打开现有文本文件进行编辑,也可以新建文件进行编辑。新建、打开和保存文件使用菜单实现。如果是新建的文件或者对已有修改过但没有保存,程序将使用对话框提示用户,用户可以选择重新保存或者放弃保存直接退出。(提示,使用JFileChooser类获得打开文件名或者保存文件名,详见API帮助文档)。

    这里记录一下步骤。

    【1】实现文本区域的现实

     1 package bao;
     2 
     3 import java.awt.BorderLayout;
     4 import java.awt.Container;
     5 import javax.swing.JFrame;
     6 import javax.swing.JScrollPane;
     7 import javax.swing.JTextArea;
     8 import javax.swing.ScrollPaneConstants;
     9 
    10 @SuppressWarnings("serial")
    11 public class J_Line extends JFrame{
    12     public J_Line(){
    13         super("NewFile");
    14         setUpUIComponent();//添加各个组件
    15         setUpEventListener();//添加事件监听器
    16         setVisible(true);//窗口可见
    17     }
    18     private void setUpUIComponent(){
    19         setSize(640,480);//设定窗口大小
    20         JTextArea textArea=new JTextArea();
    21         textArea.setLineWrap(true);//换行
    22         
    23         JScrollPane panel = new JScrollPane(textArea,
    24                   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
    25                   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);//只有垂直方向滚动条
    26         Container contentPane=getContentPane();
    27         contentPane.add(panel, BorderLayout.CENTER);
    28     
    29     }
    30     private void setUpEventListener(){
    31         //add sth about event listener...
    32     }
    33     public static void main(String[] args){
    34         J_Line app=new J_Line();
    35         app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    36     }
    37 }

    textarea已经显示出来了。

    【2】显示菜单栏

    这里实现了打开和关闭的菜单操作。

      1 package bao;
      2 
      3 import java.awt.BorderLayout;
      4 import java.awt.Container;
      5 import java.awt.event.ActionEvent;
      6 import java.awt.event.ActionListener;
      7 import java.io.BufferedReader;
      8 import java.io.FileReader;
      9 import java.io.IOException;
     10 import javax.swing.JFileChooser;
     11 import javax.swing.JFrame;
     12 import javax.swing.JMenu;
     13 import javax.swing.JMenuBar;
     14 import javax.swing.JMenuItem;
     15 import javax.swing.JOptionPane;
     16 import javax.swing.JScrollPane;
     17 import javax.swing.JTextArea;
     18 import javax.swing.ScrollPaneConstants;
     19 
     20 @SuppressWarnings("serial")
     21 public class J_Line extends JFrame{
     22     JTextArea textArea;
     23     private JMenuItem menuNewfile;
     24     private JMenuItem menuOpen;
     25     private JMenuItem menuClose;
     26     private JFileChooser fileChooser;
     27     public J_Line(){
     28         super("NewFile");
     29         setUpUIComponent();//添加各个组件
     30         setUpEventListener();//添加事件监听器
     31         setVisible(true);//窗口可见
     32     }
     33     private void setUpUIComponent(){
     34         setSize(640,480);//设定窗口大小
     35         
     36         //text area
     37         textArea=new JTextArea();
     38         textArea.setLineWrap(true);//换行
     39         
     40         JScrollPane panel = new JScrollPane(textArea,
     41                   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
     42                   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);//只有垂直方向滚动条
     43         Container contentPane=getContentPane();
     44         contentPane.add(panel, BorderLayout.CENTER);
     45         
     46         //menu bar
     47         JMenuBar menuBar = new JMenuBar();
     48         
     49         JMenu fileMenu = new JMenu("文件");
     50         
     51         menuNewfile = new JMenuItem("新建");
     52       menuOpen = new JMenuItem("打开");
     53       menuClose = new JMenuItem("关闭");
     54       
     55 
     56       fileMenu.add(menuNewfile);
     57       fileMenu.addSeparator(); // 分隔线
     58       fileMenu.add(menuOpen);
     59       fileMenu.addSeparator(); // 分隔线
     60       fileMenu.add(menuClose);
     61       
     62       menuBar.add(fileMenu);
     63       
     64       setJMenuBar(menuBar);
     65       
     66       fileChooser=new JFileChooser();//!!!!!!!!!!
     67     }
     68     
     69     private void setUpEventListener(){
     70         //打开
     71         menuOpen.addActionListener(
     72                 new ActionListener() {
     73                     public void actionPerformed(ActionEvent e) {
     74                         // openFile();
     75                         open();
     76                     }
     77                 }
     78                 );
     79         
     80         menuClose.addActionListener(
     81                 new ActionListener(){
     82                     public void actionPerformed(ActionEvent e){
     83                         dispose();
     84                     }
     85                 }
     86                 );
     87     }
     88     
     89     private void open() {
     90         fileChooser.setDialogTitle("Open file");
     91         fileChooser.showDialog(null, null);
     92         
     93         try {
     94             // 开启选取的文件
     95             BufferedReader buf = 
     96                 new BufferedReader(
     97                    new FileReader(
     98                      fileChooser.getSelectedFile()));
     99 
    100             // 设定文件标题
    101             setTitle(fileChooser.getSelectedFile().toString());
    102             // 清除前一次文件
    103             textArea.setText("");
    104             // 设定状态栏
    105         //    stateBar.setText("未修改");
    106             // 取得系统相依的换行字符
    107             String lineSeparator = System.getProperty("line.separator");
    108             // 读取文件并附加至文字编辑区
    109             String text;
    110             while((text = buf.readLine()) != null) {
    111                 textArea.append(text);
    112                 textArea.append(lineSeparator);
    113             }
    114 
    115             buf.close();
    116         }   
    117         catch(IOException e) {
    118             JOptionPane.showMessageDialog(null, e.toString(),
    119                 "开启文件失败", JOptionPane.ERROR_MESSAGE);
    120         }
    121     }
    122     
    123     public static void main(String[] args){
    124         J_Line app=new J_Line();
    125         app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    126     }
    127 }

    用清除文本区域内容的方式实现了新建。。。

      1 package bao;
      2 
      3 import java.awt.BorderLayout;
      4 import java.awt.Container;
      5 import java.awt.event.ActionEvent;
      6 import java.awt.event.ActionListener;
      7 import java.awt.event.KeyAdapter;
      8 import java.awt.event.KeyEvent;
      9 import java.awt.event.WindowAdapter;
     10 import java.awt.event.WindowEvent;
     11 import java.io.BufferedReader;
     12 import java.io.BufferedWriter;
     13 import java.io.File;
     14 import java.io.FileReader;
     15 import java.io.FileWriter;
     16 import java.io.IOException;
     17 import javax.swing.BorderFactory;
     18 import javax.swing.JFileChooser;
     19 import javax.swing.JFrame;
     20 import javax.swing.JLabel;
     21 import javax.swing.JMenu;
     22 import javax.swing.JMenuBar;
     23 import javax.swing.JMenuItem;
     24 import javax.swing.JOptionPane;
     25 import javax.swing.JScrollPane;
     26 import javax.swing.JTextArea;
     27 import javax.swing.ScrollPaneConstants;
     28 import javax.swing.SwingConstants;
     29 
     30 @SuppressWarnings("serial")
     31 public class J_Line extends JFrame{
     32     JTextArea textArea;
     33     private JMenuItem menuNewfile;
     34     private JMenuItem menuOpen;
     35     private JMenuItem menuSave;
     36     private JMenuItem menuClose;
     37     private JFileChooser fileChooser;
     38     private JLabel stateBar;
     39     
     40     public J_Line(){
     41         super("NewFile");
     42         setUpUIComponent();//添加各个组件
     43         setUpEventListener();//添加事件监听器
     44         setVisible(true);//窗口可见
     45     }
     46     private void setUpUIComponent(){
     47         setSize(640,480);//设定窗口大小
     48         
     49         //文本区域
     50         textArea=new JTextArea();
     51         textArea.setLineWrap(true);//换行
     52         
     53         JScrollPane panel = new JScrollPane(textArea,
     54                   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
     55                   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);//只有垂直方向滚动条
     56         Container contentPane=getContentPane();
     57         contentPane.add(panel, BorderLayout.CENTER);
     58         
     59         //菜单栏
     60         JMenuBar menuBar = new JMenuBar();
     61         
     62         JMenu fileMenu = new JMenu("文件");
     63         
     64         menuNewfile = new JMenuItem("新建");
     65       menuOpen = new JMenuItem("打开");
     66       menuSave = new JMenuItem("保存");
     67       menuClose = new JMenuItem("关闭");
     68       
     69 
     70       fileMenu.add(menuNewfile);
     71       fileMenu.addSeparator(); // 分隔线
     72       fileMenu.add(menuOpen);
     73       fileMenu.addSeparator(); // 分隔线
     74       fileMenu.add(menuSave);
     75       fileMenu.addSeparator();// 分隔线
     76       fileMenu.add(menuClose);
     77       
     78       menuBar.add(fileMenu);
     79       
     80       setJMenuBar(menuBar);
     81       
     82       fileChooser=new JFileChooser();//!!!!!!!!!!
     83       
     84       // 状态栏
     85       stateBar = new JLabel("未修改");
     86       stateBar.setHorizontalAlignment(SwingConstants.LEFT); 
     87       stateBar.setBorder(
     88               BorderFactory.createEtchedBorder());
     89       contentPane.add(stateBar, BorderLayout.SOUTH);       
     90       
     91       fileChooser = new JFileChooser();
     92     }
     93     
     94     private void setUpEventListener(){
     95         //X关闭
     96         addWindowListener(
     97                 new WindowAdapter() {
     98                     public void windowClosing(WindowEvent e) { 
     99                         closeFile();
    100                     }
    101                 }
    102                 );
    103         //新建
    104         menuNewfile.addActionListener(
    105                 new ActionListener(){
    106                     public void actionPerformed(ActionEvent e){
    107                         newFile();
    108                     }
    109                 }
    110                 );
    111         //打开
    112         menuOpen.addActionListener(
    113                 new ActionListener() {
    114                     public void actionPerformed(ActionEvent e) {
    115                         // openFile();
    116                         openFile();
    117                     }
    118                 }
    119                 );
    120         //保存
    121         menuSave.addActionListener(
    122                 new ActionListener() {
    123                     public void actionPerformed(ActionEvent e) {
    124                         saveFile();
    125                     }
    126                 }
    127             );
    128         //关闭
    129         menuClose.addActionListener(
    130                 new ActionListener() {
    131                     public void actionPerformed(ActionEvent e) {
    132                         closeFile();
    133                     }
    134                 }
    135             );
    136         //状态
    137         textArea.addKeyListener(
    138                 new KeyAdapter() {
    139                     public void keyTyped(KeyEvent e) {
    140                         processTextArea();
    141                     }
    142                 }
    143             );
    144     }
    145     
    146     private void open() {
    147         fileChooser.setDialogTitle("Open file");
    148         int option=fileChooser.showDialog(null, null);
    149         // 使用者按下确认键
    150         if(option == JFileChooser.APPROVE_OPTION) {
    151             try {
    152                 // 开启选取的文件
    153                 BufferedReader buf = 
    154                     new BufferedReader(
    155                        new FileReader(
    156                          fileChooser.getSelectedFile()));
    157     
    158                 // 设定文件标题
    159                 setTitle(fileChooser.getSelectedFile().toString());
    160                 // 清除前一次文件
    161                 clearTextArea();
    162                 // 设定状态栏
    163             //    stateBar.setText("未修改");
    164                 // 取得系统相依的换行字符
    165                 String lineSeparator = System.getProperty("line.separator");
    166                 // 读取文件并附加至文字编辑区
    167                 String text;
    168                 while((text = buf.readLine()) != null) {
    169                     textArea.append(text);
    170                     textArea.append(lineSeparator);
    171                 }
    172     
    173                 buf.close();
    174             }   
    175             catch(IOException e) {
    176                 JOptionPane.showMessageDialog(null, e.toString(),
    177                     "开启文件失败", JOptionPane.ERROR_MESSAGE);
    178             }
    179         }
    180     }
    181     private boolean isCurrentFileSaved() {
    182         if(!stateBar.getText().equals("未修改")) {
    183             return false;
    184         }
    185         else {
    186             return true;
    187         }
    188     }
    189     private void saveFile() {
    190         // 从标题栏取得文件名称
    191         File file = new File(getTitle());
    192 
    193         // 若指定的文件不存在
    194         if(!file.exists()) {
    195             // 执行另存为
    196             saveFileAs();
    197         }
    198         else {
    199             try {
    200                 // 开启指定的文件
    201                 BufferedWriter buf = 
    202                     new BufferedWriter(
    203                             new FileWriter(file));
    204                 // 将文字编辑区的文字写入文件
    205                 buf.write(textArea.getText());
    206                 buf.close();
    207                 // 设定状态栏为未修改
    208                 stateBar.setText("未修改");
    209             }
    210             catch(IOException e) {
    211                 JOptionPane.showMessageDialog(null, e.toString(),
    212                   "写入文件失败", JOptionPane.ERROR_MESSAGE);
    213             }
    214         }
    215     }
    216     
    217     private void saveFileAs() {
    218         // 显示文件对话框
    219         int option = fileChooser.showSaveDialog(null);
    220 
    221         // 如果确认选取文件
    222         if(option == JFileChooser.APPROVE_OPTION) {
    223             // 取得选择的文件
    224             File file = fileChooser.getSelectedFile();
    225             
    226             // 在标题栏上设定文件名称
    227             setTitle(file.toString());
    228                 
    229             try {
    230                 // 建立文件
    231                 file.createNewFile();
    232                 // 进行文件保存
    233                     saveFile();
    234             }
    235             catch(IOException e) {
    236             JOptionPane.showMessageDialog(null, e.toString(),
    237                    "无法建立新文件", JOptionPane.ERROR_MESSAGE);
    238             }
    239         }   
    240     }
    241     private void closeFile() {
    242         // 是否已保存文件
    243         if(isCurrentFileSaved()) {
    244             // 释放窗口资源,而后关闭程序
    245             dispose();
    246         }
    247         else {
    248             int option = JOptionPane.showConfirmDialog(
    249                     null, "文件已修改,是否保存?",
    250                     "保存文件?", JOptionPane.YES_NO_OPTION, 
    251                     JOptionPane.WARNING_MESSAGE, null);
    252 
    253             switch(option) {
    254                 case JOptionPane.YES_OPTION:
    255                     saveFile();
    256                     break;
    257                 case JOptionPane.NO_OPTION:
    258                    dispose();
    259             }
    260         }
    261     }
    262     private void processTextArea() {
    263         stateBar.setText("已修改");
    264     }
    265     private void openFile() {
    266         if(isCurrentFileSaved()) { // 文件是否为保存状态
    267             open(); // 打开
    268         }
    269         else {
    270             // 显示对话框
    271             int option = JOptionPane.showConfirmDialog(
    272                     null, "文件已修改,是否保存?",
    273                     "保存文件?", JOptionPane.YES_NO_OPTION, 
    274                     JOptionPane.WARNING_MESSAGE, null);
    275             switch(option) { 
    276                 // 确认文件保存
    277                 case JOptionPane.YES_OPTION:
    278                     saveFile(); // 保存文件
    279                      break;
    280                // 放弃文件保存
    281                 case JOptionPane.NO_OPTION:
    282                     open();
    283                     break;
    284             }
    285         }
    286     }
    287     private void clearTextArea(){
    288           textArea.selectAll();
    289           textArea.replaceSelection("");
    290           stateBar.setText("未修改");
    291     }
    292     private void newFile(){
    293         if(isCurrentFileSaved()) { // 文件是否为保存状态
    294             open(); // 打开
    295         }else {
    296             // 显示对话框
    297             int option = JOptionPane.showConfirmDialog(
    298                     null, "文件已修改,是否保存?",
    299                     "保存文件?", JOptionPane.YES_NO_OPTION, 
    300                     JOptionPane.WARNING_MESSAGE, null);
    301             switch(option) { 
    302                 // 确认文件保存
    303                 case JOptionPane.YES_OPTION:
    304                     saveFile(); // 保存文件
    305                      break;
    306                // 放弃文件保存
    307                 case JOptionPane.NO_OPTION:
    308                     break;
    309                 }
    310             clearTextArea();
    311         }
    312     }
    313     public static void main(String[] args){
    314         J_Line app=new J_Line();
    315         app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    316     }
    317 }
    Greatness is never a given, it must be earned.
  • 相关阅读:
    项目总结_写代码
    项目总结_el表达式
    项目总结plc_过滤器规则(filter)_忽略过滤的js和css文件
    tomcat 启动错误
    每天学点java_Eclipse修改author名
    每天学点java_FileOutputSteam类
    每天学点java_File类
    11.28日日记
    《深入理解计算机系统》学习中期
    开始《深入理解计算机系统》
  • 原文地址:https://www.cnblogs.com/zjutzz/p/3085021.html
Copyright © 2011-2022 走看看