用JAVA编个简单的记事本程序

记事本可以实现新建,打开,保存,退出,查找等几项功能即可。

import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.Calendar;
import java.util.Date;
import javax.swing.*;

class Editor extends Frame implements ActionListener,ItemListener
{
// Date date=new Date();
int n1;String str="";int k=0;String st1,st2;
JTextArea ta=new JTextArea(50,50);
Dialog dialog,dialog1;
Choice ce1,ce2,ce3;
Button btn1,btn2,btn3;Panel p1=new Panel();
Panel p2=new Panel();Panel p3=new Panel();Panel p4=new Panel();
public Editor (String s)
{
super ("记事本编辑板");
ImageIcon YouImg = new ImageIcon("iconimage.jpg");
setIconImage(YouImg.getImage());

addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}

});
setBounds(50,35,700,500);

MenuBar mb=new MenuBar();
setMenuBar(mb);
Menu file=new Menu("文件(F)");Menu edit=new Menu("编辑(E)");Menu help=new Menu("帮助(H)");
Menu pattern=new Menu("格式(P)");Menu time=new Menu("时间(T)");
MenuItem exit=new MenuItem("退出",new MenuShortcut(KeyEvent.VK_Q));
MenuItem tdate=new MenuItem("日期/时间",new MenuShortcut(KeyEvent.VK_D));
MenuItem renew=new MenuItem("新建", new MenuShortcut(KeyEvent.VK_N));
MenuItem save=new MenuItem("保存", new MenuShortcut(KeyEvent.VK_S));
MenuItem open=new MenuItem("打开",new MenuShortcut(KeyEvent.VK_O));
MenuItem copy=new MenuItem("复制",new MenuShortcut(KeyEvent.VK_C));
MenuItem paste=new MenuItem("粘贴",new MenuShortcut(KeyEvent.VK_V));
MenuItem cut=new MenuItem("剪切",new MenuShortcut(KeyEvent.VK_X));
MenuItem helptopic=new MenuItem("主题",new MenuShortcut(KeyEvent.VK_T));
helptopic.addActionListener(this);
dialog=new Dialog(this, "字体设置");dialog.setSize(300,300);
dialog1=new Dialog(this, "帮助主题");dialog1.setBounds(250,100,300,400);
dialog.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dialog.setVisible(false);}
});
dialog1.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dialog1.setVisible(false);}
});
//dialog.setBackground(Color.WHITE);
dialog.setLayout(null);dialog.setBounds(170,150,450,300);
Label L1=new Label("字体(F)");Label L2=new Label("字形(Y)");
Label L3=new Label("大小(S)");TextArea ta1=new TextArea(5,5);
ta1=new TextArea("至于记事本的主题嘛,因为本人的水平有限, 所有不能为大家作过多的指导,望大家见谅!"); //在这里我想加一个文本框用来放帮助信息。

ce1=new Choice();ce2=new Choice();
ce3=new Choice();
btn1=new Button("确定");btn2=new Button("取消");btn1.addActionListener(this);btn2.addActionListener(this);
btn3=new Button("颜色");
btn3.addActionListener(this);

ce1.add("华文行楷");ce1.add("华文中宋");ce1.add("华文新魏");ce1.add("华文细黑");ce1.add("宋体");ce1.add("方正姚体");
ce1.add("幼圆");ce1.add("隶书");ce1.add("楷体-GB2312");ce1.add("华文行楷");ce1.add("华文彩云");ce1.add("仿宋-GB2312");
ce2.add("粗体");ce2.add("斜体");ce2.add("常规");
for(int n1=0;n1<=100;n1++)
{ce3.add(""+n1);}
dialog.add(p1);p1.setBounds(5,30,440,35);p1.setLayout( null);//p1.setBackground(Color.red);
dialog.add(p2);p2.setBounds(5,65,440,27);dialog.add(p3);p3.setBounds(5,90,440,40);//p4.setBounds(5,120,440,138);
p1.setLayout( null);
p1.add(L1);L1.setBounds(5,15,50,25);p1.add(L2);L2.setBounds(150,15,50,25);
p1.add(L3);L3.setBounds(250,15,50,25);p2.setLayout( null);//p2.setBackground(Color.yellow);
p2.add(ce1);ce1.setBounds(5,0,130,25);p2.add(ce2);ce2.setBounds(160,0,90,25);p2.add(ce3);ce3.setBounds(260,0,75,25);
p2.add(btn1);btn1.setBounds(360,0,75,25);
p3.setLayout( null);p3.add(btn2);btn2.setBounds(360,10,75,25);p3.add(btn3);btn3.setBounds(160,10,75,25);
dialog.add(p4);p4.setBackground(Color.yellow);p4.setBounds(5,120,440,138);
dialog1.add(ta1);
//设置字体的下拉情况
MenuItem Font=new MenuItem("字体");//给字体加监听器
Font.addActionListener(this);
MenuItem Replace=new MenuItem("替换"); MenuItem Seek=new MenuItem("查找");
//首要添加组件的情况
mb.add(file);mb.add(edit);mb.add(pattern);mb.add(time);mb.add(help);
file.add(renew);file.addSeparator();file.add(open);time.add(tdate);
file.addSeparator(); file.add(exit);file.addSeparator();file.add(save);
edit.add(copy); edit.addSeparator();edit.add(paste);edit.addSeparator();edit.add(cut);
pattern.add(Font); pattern.add(Replace);
pattern.add(Seek);help.add(helptopic);
//给必要的组件加上监听器
renew.addActionListener( this);tdate.addActionListener(this);
open.addActionListener(this); save.addActionListener(this);exit.addActionListener(this);
cut.addActionListener(this);copy.addActionListener(this);paste.addActionListener(this);
ce1.addItemListener(this);ce2.addItemListener(this);ce3.addItemListener(this);
//添加必要的组件
add(ta,"Center");ta.setBackground(new Color(249,255,234));
setSize(700,500);
setVisible(true);
this.validate() ;

}

public void itemStateChanged(ItemEvent e) {
if (ce2.getSelectedItem().equals("粗体"))
{ k=1;st1=ce1.getSelectedItem();st2=ce3.getSelectedItem();}
if (ce2.getSelectedItem().equals("斜体"))
{ k=2;st1=ce1.getSelectedItem();st2=ce3.getSelectedItem();}
if (ce2.getSelectedItem().equals("常规"))
{ k=3;st1=ce1.getSelectedItem();st2=ce3.getSelectedItem();}
}

public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("新建"))
{System.out.println("new ");
ta.setText("");}
if(e.getActionCommand().equals("退出"))
{ System.exit(0);}
try
{
if(e.getActionCommand().equals("打开"))
openText();
if(e.getActionCommand().equals("保存"))
saveText();
}catch(IOException e1){}
if(e.getActionCommand().equals("复制"))
{ str=ta.getSelectedText();}
if(e.getActionCommand().equals("粘贴"))
{ ta.insert(str,ta.getCaretPosition());}
if(e.getActionCommand().equals("剪切"))
{str=ta.getSelectedText();ta.replaceRange("",ta.getSelectionStart(),ta.getSelectionEnd());

}
if(e.getActionCommand().equals("字体"))
{dialog.setVisible(true);}
if(e.getActionCommand().equals("主题"))
{dialog1.setVisible(true);}
if(e.getActionCommand().equals("颜色"))
{
Color clr=JColorChooser.showDialog(this,"颜色对话框",null);
ta.setForeground(clr);
}

if(e.getSource()==btn2)
dialog.setVisible(false);
if(e.getSource()==btn1)
{
if(k==1)
{ ta.setFont(new Font(st1,Font.BOLD,Integer.parseInt(st2)));}
if(k==2)
{ ta.setFont(new Font(st1,Font.ITALIC,Integer.parseInt(st2)));}
if(k==3)
{ ta.setFont(new Font(st1,Font.PLAIN,Integer.parseInt(st2)));}
dialog.setVisible(false);
}

//if (e.getActionCommand().equals("日期/时间"))
//ta.setText(ta.getText()+""+date);
if(e.getActionCommand().equals("日期/时间"))
{
Calendar c1 =Calendar.getInstance();
int y = c1.get(Calendar.YEAR);
int m = c1.get(Calendar.MONTH);
int d = c1.get(Calendar.DATE);
int h = c1.get(Calendar.HOUR);
int m1 = c1.get(Calendar.MINUTE);
int m2 = m+1;
ta.setText(ta.getText()+""+(y+"年"+m2+"月"+d+"日"+h+":"+m1));
}

}

public void openText() throws IOException
{
FileDialog fd=new FileDialog(this,"打开文件对话框",FileDialog.LOAD);
fd.setVisible(true);FileInputStream fis=new FileInputStream(fd.getDirectory()+fd.getFile());
ta.setText("");
int n=0;
while((n=fis.read())!=-1)
ta.append(""+(char)n);
fis.close();
}
public void saveText() throws IOException
{
FileDialog fd=new FileDialog(this,"打开文件对话框",FileDialog.SAVE);
fd.setVisible(true);
FileOutputStream out=new FileOutputStream(fd.getDirectory()+fd.getFile()+".txt");
String str=ta.getText();

String str1=ta.getText();
for(int n=0;n<str.length();n++)
out.write((byte)str.charAt(n));
out.close();
}

public static void main(String[] args)
{
Editor f=new Editor(" 记事本程序");
//添加时间代码
Date date=new Date();
System.out.print(date);
/*Calendar now=Calendar.getInstance();
int year=now.get(Calendar.YEAR);
int month=now.get(Calendar.MONTH)+1;
int day=now.get(Calendar.DATE);
System.out.print(year+"年"+month+"月"+day+"日");

int week=now.get(Calendar.DAY_OF_WEEK);
String str="日一二三四五六";//星期1-7
int i=2*(week-1);
System.out.println("星期"+str.substring(i,i+2));//对应中文的下标*/

}

class dialog extends Dialog
{

public dialog()
{
super(dialog, "字体设置");

class Mycanvas extends Canvas
{
Toolkit tk;
Image img;
Mycanvas()
{
setSize(440,138);
tk=getToolkit();
img=tk.getImage("photo.jpg");
}
public void paint(Graphics g)
{
g.drawImage(img,5,120,440,138,this);
}
}
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-31
1楼的很详细了,我的这个跟楼主要求的功能差不多,楼主可以借鉴我们2个的程序改进下
import javax.swing.*;
import javax.swing.undo.UndoManager;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Notepad extends JFrame implements ActionListener
{

UndoManager undoManager = new UndoManager();
Container container;
JMenuBar bar;
JMenu 文件, 编辑;
JMenuItem 新建, 打开, 保存, 另存为, 退出;
JMenuItem 查找;
JTextPane jtext;
JScrollPane jscroll;
static Notepad np;
private int index = 0;

public Notepad()
{
jtext = new JTextPane();
jscroll = new JScrollPane();
container = getContentPane();
bar = new JMenuBar();
文件 = new JMenu("文件");
编辑 = new JMenu("编辑");
新建 = new JMenuItem("新建");
打开 = new JMenuItem("打开");
保存 = new JMenuItem("保存");
另存为 = new JMenuItem("另存为");
退出 = new JMenuItem("退出");
查找 = new JMenuItem("查找");
文件.add(新建);
文件.add(打开);
文件.add(保存);
文件.add(另存为);
文件.addSeparator();
文件.add(退出);
编辑.add(查找);
bar.add(文件);
bar.add(编辑);
setJMenuBar(bar);
container.setLayout(new BorderLayout());
jscroll.getViewport().setView(jtext);
container.add(jscroll);
jtext.setBackground(Color.WHITE);
jtext.getDocument().addUndoableEditListener(undoManager);
新建.addActionListener(this);
打开.addActionListener(this);
保存.addActionListener(this);
另存为.addActionListener(this);
退出.addActionListener(this);
查找.addActionListener(this);
}

public static void main(String[] args)
{
np = new Notepad();
np.setSize(300, 300);
np.setVisible(true);
np.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void actionPerformed(ActionEvent e)
{
if (e.getSource() == 新建)
{
if (jtext.getText().length() > 0)
{
Button b1 = new Button("是");
Button b2 = new Button("否");
Button b3 = new Button("取消");
final NewFrame jf = new NewFrame("记事本");
jf.setLayout(new GridLayout(2, 1));
JPanel jp = new JPanel();
final JTextArea jtf = new JTextArea();
jtf.setText("★ 文件 无标题 的文字已经改变。\n 想改变文件吗?");
jf.add(jp);
jf.add(jtf);
jf.setLayout(new FlowLayout());
jf.add(b1);
jf.add(b2);
jf.add(b3);
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String string = jtext.getText();
JFileChooser jfc = new JFileChooser();
int result = jfc.showSaveDialog(jf);
File file = null;
if (result == jfc.APPROVE_OPTION)
{
file = jfc.getSelectedFile();
try
{
FileWriter fos = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fos);
String[] buf = string.split("\n");
for (int i = 0; i < buf.length; i++)
{
bw.write(buf + "\r\n");
}
bw.close();
jf.setVisible(false);
jf.dispose();
jtext.setText("");
} catch (FileNotFoundException e1)
{
e1.printStackTrace();
} catch (IOException ex)
{
ex.printStackTrace();
}

} else if (result == jfc.CANCEL_OPTION)
{
System.out.println("give up saving");
}
}

});
b2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jtext.setText("");
jf.setVisible(false);
jf.dispose();
}

});
b3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jf.setVisible(false);
jf.dispose();
}

});
jf.setSize(200, 150);
jf.setResizable(false);
}
}
if (e.getSource() == 打开)
{
JFileChooser jfc = new JFileChooser();
int result = jfc.showOpenDialog(this);
File file = null;
if (result == jfc.APPROVE_OPTION)
{
file = jfc.getSelectedFile();
try
{
FileInputStream fr = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fr);
byte b[] = new byte[(int) file.length()];
System.out.println(file.length());
bis.read(b);
jtext.setText(new String(b));
bis.close();
} catch (IOException ex)
{
ex.printStackTrace();
}
}
}
if (e.getSource() == 保存)
{
String string = jtext.getText();
JFileChooser jfc = new JFileChooser();
int result = jfc.showSaveDialog(this);
File file = null;
if (result == jfc.APPROVE_OPTION)
{
file = jfc.getSelectedFile();
try
{
FileWriter fos = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fos);
String[] buf = string.split("\n");
for (int i = 0; i < buf.length; i++)
{
bw.write(buf + "\r\n");
}
bw.close();
} catch (FileNotFoundException e1)
{
e1.printStackTrace();
} catch (IOException ex)
{
ex.printStackTrace();
}

} else if (result == jfc.CANCEL_OPTION)
{
System.out.println("give up saving");
}
}
if (e.getSource() == 另存为)
{
String string = jtext.getText();
JFileChooser jfc = new JFileChooser();
int result = jfc.showSaveDialog(this);
File file = null;
if (result == jfc.APPROVE_OPTION)
{
file = jfc.getSelectedFile();
try
{
FileWriter fos = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fos);
String[] buf = string.split("\n");
for (int i = 0; i < buf.length; i++)
{
bw.write(buf + "\r\n");
}
bw.close();
} catch (FileNotFoundException e1)
{
e1.printStackTrace();
} catch (IOException ex)
{
ex.printStackTrace();
}

} else if (result == jfc.CANCEL_OPTION)
{
System.out.println("give up saving");
}
}
if (e.getSource() == 退出)
{
int retval = JOptionPane.showConfirmDialog(this, "你真的要结束吗?",
"结束程序", JOptionPane.YES_NO_OPTION);
if (retval == JOptionPane.YES_OPTION)
System.exit(0);
}
if (e.getSource() == 查找)
{
JFrame jf = new JFrame("查找");
final JTextField jtf;
JLabel jl;
JButton jb;
jl = new JLabel("查找的字符串:");
jtf = new JTextField(15);
jb = new JButton("查找下一个");
jf.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
jf.add(jl);
jf.add(jtf);
jf.add(jb);
jf.setSize(400,90);
jf.setLocation(200, 200);
jf.setVisible(true);
jf.setResizable(false);
jf.setAlwaysOnTop(true);
jb.addActionListener(new ActionListener()
{

public void actionPerformed(ActionEvent e)
{

String temp = np.getJta().getText();

if (temp.indexOf(jtf.getText(), index
+ jtf.getText().length()) == -1)
{

index = temp.indexOf(jtf.getText());

} else
{

index = temp.indexOf(jtf.getText(), index
+ jtf.getText().length());

}
np.getJta().setSelectionStart(index);
np.getJta().setSelectionEnd(index + jtf.getText().length());
}

});
}

}

public JTextPane getJta()
{
return jtext;
}

class NewFrame extends JFrame
{
NewFrame()
{
super();
}

NewFrame(String sti)
{
super();
setSize(300, 300);
setLocationRelativeTo(this);
pack();
setVisible(true);
addWindowListener(new WindowsListener());
}
}

class WindowsListener extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
((Window) we.getComponent()).dispose();
}
}
}
第2个回答  2009-05-30
楼上的大牛,你的程序回答楼主的问题已经算是绰绰有余了。实现了记事本的基本功能,我只是有点建议:字符编码上能不能稍微加强一下处理功能,因为你写的东西如果是英文和数字,可以很再次打开,但是中文的字符就会出错。仅是建议。
相似回答