import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Font.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
public class Jishiben extends JFrame
{
static JTextArea ta;
static JFrame app;
static JLabel jl;
static JLabel jl2;
//各菜單的監聽均采用內部類實現, 子菜單的監聽采用內部類的內部類
class xianjian implements ActionListener
//新建文件監聽
{
public void actionPerformed(ActionEvent e)
{
ta.setText("");//將ta 的Text設置為空字符串,實現新建
}
}
class dakai implements ActionListener
//打開文件監聽
{
public void actionPerformed(ActionEvent e)
{
JFileChooser jf=new JFileChooser();
javax.swing.filechooser.FileFilter filter = new FileNameExtensionFilter("*.txt", "txt");
jf.addChoosableFileFilter(filter);//文件過濾默認僅顯示TXT文件,選擇所有文件才全顯示
jf.showOpenDialog(Jishiben.this);//顯示打開文件對話框
String fileName=jf.getSelectedFile().getAbsolutePath().trim();//獲取文件路徑及文件名
try{
BufferedReader br=new BufferedReader(new FileReader(fileName));
String S;
for(S=br.readLine();S!=null;S=br.readLine())//按行讀取文件
ta.append(S+"\n");//寫入ta,並執行換行
br.close();
}
catch(IOException a)
{
System.out.println("Open file error!");
a.printStackTrace();
}
}
}
//保存文件監聽
class baocun implements ActionListener
//註:保存文件後,用Windows自帶的記事本打開發現是只有壹行,這是因為文件是此記事本創建的。如果用此記事本打開顯示就正常了
{
public void actionPerformed(ActionEvent e)
{
JFileChooser jf = new JFileChooser();
javax.swing.filechooser.FileFilter filter = new FileNameExtensionFilter("*.txt", "txt");
jf.addChoosableFileFilter(filter);//文件過濾默認保存為TXT文件,選擇所有文件時需加後綴
jf.showSaveDialog(Jishiben.this);//顯示保存文件對話框
String fileName=jf.getSelectedFile().getAbsolutePath().trim();//獲取保存文件的路徑及輸入的文件名
if(fileName!=null)
try{
BufferedWriter bw=new BufferedWriter(new FileWriter(fileName+".txt"));//自動加上.txt的後綴
PrintWriter pw=new PrintWriter(bw);
pw.println(ta.getText());//寫入文件
bw.close();
}
catch (IOException a)
{
System.out.println("Save file error!");
a.printStackTrace();
}
}
}
//退出程序監聽
class tuichu implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);//退出程序
}
}
//剪切的監聽
class jianqie implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
ta.cut();//剪切
}
}
//復制的監聽
class fuzhi implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
ta.copy();//復制
}
}
//粘貼的監聽
class zhantie implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
ta.paste();//粘貼
}
}
//全選的監聽
class quanxuan implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
ta.selectAll();//選擇全部
}
}
//刪除的監聽
class shanchu implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
ta.replaceRange("",ta.getSelectionStart(),ta.getSelectionEnd());//用空字符串替換選擇部分,實現刪除功能
}
}
//字體的監聽
class ziti implements ActionListener
{
JComboBox cb1;
JComboBox cb2;
JComboBox cb3;
Font[] fa={new Font("宋體",java.awt.Font.BOLD, 16),new Font("楷體",java.awt.Font.ITALIC, 16),new Font("Arial",java.awt.Font.PLAIN, 16)};
Font[] fb={new Font("宋體",java.awt.Font.BOLD, 16),new Font("宋體",java.awt.Font.ITALIC, 16),new Font("宋體",java.awt.Font.PLAIN, 16)};
Font[] ft={new Font("宋體",java.awt.Font.PLAIN, 16),new Font("宋體",java.awt.Font.PLAIN, 25),new Font("宋體",java.awt.Font.PLAIN, 10)};
class xuanziti implements ItemListener//內部類,用來監聽字體
{
public void itemStateChanged(ItemEvent a)
{
if(cb1.getSelectedIndex()==1) //根據組合框選擇的項,設置字體
ta.setFont(fa[1]);
else if(cb1.getSelectedIndex()==2)
ta.setFont(fa[2]);
else
ta.setFont(fa[0]);;
}
}
class xuanzixing implements ItemListener//內部類,用來監聽自行
{
public void itemStateChanged(ItemEvent a)
{
if(cb2.getSelectedIndex()==1)//根據組合框選擇的項,設置字體
ta.setFont(fb[1]);
else if(cb2.getSelectedIndex()==2)
ta.setFont(fb[2]);
else
ta.setFont(fb[0]);;
}
}
class xuandaxiao implements ItemListener//內部類,用來監聽字體大小
{
public void itemStateChanged(ItemEvent a)
{
if(cb3.getSelectedIndex()==1)//根據組合框選擇的項,設置字體
ta.setFont(ft[0]);
else if(cb3.getSelectedIndex()==2)
ta.setFont(ft[2]);
else
ta.setFont(ft[1]);
}
}
public void actionPerformed(ActionEvent e)
{
JDialog jd=new JDialog(app,"設置字體",false);//創建對話框
Container c=jd.getContentPane();
String [] ziti={"宋體 ","楷體 ","Arial "};
String [] zixing={"粗體 ","斜體 ", "正常 "};
String [] daxiao={"大 ","中 ","小 "};
cb1=new JComboBox(ziti);//創建三個組合框
cb2=new JComboBox(zixing);
cb3=new JComboBox(daxiao);
c.setLayout(new FlowLayout());
c.add(cb1);//在對話框中添加三個組合框分別用來控制字體,自行,大小
cb1.addItemListener(new xuanziti());//註冊監聽器
c.add(cb2);
cb2.addItemListener(new xuanzixing());
c.add(cb3);
cb3.addItemListener(new xuandaxiao());
jd.setSize(300,100);
jd.setVisible(true);
}
}
//狀態欄的監聽
class zhuangtailan implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jl2.setText("總***:Ln "+ta.getLineCount());//最下面的面板中顯示總的行數
}
}
//幫助的監聽
class bangzhu implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JDialog jd=new JDialog(app,"幫助主題",false);//創建對話框,以對話框顯示信息
Container C=jd.getContentPane();
jd.add(new JLabel("使用方法基本同Windows記事本,正在努力完善中。。。"));
jd.setSize(400,200);
jd.setVisible(true);
}
}
//關於記事本的監聽
class guanyujishiben implements ActionListener
{
JLabel jl=new JLabel("謝謝您的支持,湖南理工學院計算機系徐勤錢制作。");
int i=0;
class xiayitiao implements ActionListener//按鈕下壹條的監聽
{
public void actionPerformed(ActionEvent e)
{
String[] S={"謝謝您的支持,湖南理工學院計算機系徐勤錢制作。","盡最大的努力為您服務!","QQ:282196482,EMAIL:bjawawlove@163.com"};
if(i<S.length)
i++;
jl.setText((S[i]));//設置標簽的內容
}
}
class shangyitiao implements ActionListener//按鈕上壹條的監聽
{
public void actionPerformed(ActionEvent e)
{
String[] S={"謝謝您的支持,湖南理工學院計算機系徐勤錢制作。","盡最大的努力為您服務!","QQ:282196482,EMAIL:bjawawlove@163.com"};
if(i>0)
i--;
jl.setText((S[i]));//設置標簽的內容
}
}
public void actionPerformed(ActionEvent e)
{
JDialog jd=new JDialog(app,"歡迎使用!",false);//建立對話框
Container c=jd.getContentPane();
JPanel jp=new JPanel();//創建面板,加入到對話框中,便於布局管理
JButton jbs=new JButton("上壹條");//創建兩個按鈕,下壹條和上壹條
JButton jbx=new JButton("下壹條");
jbs.addActionListener(new xiayitiao());//按鈕註冊監聽器
jbx.addActionListener(new shangyitiao());
jp.add(jbs);//將按鈕添加到面板中
jp.add(jbx);
c.setLayout(new BorderLayout());
c.add(jl,BorderLayout.CENTER);//對話框中添加標簽,顯示信息
c.add(jp,BorderLayout.SOUTH);//將面板添加到對話框
jd.setSize(400,200);
jd.setVisible(true);
}
}
public Jishiben()
{
super("記事本");
//創建菜單欄,並加入各下拉式菜單及菜單項
JMenuBar mBar=new JMenuBar();
JMenu[] mA={new JMenu("文件(F)"),new JMenu("編輯(E)"),new JMenu("格式(O)"),new JMenu("查看(V)"),new JMenu("幫助(H)")};
char[][] mC={{'F','E','O','V','H'},{'N','O','S','X'},{'U','T','C','P','L','A'},{'F'},{'S'},{'H','A'}};
char[][] mD={{'N','O','S'},{'Z','X','C','V','A'}};
JMenuItem[][] mI={{new JMenuItem("新建(N)"),new JMenuItem("打開(O)"),
new JMenuItem("保存(S)"),new JMenuItem("退出(X)")},
{new JMenuItem("剪切(T)"),new JMenuItem("復制(C)"),
new JMenuItem("粘貼(P)"),new JMenuItem("全選(A)"),new JMenuItem("刪除(L)")},
{new JMenuItem("字體(F)")},{new JMenuItem("狀態欄(S)")},
{new JMenuItem("幫助(H)"),new JMenuItem("關於記事本(A)")}};
setJMenuBar(mBar);
int i,j;
for(i=0;i<mA.length;i++)
{
mBar.add(mA[i]);//添加下拉式菜單
mA[i].setMnemonic(mC[0][i]);
for(j=0;j<mI[i].length;j++)
{
mA[i].add(mI[i][j]);//添加菜單項
mI[i][j].setMnemonic(mC[i+1][j]);//設置助記符
}
}
//各個菜單項註冊監聽器
mI[0][0].addActionListener(new xianjian());
mI[0][1].addActionListener(new dakai());
mI[0][2].addActionListener(new baocun());
mI[0][3].addActionListener(new tuichu());
mI[1][0].addActionListener(new jianqie());
mI[1][1].addActionListener(new fuzhi());
mI[1][2].addActionListener(new zhantie());
mI[1][3].addActionListener(new quanxuan());
mI[1][4].addActionListener(new shanchu());
mI[2][0].addActionListener(new ziti());
mI[3][0].addActionListener(new zhuangtailan());
mI[4][0].addActionListener(new bangzhu());
mI[4][1].addActionListener(new guanyujishiben());
}//構造函數Jishiben中添加了菜單欄及註冊了菜單的監聽器
public static void main(String args[])//程序入口,主函數
{
app=new Jishiben();//新建帶菜單欄的框架
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(800,600);
Container c=app.getContentPane();//獲得內容窗格
c.setLayout(new BorderLayout());//設置布局管理為邊界布局
ta=new JTextArea();//新建文本區域
JScrollPane sta=new JScrollPane(ta);
jl2=new JLabel("總***:Ln 0",JLabel.RIGHT);//新建標簽
jl2.setSize(800,20);
c.add(sta,BorderLayout.CENTER);//在BorderLayout.CENTER中添加文本區域作為主編輯區
c.add(jl2,BorderLayout.SOUTH);//在BorderLayout.SOUTH中添加標簽用來查看狀態
app.setVisible(true);
}
}//類Jishiben結束