**
java課程設計《簡易記事本》
**
第一次在博客上發布文章。這是我在大二上學期的java課程設計,我的課程設計是做一個簡易記事本。其中有這些要求:1. 摸擬windows操作系統中的記事本軟件,開發一款簡易記事本2. 具有新建文件、保存文件、復制和粘貼功能3. 可以根據自身能力添加其它功能。
一、設計概述
該程序為簡易記事本,目的是摸擬windows操作系統中的記事本軟件,開發一款簡易記事本,是開發的記事本具有新建文件、保存文件、打開文件、復制、剪切、粘貼、設置背景顏色和字體等功能。
本程序使用了窗口交互界面,主要運用了Java swing組件和動作事件監聽器,還用到了文件的輸入輸出流。記事本的界面參考了Window中記事本界面,并且根據課程設計要求做了適當的調整,相應地添加了其他功能。
二、總體設計
2.1程序設計思路
在本程序中,設計了一個菜單欄和文本區。設計過程中用了JMenuBar,JFileChooser,JScrollPane,JMenu等。JMenuBar包括用來制作”文件”,“工具”,“背景”,“字體”,“關于”。JTextArea主要用來輸入文本。
2.2總體設計
這次編寫的簡易記事本一共有4個源文件。類之間的主要關系如圖所示。主類是NoteBook;子類有Mytext,BackgroundClorListener,HandkeListener。
NoteBook.java文件生成的類負責創建簡易記事本的“窗口”和設置窗口的相關信息。該類含有main方法,整個程序從該類開始執行。
Mytext.java文件生成的類Mytext繼承JFrame類作為底層容器,負責添加窗口的組件和為組件添加監視器。整個記事本分為兩塊菜單欄和內容輸入區;為了實現相關功能,添加監聽事件。本程序為了實現ActionListener接口,用來監聽并處理部分菜單項和內容輸入區為事件源的事件。
BackgroundColorListener.java文件生成的類BackgroundColorLisener負責重寫監視器方法,實現設置文本區背景顏色的功能。
HandleListener.javajava文件生成的類HandleListener負責重寫監視器的方法,負責實現復制、剪切、粘貼的功能。
2.3詳細設計代碼
//主函數
Jishiben.java
public class Jishiben{public static void main(String args[]){Mytext text=new Mytext(“&隨手一記”,100,90,600,600”);
//創建窗口、設置窗口名稱和大小}
}
Mytext.java
//Mytext類
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.*;
import javax.swing.JFrame.*;
import java.io.*;
import javax.swing.filechooser.*;
public class Mytext extends JFrame implements ActionListener{
JTextArea area;//創建文本區
JMenuBar menubar;//創建菜單條
JButton button;//創建按鈕
JFileChooser fileDialog;//創建對話框
BufferedReader in;//創建緩沖輸入流
FileReader fileReader;//創建文件字符輸入流
BufferedWriter out;//緩沖輸出流
FileWriter fileWriter;//創建文件字符輸出流
JMenu menu1,menu2,menu3,menu4,menu5,menu6,menu7,menu8,menu9;//創建菜單、子菜單
JmenuItem item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12,item13,
item14,item15,item16,item17,item18,item19,item20,item21,item22,item23,item24,
item25,item26,item27,item28,item29;//創建菜單項
//添加組件方法
public Mytext(String s,int x,int y,int h,int w){init(s);setLocation(x,y);setSize(h,w);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//使用結束后釋放該窗口,退出程序}void init(String s){setTitle(s);menubar=new JMenuBar();
button=new JButton();area=new JTextArea();menu1=new JMenu("文件(File)");menu2=new JMenu("工具(Tool)");menu3=new JMenu("顏色(Color)");menu4=new JMenu("背景(Background)");menu5=new JMenu("字體(Font)");menu6=new JMenu("字號");menu7=new JMenu("字形");menu8=new JMenu("恢復原字體");menu9=new JMenu("關于");item1=new JMenuItem("復制(Copy)");
item2=new JMenuItem("剪切(Cut)");item3=new JMenuItem("粘貼(Paste)");item4=new JMenuItem("新建(Newset)");item5=new JMenuItem("保存(Paste)");item6=new JMenuItem("灰色(Gray)");item7=new JMenuItem("粉色(Pink)");item8=new JMenuItem("白色(White)");item9=new JMenuItem("紅色(Red)");item10=new JMenuItem("黑色(Black)");item11=new JMenuItem("綠色(Green)");item12=new JMenuItem("黃色(Yellow)");item13=new JMenuItem("粉色(Pink)");item14=new JMenuItem("白色(White)");item15=new JMenuItem("紅色(Red)");item16=new JMenuItem("黑色(Black)");item17=new JMenuItem("綠色(Green)");item18=new JMenuItem("黃色(Yellow)");item19=new JMenuItem("30");item20=new JMenuItem("40");item21=new JMenuItem("50");item22=new JMenuItem("加粗");item23=new JMenuItem("楷體");item24=new JMenuItem("華文新魏");item25=new JMenuItem("行書");item26=new JMenuItem("格式化");item27=new JMenuItem("相關提示");item28=new JMenuItem("退出(格式化)");item29=new JMenuItem("打開(Open)");area.setLineWrap(true);//自動換行button.add(item28);add(button,BorderLayout.SOUTH);//添加按鈕,在南面
add(new JScrollPane(area),BorderLayout.CENTER);
//創建滾動條,將文本區在中間位置,BordedLayout布局area.setFont(new Font("宋體",0,20));//默認字體為宋體,0是不加粗字體,1是加粗的,字號為20fileDialog=new JFileChooser();FileNameExtensionFilter filter=new FileNameExtensionFilter("文本文件","html","java");//文件對話框可見的類型fileDialog.setFileFilter(filter);//設置對話框默認打開或顯示的文件類型item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));//設置復制的功能的快捷鍵為Ctrl+C
item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
//設置剪切的功能的快捷鍵為Ctrl+Q
item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
//設置粘貼的功能的快捷鍵為Ctrl+V
item4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
//設置新建的功能的快捷鍵為Ctrl+N
item5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
//設置保存的功能的快捷鍵為Ctrl+P
item5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
//設置打開的功能的快捷鍵為Ctrl+O
item28.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK));
//設置的功能的快捷鍵為Ctrl+T
item1.setActionCommand("copy");
//設置出發item1事件后封裝到事件中的一個為"copy"字符串
item2.setActionCommand("cut");
//設置出發item2事件后封裝到事件中的一個為"cut"字符串
item3.setActionCommand("paste");
//設置出發item3事件后封裝到事件中的一個為"paste"字符串
item6.setActionCommand("gray");
//設置出發item6事件后封裝到事件中的一個為"gray"字符串
item7.setActionCommand("pink");
//設置出發item7事件后封裝到事件中的一個為"pink"字符串
item8.setActionCommand("white");
//設置出發item8事件后封裝到事件中的一個為"white"字符串
item9.setActionCommand("red");
//設置出發item9事件后封裝到事件中的一個為"red"字符串
item10.setActionCommand("black");
//設置出發item10事件后封裝到事件中的一個為"black"字符串
item11.setActionCommand("green");
//設置出發item11事件后封裝到事件中的一個為"green"字符串
item12.setActionCommand("yellow");
//設置出發item12事件后封裝到事件中的一個為"yellow"字符串menu2.add(item1);//添加菜單項menu2.addSeparator();//設置分格條,下面的都一樣menu2.add(item2);menu2.addSeparator();menu2.add(item3);menu1.add(item4);menu1.addSeparator();menu1.add(item5);menu1.addSeparator();menu1.add(item29);menu3.add(item13);menu3.addSeparator();menu3.add(item14);menu3.addSeparator();menu3.add(item15);menu3.addSeparator();menu3.add(item16);menu3.addSeparator();menu3.add(item17);menu3.addSeparator();menu3.add(item18);menu4.add(item6);menu4.addSeparator();menu4.add(item7);menu4.addSeparator();menu4.add(item8);menu4.addSeparator();menu4.add(item9);menu4.addSeparator();menu4.add(item10);menu4.addSeparator();menu4.add(item11);menu4.addSeparator();menu4.add(item12);menu6.add(item19);menu6.addSeparator();menu6.add(item20);menu6.addSeparator();menu6.add(item21);menu7.add(item22);menu7.addSeparator();menu7.add(item23);menu7.addSeparator();menu7.add(item24);menu7.addSeparator();menu7.add(item25);menu8.add(item26);menu9.add(item27);menu5.add(menu3);menu5.add(menu6);menu5.add(menu7);menu5.add(menu8);menubar.add(menu1);menubar.add(menu2);menubar.add(menu4);menubar.add(menu5);menubar.add(menu9);setJMenuBar(menubar);//設置菜單條
HandleListener handleListener=new HandleListener();//創建復制、剪切、粘貼監視器對象
colorListener=new BackgroundColorListener();//創建灰、粉、白、紅、黑、綠、黃監視器對象
handleListener.setInputText(area);
colorListener.setInputText(area);
item1.addActionListener(handleListener);//item1將handleListener注冊為監視器
item2.addActionListener(handleListener);//item2將handleListener注冊為監視器
item3.addActionListener(handleListener);//item3將handleListener注冊為監視器
item4.addActionListener(this);//動作監視器this是指當前對象,不能被子類繼承
item5.addActionListener(this);
item29.addActionListener(this);
item6.addActionListener(colorListener);//item6將colorListener注冊為監視器
item7.addActionListener(colorListener);//item7將colorListener注冊為監視器
item8.addActionListener(colorListener);//item8將colorListener注冊為監視器
item9.addActionListener(colorListener);//item9將colorListener注冊為監視器
item10.addActionListener(colorListener);//item10將colorListener注冊為監視器
item11.addActionListener(colorListener);//item11將colorListener注冊為監視器
item12.addActionListener(colorListener);//item12將colorListener注冊為監視器
item13.addActionListener(this);//動作監視器this是指當前對象
item14.addActionListener(this);
item15.addActionListener(this);
item16.addActionListener(this);
item17.addActionListener(this);
item18.addActionListener(this);
item19.addActionListener(this);
item20.addActionListener(this);
item21.addActionListener(this);
item22.addActionListener(this);
item23.addActionListener(this);
item24.addActionListener(this);
item25.addActionListener(this);
item26.addActionListener(this);
item27.addActionListener(this);
item28.addActionListener(this);
}
//下面是實現菜單里菜單項新建和保存的功能的方法
public void actionPerformed(ActionEvent e){
if(e.getSource()==item4){//監聽"新建”事件
int state=fileDialog.showOpenDialog(this);// 顯示文件選取的對話框
if(state==JFileChooser.APPROVE_OPTION){// 如果使用者按下確認鍵
{area.setText(null);//將文本清空area.setBackground(Color.white);
area.setForeground(Color.black);}
try{
File dir=fileDialog.getCurrentDirectory();//獲取當前對話框
String name=fileDialog.getSelectedFile().getName();
File file=new File(dir,name);//獲取目錄和文件名
fileReader=new FileReader(file);
in=new BufferedReader(fileReader);//創建文件的輸出流
String s=null;
while((s=in.readLine())!=null){//從文件中讀取一行文本
area.append(s+"\n");}
in.close();
fileReader.close();//關閉輸入流}
catch(IOException exp){}//捕獲文件讀寫發生的異常
}
else if(e.getSource()==item5){//監聽保存事件int state=fileDialog.showSaveDialog(this);
if(state==JFileChooser.APPROVE_OPTION){try{File dir=fileDialog.getCurrentDirectory();//獲取當前對話框String name=fileDialog.getSelectedFile().getName();File file=new File(dir,name);fileWriter=new FileWriter(file);//寫入字符文件out=new BufferedWriter(fileWriter);//將文本寫入字符輸出流out.write(area.getText());//獲取文本區文字寫入目的地
out.flush();//強制把緩沖區里的內容寫到目的地out.close();fileWriter.close();//關閉}catch(IOException exp){}//捕獲文件讀寫發生的異常}
}
else if(e.getSource()==item29){//監聽"打開"事件int state=fileDialog.showOpenDialog(this);if(state==JFileChooser.APPROVE_OPTION){area.setText(null);try{File dir=fileDialog.getCurrentDirectory();String name=fileDialog.getSelectedFile().getName();File file=new File(dir,name);fileReader=new FileReader(file);in=new BufferedReader(fileReader);String s=null;while((s=in.readLine())!=null){area.append(s+"\n");}in.close();fileReader.close();//關閉流}catch(IOException exp){}//捕獲文件讀寫發生的異常}
else if(e.getSource()==item13){//監聽"文字粉色"事件area.setForeground(Color.pink);
}
else if(e.getSource()==item14){//監聽"文字白色"事件area.setForeground(Color.white);
}
else if(e.getSource()==item15){//監聽"文字紅色"事件area.setForeground(Color.red);
}
else if(e.getSource()==item16){//監聽"文字黑色"事件area.setForeground(Color.black);
}
else if(e.getSource()==item17){//監聽"文字綠色"事件area.setForeground(Color.green);
}
else if(e.getSource()==item18){//監聽"文字黃色"事件area.setForeground(Color.yellow);
}
else if(e.getSource()==item19){//監聽"Size30"事件area.setFont(new Font("宋體",0,30));
}
else if(e.getSource()==item20){//監聽"Size40"事件area.setFont(new Font("宋體",0,40));
}
else if(e.getSource()==item21){//監聽"Size50"事件area.setFont(new Font("宋體",0,50));
}
else if(e.getSource()==item22){//監聽"文字加粗"事件area.setFont(new Font("宋體",1,20));
}
else if(e.getSource()==item23){//監聽"楷體"事件area.setFont(new Font("楷體",0,20));
}
else if(e.getSource()==item24){//監聽"華文新魏"事件area.setFont(new Font("華文新魏",0,20));
}
else if(e.getSource()==item24){//監聽"行書"事件area.setFont(new Font("行書",0,20));
}
else if(e.getSource()==item26){//監聽"恢復原設置"事件
{area.setFont(new Font("宋體",0,20));area.setBackground(Color.white);area.setForeground(Color.black);}}
else if(e.getSource()==item28){監聽"退出"事件area.setText(null);
}
else if(e.getSource()==item27){監聽"相關提示"事件
{ area.setBackground(Color.pink);//默認背景顏色為白色area.setForeground(Color.black);//默認字體顏色為黑色
area.setFont(new Font("新文華謂",1,20));
area.append("該程序存在很多不足之處,建議使用前建議查詢該網站了解相關信息\n");
area.append("該網址是:https://...\n");
int n=JOptionPane.showConfirmDialog(this,"您是否要復制該網址","溫馨提示",JOptionPane.YES_NO_OPTION);//顯示確認對話框
if(n==JOptionPane.YES_OPTION){//用戶單擊對話框上的按鈕“是”
area.append("【注意】1、復制網址后,使用快捷鍵Ctrl+T,也可以繼續編寫文件。\n");
area.append("謝謝您的使用!");
}
if(n==JOptionPane.NO_OPTION)//用戶單擊對話框上的按鈕“是”area.setText(null);}}}
}
BackgroundColorListener.java
//BackgroundListener
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
//下面是實現背景顏色設置功能的方法
public class BackgroundColorListener implements ActionListener{
JTextArea area;
public void setInputText(JTextArea text){
area=text;
}
public void actionPerformed(ActionEvent e){
String str=e.getActionCommand();
if(str.equals("gray"))
area.setBackground(Color.gray);
else if(str.equals("pink"))
area.setBackground(Color.pink);
else if(str.equals("white"))
area.setBackground(Color.white);
else if(str.equals("black"))
area.setBackground(Color.black);
else if(str.equals("green"))area.setBackground(Color.green);
else if(str.equals("yellow"))area.setBackground(Color.yellow);
else if(str.equals("red"))
area.setBackground(Color.red);}
}
HandleListener.java
//HandleListener類
import java.awt.event.*;
import javax.swing.*;
//下面是實現工具里菜單項”復制”、剪切和粘貼的功能的方法
public class HandleListener implements ActionListener{
JTextArea area;
public void setInputText(JTextArea text){
area=text;
}
public void actionPerformed(ActionEvent e){
String str=e.getActionCommand();
if(str.equals("copy"))area.copy();
else if(str.equals("cut"))area.cut();
else if(str.equals("paste"))area.paste();
}
}
4.1問題及解決辦法
(1)在文本區加入滾動條,該語句是:JScrollPane p=new JscrollPane();area.add§;運行后發現并沒有滾動條;在看書查詢后知道了不能直接添加,需要將窗格添加到面板,再將面板添加到文本區,這樣才能成功的加入滾動條;后來被語句改為最簡短的語add(new JScrollPane(area),BorderLayout.CENTER);
滾動條已加入文本區。
(2)為了是該記事本增加背景顏色和字體顏色的功能,一開始想一種顏色用一個菜單項就可以加入到菜單“背景”和“字體”中的,經過好多次運行發現這種辦法是不可行的。后來只能多創建幾個菜單項來分別引用。
(3)在實現新建、保存和打開的功能的方法時,原打算和實現復制剪切粘貼功能一樣新建一個java文件來實現這些功能的;運行后發現不可行,getActionCommand()對于文本框,當發生ActionEvent事件時,默認的字符串是文本框中的文本,并不是事件源對象的引用;因此就用關鍵字this作為新建、保存和打開的監視器,this指的是當前對象,可以調用getSource()方法可以獲取發生ActionListener事件的事件源對象的引用,這樣才能調用getCurrentDirectory()、showOpenDialog()等方法,這樣才能實現新建、保存和粘貼功能。
4.2存在不足
(1)功能不全面,背景顏色不能保存到文件中
(2)在增加字體這一功能設計還不夠好
(3)代碼太長,不夠精簡
五 心得體會
經過努力,基本上完成我的Java課程設計一簡單的記事本程序。也基本上實現了老師需求分析時所預期的功能。在這次課程設計中,我遇到了很多問題,也學會了解決這些問題的方法。通過這次的課程設計,使將我從技本上學習到的理論知識用到了實踐上.從而進一步鞏固和豐富了我所學過的知識,讓我更深層次地認識到Java及其強大的功能。雖然過程有點難,但做這Java課程設計也進-步加強了我的動手能力和提高了我的興趣。為了完成好這次課程設計,我一邊上網查找相關資料,另一方面查閱相關書籍。在這過程中也無形中鍛煉了我的思維分析、遇到問題及想方設法通過各種途徑解決問題的能力。
第一次寫博客文章,有很多不足,希望大家多多指教
總結
以上是生活随笔為你收集整理的java课程设计简易记事本的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。