这是在学校做的一个小记事本,在网上看过一些记事本的代码,大多是一些比较有经验的前辈所编写的,算法比较精妙,精简。对于Java初学者来说,我有一个比较简单的思想。
要编写出一个记事本,至少需要拥有两方面的知识:1.图形用户界面(GUI)程序设计 2.文件的输入和输出
我的基本思想就是;"先把记事本的框架先做好,再逐步添加监听。"
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;//以上是导入各种所用到的包
public class Mynotebook
{
public static void main(String args[]){
MyFrame frame=new MyFrame();//这个主函数是框架
frame.setTitle("我的记事本");
frame.setSize(300,350);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyFrame extends JFrame
{
JTextArea jt1=new JTextArea();//设置文本域对象
File f;
String result="";
boolean flag=true;
String value;
JButton jbt=new JButton("替换为");//按钮
JButton jba=new JButton("全部替换");
JTextField jtf=new JTextField(15);
JTextField jt=new JTextField(15);
int start=0;
JFrame frame=new JFrame();
//以上是添加
JPanel textPanel=new JPanel();//面板
JMenu jmu1=new JMenu("文件");//菜单主项
JMenuItem jmi1=new JMenuItem("新建");//以下是在菜单项里加入目录
JMenuItem jmi2=new JMenuItem("打开");
JMenuItem jmi3=new JMenuItem("保存");
JMenuItem jmi4=new JMenuItem("另存为");
JMenuItem jmi5=new JMenuItem("退出");
JMenu jmu2=new JMenu("编辑");
JMenuItem jmi6=new JMenuItem("复制");
JMenuItem jmi7=new JMenuItem("粘贴");
JMenuItem jmi8=new JMenuItem("查找替换");
JMenu jmu3=new JMenu("帮助");
final JMenuItem jmi9=new JMenuItem("关于编辑器");
JMenuItem jmi10=new JMenuItem("帮助主题");
public MyFrame(){
textPanel.setLayout(new BorderLayout());//设置布局
jmi2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));//设置快捷键
jmi3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
jmi5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,ActionEvent.CTRL_MASK));
jmi6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
jmi7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
JMenuBar jmb=new JMenuBar();//菜单条
setJMenuBar(jmb);
jmb.add(jmu1);//将设置的对象,添加到对应的地方才能实现功能。添加就如“大盒子里面套小盒子...”
jmb.add(jmu2);
jmb.add(jmu3);
jmu1.add(jmi1);
jmu1.add(jmi2);
jmu1.add(jmi3);
jmu1.add(jmi4);
jmu1.add(jmi5);
jmu2.add(jmi6);
jmu2.add(jmi7);
jmu2.add(jmi8);
jmu3.add(jmi9);
jmu3.add(jmi10);
Container contentPane=getContentPane();//内容窗口
contentPane.add(textPanel,BorderLayout.CENTER);
textPanel.add(jt1);
jmi1.addActionListener (new ActionListener(){ //第一个监听,“新建”
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi1);
jt1.setText(null);
}
} );
jmi5.addActionListener (new ActionListener(){ //“退出”(我是由简单到难,所以监听顺序不一样)
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi5);
System.exit(0);
}
} );
jmi9.addActionListener (new ActionListener(){ //监听,“关于编辑器”,设置的一个标签
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi9);
JFrame jd=new JFrame("关于编辑器");
jd.setSize(100,100);
JLabel a=new JLabel("WINGS-旗下开发产品-"+"周忠华制作");
jd.add(a,BorderLayout.CENTER);
jd.setLocation(100,200);
jd.setSize(300,300);
jd.setVisible(true);
jd.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
} );
jmi10.addActionListener (new ActionListener(){//监听,“帮助主题”,设置一个文本域,再不可编辑
public void actionPerformed(ActionEvent e)
{
textPanel.setLayout(new BorderLayout());
JFrame frame=new JFrame("帮助主题");
Container contentPane=getContentPane();//内容窗口
contentPane.add(textPanel,BorderLayout.CENTER);
JPanel textPanel=new JPanel();//面板
String help="WINGS-旗下帮助:\n"
+"新建:重新开始一个文本框\n"
+"打开:打开一个指定文件\n"
+"保存:保存当前你所修改\n"
+"另存为:保存在一个指定文件中\n"
+"退出:退出记事本\n"
+"复制:复制你想要的信息\n"
+"粘贴:把你所剪贴或复制的信息拷贝下来\n"
+"查找替换:找到你想要找到的信息并替换所有相同的信息\n"
+"关于记事本:产品出处\n"
+"帮助主题:当前所打开的文本框";
JTextArea jt2=new JTextArea();
jt2=new JTextArea(30,20);
jt2.setEditable(false);//不可编辑
textPanel.add(jt2);
jt2.setText(help);
frame.add(textPanel,BorderLayout.CENTER);
frame.setSize(350,250);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
} );
jmi6.addActionListener (new ActionListener(){ //监听,“复制”,一个函数搞定
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi6);
jt1.copy();
}
} );
jmi7.addActionListener (new ActionListener(){ //监听,“粘贴”
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi7);
String b;
b=jt1.getText();
jt1.paste();
}
} );
jmi2.addActionListener (new ActionListener(){ //监听,“打开”
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi2);
MyFrame frame=new MyFrame();
JFileChooser jfc=new JFileChooser();
jfc.setDialogType(JFileChooser.OPEN_DIALOG);
jfc.showOpenDialog(null);
f=jfc.getSelectedFile();
frame.setTitle(f.getName());
flag=false;
jt1.setText(read());
}
});
jmi3.addActionListener (new ActionListener(){ //监听,“保存”
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi3);
JFileChooser jfc=new JFileChooser();
if(flag){
jfc.showOpenDialog(null);
f=jfc.getSelectedFile();
flag=false;
write();
}else{
write();
}
}
} );
jmi4.addActionListener (new ActionListener(){//监听,“另存为”
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jmi4);
JFileChooser jfc=new JFileChooser();
jfc.showOpenDialog(null);
f=jfc.getSelectedFile();
flag=false;
write();
}
} );
jmi8.addActionListener(new ActionListener(){ //查找替换
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jmi8){
JFrame thjf=new JFrame("替换");
value=jt1.getText();
GridLayout gl=new GridLayout(3,2);
JLabel jl1=new JLabel("查找内容:");
JLabel jl2=new JLabel("替换为:");
thjf.setLayout(gl);
thjf.add(jl1);
thjf.add(jtf);
thjf.add(jl2);
thjf.add(jt);
thjf.add(jbt);
thjf.add(jba);
thjf.setLocation(300,300);
thjf.pack();
thjf.setVisible(true);
thjf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}});
jbt.addActionListener(new ActionListener(){ //替换按钮的监听
public void actionPerformed(ActionEvent e) {
if (e.getSource()==jbt){
String value=jt1.getText();
String temp=jtf.getText();
int s=value.indexOf(temp,start);
if(value.indexOf(temp,start)!=-1){
jt1.setSelectionStart(s);
jt1.setSelectionEnd(s+temp.length());
jt1.setSelectedTextColor(Color.GREEN);
start=s+1;
jt1.replaceSelection(jt.getText());
}else {
JOptionPane.showMessageDialog(frame, "替换完毕!", "提示", 0);
frame.dispose();
}
}
}});
jba.addActionListener(new ActionListener(){ //全部替换按钮的监听
public void actionPerformed(ActionEvent e) {
if (e.getSource()==jba){
String temp=jt1.getText();
temp=temp.replaceAll(jtf.getText(), jt.getText());
jt1.setText(temp);
JOptionPane.showMessageDialog(frame, "替换完毕!", "提示", 0);
frame.dispose();
}
}});
}
public String read(){ //读方法
String temp="";
try{
FileInputStream fis=new FileInputStream(f.getAbsolutePath());
byte[]b=new byte[1024];
while(true){
int num=fis.read(b);
if(num==-1)break;
temp=temp+new String(b,0,num);
}
fis.close();
} catch(Exception e1) {
e1.printStackTrace();
}
return temp;
}
public void write(){ //写方法
try{
FileOutputStream fos=new FileOutputStream(f);
fos.write(jt1.getText().getBytes());
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}