技术点不多,主要涉及一些IO类的使用与GUI的用法,为大家提供一个简单的模板,更多的功能当然是留给大家自己来思考,代码可以自己拷过去运行一下,打开文件与另存为方法请填入绝对路径下的文件名,点击保存会直接保存到D盘,还可以设置字体,代码如下:
面板类:
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
@SuppressWarnings("serial")
public class NotePad extends JFrame{
JTextArea textArea=new JTextArea();
public static void main(String args[]){
NotePad tf=new NotePad();
tf.showframe();
}
public void showframe(){
//创建一个菜单选项
JMenuBar menubar=initMenu();
//给输入框添加滚动条
JScrollPane scroll=new JScrollPane(textArea);
//设置滚动条的大小为窗口的大小
scroll.setPreferredSize(this.getSize());
//设置滚动条的出现方式为自动出现
scroll.setAutoscrolls(true);
//设置垂直的滚动条总是显示
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
//设置横向的滚动条总是显示
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
//字体说明:0常规,1粗体,2斜体,3倾斜加粗
this.setJMenuBar(menubar);
this.add(scroll);
this.setTitle("我的记事本");
this.setSize(600,400);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
//实例化一个菜单
public JMenuBar initMenu(){
JMenuBar menubar=new JMenuBar();
//主选项
String menu1[]=new String[]{"文件","编辑","格式","查看","帮助"};
//扩展选项
String me1[][]=new String[][]{{"打开(O) Ctrl+O","保存(S) Ctrl+S","另存为(A) Ctrl+A",
"页面设置(U)","打印(P)","退出(E)"},{"撤销(Z) Ctrl+Z","剪切(X) Ctrl+X",
"复制(C) Ctrl+C","粘贴(V) Ctrl+V","删除(D) Ctrl+D","查找(F) Ctrl+F",
"替换(R) Ctrl+R"},{"自动换行","字体"},{"状态栏"},
{"查看帮助","关于记事本"}};
Font font=new Font("楷体",1,16);
for(int i=0;i<menu1.length;i++){
//实例化菜单选项并添加到菜单上
JMenu menu=new JMenu(menu1[i]);
menu.setFont(font);
//实例化子菜单选项
for(int j=0;j<me1[i].length;j++){
//添加子菜单选项
JMenuItem me=new JMenuItem(me1[i][j]);
me.setFont(font);
//将子菜单添加到主菜单上面
menu.add(me);
//给子菜单项添加监听器
MenuListener mlis=new MenuListener(new openFrame(),new fontFrame(),new saveFrame(),this);
//设置按钮响应
me.setActionCommand(me1[i][j]);
me.addActionListener(mlis);
}
//将菜单添加到菜单条上面
menubar.add(menu);
}
return menubar;
}
/**
* 打开文件的界面
*/
class openFrame {
public void showFrame(){
final JFrame frame=new JFrame();
JLabel file_la=new JLabel("文件名");
final JTextField file_jf=new JTextField(15);
JButton sure=new JButton("确定");
frame.setLayout(new FlowLayout());
frame.add(file_la);
frame.add(file_jf);
frame.add(sure);
frame.setSize(240,120);
frame.setLocationRelativeTo(null);
frame.setTitle("请输入文件名");
frame.setVisible(true);
sure.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//打开文件的方法
openFile(file_jf.getText().toString());
frame.setVisible(false);
}
});
}
}
/**
* 保存文件的界面
*/
class saveFrame {
public void showFrame(){
final JFrame frame=new JFrame();
JLabel file_la=new JLabel("文件名");
final JTextField file_jf=new JTextField(15);
JButton sure=new JButton("确定");
frame.setLayout(new FlowLayout());
frame.add(file_la);
frame.add(file_jf);
frame.add(sure);
frame.setSize(240,120);
frame.setLocationRelativeTo(null);
frame.setTitle("请输入文件名");
frame.setVisible(true);
sure.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
saveFile(file_jf.getText().toString());
frame.setVisible(false);
}
});
}
}
/**
* 设置字体的界面
*/
class fontFrame{
public void showFrame(){
final JFrame fontframe=new JFrame();
JButton sure=new JButton("确定");
Font f=new Font("宋体",0,16);
//字体选择项
String fontSelection[]=new String[]{"华文彩云","华文行楷","华文楷体","华文琥珀","华文中宋",
"华文细黑","华文新魏","方正姚体","仿宋","宋体","黑体","隶书","楷体","幼圆"};
final JComboBox<String> fontBox=new JComboBox<String>(fontSelection);
//设置滚动条
JScrollPane scroll=new JScrollPane(fontBox);
fontBox.setFont(f);
//字形选择项
String boldSelection[]=new String[]{"常规","加粗","斜体","倾斜加粗"};
final JComboBox<String> boldBox=new JComboBox<String>(boldSelection);
boldBox.setFont(f);
//字体大小
String size[]=new String[]{"8","9","10","11","12","14","16","18","20","22",
"24","26","28","36","48","72"};
final JComboBox<String> fontsize=new JComboBox<String>(size);
JScrollPane fontSize=new JScrollPane(fontsize);
fontframe.setLayout(new FlowLayout());
fontframe.add(scroll);
fontframe.add(boldBox);
fontframe.add(fontSize);
fontframe.add(sure);
fontframe.setSize(350,260);
fontframe.setTitle("请选择字体");
fontframe.setResizable(false);
//设置窗体显示的位置
fontframe.setLocationRelativeTo(null);
fontframe.setVisible(true);
sure.addActionListener(new ActionListener(){
//字体设置的方法
public void actionPerformed(ActionEvent e){
//得到字体框的选择项
String font=fontBox.getSelectedItem().toString();
//得到样式框的选择项
String bold=boldBox.getSelectedItem().toString();
//得到字体大小框的字体大小
String s=fontsize.getSelectedItem().toString();
Integer size=Integer.parseInt(s);
//设置字体
if(bold.equals("常规")){
textArea.setFont(new Font(font,0,size));
}else if(bold.equals("加粗")){
textArea.setFont(new Font(font,1,size));
}else if(bold.equals("斜体")){
textArea.setFont(new Font(font,2,size));
}else if(bold.equals("倾斜加粗")){
textArea.setFont(new Font(font,3,size));
}
fontframe.setVisible(false);
}
});
}
}
/**
* 打开文件的方法
* @param fileName 文件的绝对路径名
*/
public void openFile(String fileName){
File file=new File(fileName);
if(file.exists()){
try{
//读取文件
FileInputStream in=new FileInputStream(file);
//创建与文件大小相同的字节数组
byte content[]=new byte[in.available()];
//读取文件
in.read(content);
//将读到的文件放在输入框中显示出来
textArea.setText(new String(content));
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
else{
System.out.println("文件不存在");
}
}
/**
* 保存文件的方法
* @param fileName 文件的绝对路径名
*/
public void saveFile(String fileName){
String text=textArea.getText();
try{
OutputStream out=new FileOutputStream(fileName);
//text.getBytes();获取文件的字节数
out.write(text.getBytes());
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
监听类:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import 记事本.NotePad.fontFrame;
import 记事本.NotePad.openFrame;
import 记事本.NotePad.saveFrame;
public class MenuListener implements ActionListener{
private openFrame open;//弹出打开文件的窗体
private fontFrame font;//弹出字体文件的窗体
private saveFrame save;//弹出保存文件的窗体
private NotePad tf;
public MenuListener(openFrame open,fontFrame font,saveFrame save,NotePad tf){
this.open=open;
this.font=font;
this.save=save;
this.tf=tf;
}
public void actionPerformed(ActionEvent e){
String com=e.getActionCommand();
if(com.equals("打开(O) Ctrl+O")){//打开一个记事本文件
open.showFrame();
}
else if(com.equals("字体")){//设置字体的窗口
font.showFrame();
}
else if(com.equals("保存(S) Ctrl+S")){//快捷保存文件
tf.saveFile("d://新建记事本.txt");
}
else if(com.equals("另存为(A) Ctrl+A")){//另存为新文件
save.showFrame();
}
else if(com.equals("退出(E)")){
int selection=JOptionPane.showConfirmDialog(null, "确定要退出?","",JOptionPane.YES_NO_OPTION);
if(selection==0){
tf.dispose();//退出程序
}else{
}
}
}
}