用Java制作的记事本
功能如下:
1.打开文件
2.保存文件
3.换行
4.右键,包括:
全选,复制,粘贴,剪切
5.快捷键:打开,保存
具体实现如下:
1.新建窗体
2.加入菜单栏到窗体 JMenuBar
3.为菜单栏添加菜单 JMenu
4.为菜单添加菜单项 JMenuItem
5.为部分菜单项添加快捷键
6.添加JScrollPane到窗体中
7.将文本域JTextFiled添加到JScrollPane中
8.为文本框添加右键功能JPopupMenu
9.为右键菜单添加菜单项
10.添加按钮监听
具体代码如下:
package cn.mrzhu.menu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
public class MenuDemo {
public void menu(){
//新建窗体
final JFrame jf = new JFrame("菜单");
jf.setBounds(300, 300, 500, 500);
jf.setVisible(true);
//菜单栏
JMenuBar mb = new JMenuBar();
//菜单
JMenu file = new JMenu("文件(F)");
JMenu edit = new JMenu("编辑(E)");
JMenu find = new JMenu("查看(V)");
//file(文件) 菜单项
JMenuItem create = new JMenuItem("新建(N)");
JMenuItem open = new JMenuItem("打开(O)");
JMenuItem save = new JMenuItem("保存(S)");
JMenuItem savaAs = new JMenuItem("另存为(A)");
JMenuItem close = new JMenuItem("关闭(C)");
JMenuItem quit = new JMenuItem("退出(Q)");
//为file菜单添加菜单顶
file.add(create);
file.addSeparator();
file.add(open);
file.addSeparator();
file.add(save);
file.addSeparator();
file.add(savaAs);
file.addSeparator();
file.add(close);
file.addSeparator();
file.add(quit);
//快捷键 打开和保存
open.setAccelerator(KeyStroke.getKeyStroke('O', java.awt.Event.CTRL_MASK, false));
save.setAccelerator(KeyStroke.getKeyStroke('S', java.awt.Event.CTRL_MASK, false));
//edit(编辑)菜单项
JMenuItem back = new JMenuItem("撤消(U)");
JMenuItem rework = new JMenuItem("重做(R)");
JMenuItem cut = new JMenuItem("剪切(T)");
JMenuItem copy = new JMenuItem("复制(C)");
JMenuItem paste = new JMenuItem("粘贴(P)");
//为edit菜单添加菜单项
edit.add(back);
edit.addSeparator();
edit.add(rework);
edit.addSeparator();
edit.add(cut);
edit.addSeparator();
edit.add(copy);
edit.addSeparator();
edit.add(paste);
//find(查看)菜单项
JMenuItem tool = new JMenuItem("工具栏(T)");
JMenuItem state = new JMenuItem("状态栏(S)");
JMenuItem side = new JMenuItem("侧边栏(P)");
JMenuItem fullScreen = new JMenuItem("全屏(F)");
JMenu outstanding = new JMenu("突出显示模式(H)");
JCheckBoxMenuItem line = new JCheckBoxMenuItem("换行");
line.setState(true);
//为find添加菜单顶
find.add(tool);
find.addSeparator();
find.add(state);
find.addSeparator();
find.add(side);
find.addSeparator();
find.add(fullScreen);
find.addSeparator();
find.add(outstanding);
find.addSeparator();
find.add(line);
//outstanding(突出显示模式)菜单顶
JMenuItem text = new JMenuItem("纯文本");
JMenu source = new JMenu("源代码");
JMenu script = new JMenu("脚本");
JMenu sign = new JMenu("标记");
JMenu other = new JMenu("其他");
JMenu science = new JMenu("科学");
//为outstanding添加菜单项
outstanding.add(text);
outstanding.add(source);
outstanding.add(script);
outstanding.add(sign);
outstanding.add(other);
outstanding.add(science);
// 文本域
JScrollPane jsp = new JScrollPane();
final JTextArea jta = new JTextArea();
jta.setLineWrap(true);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jsp.getViewport().add(jta);
//右键,弹出菜单
final JPopupMenu jpmenu = new JPopupMenu();
JMenuItem ri_selectAll = new JMenuItem("全选");
JMenuItem ri_back = new JMenuItem("撤消");
JMenuItem ri_rework = new JMenuItem("重做");
JMenuItem ri_cut = new JMenuItem("剪切");
JMenuItem ri_copy = new JMenuItem("复制");
JMenuItem ri_paste = new JMenuItem("粘贴");
jpmenu.add(ri_selectAll);
jpmenu.addSeparator();
jpmenu.add(ri_back);
jpmenu.addSeparator();
jpmenu.add(ri_rework);
jpmenu.addSeparator();
jpmenu.add(ri_cut);
jpmenu.addSeparator();
jpmenu.add(ri_copy);
jpmenu.addSeparator();
jpmenu.add(ri_paste);
//添加右键监听
jta.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON3){
jpmenu.show(jta, e.getX(), e.getY());
}
}
});
/*
*右键功能
*
*/
//右键————》selectAll 全选
ri_selectAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jta.selectAll();
}
});
//右键————》cut 剪切
ri_cut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jta.cut();
}
});
//右键————》copy 复制
ri_copy.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jta.copy();
}
});
//右键————》paste 粘贴
ri_paste.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jta.paste();
}
});
//换行监听
line.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
switch(e.getStateChange()){
case ItemEvent.SELECTED://勾选状态
jta.setLineWrap(true);
break;
case ItemEvent.DESELECTED://未勾选状态
jta.setLineWrap(false);
break;
}
}
});
//文件————》打开 监听事件
open.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jfchooser = new JFileChooser();
int state = jfchooser.showOpenDialog(jf);
switch(state){
case JFileChooser.APPROVE_OPTION:
//读取文件
File file = jfchooser.getSelectedFile();
try {
FileReader fr = new FileReader(file);
BufferedReader bis = new BufferedReader(fr);
String ch = null;
while((ch = bis.readLine()) != null){
jta.append(ch);
}
bis.close();
fr.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
break;
}
}
});
//文件——————》 保存 监听事件
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jfchooser = new JFileChooser();
int state = jfchooser.showOpenDialog(jf);
switch(state){
case JFileChooser.APPROVE_OPTION:
//写入文件并保存
File file = jfchooser.getSelectedFile();
try {
FileOutputStream fis = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fis);
String content = jta.getText();
bos.write(content.getBytes());
bos.close();
fis.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
break;
}
}
});
//添加菜单栏到窗口
jf.setJMenuBar(mb);
jf.add(jsp);
//将文件,编辑,查看加入到菜单栏
mb.add(file);
mb.add(edit);
mb.add(find);
}
public static void main(String[] args) {
MenuDemo note = new MenuDemo();
note.menu();
}
}
为看起来容易看点,把全部的代码写在一块,不建议这么做
最好是把代码模块化,便于修改和维护,资源中有两个工程
一个是把所有代码写成一块的,就是上面贴出来 的代码 ,
另一个是模块化后的工程
资源下载:http://download.csdn.net/detail/zlqqhs/4878656