📄 notepad.java
字号:
/*
* @(#)NotePad.java 1.0 07/06/18
* @auther:shya
* @version:1.0
*/
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
/**
主框架类
*/
public class NotePad
{
MainFrame main = new MainFrame("NotePad");
public static void main(String[] args)
{
NotePad notePad = new NotePad();
}
}
class MainFrame extends JFrame
{
private Dimension dm;
private JFrame frame = new JFrame() ;
private MenuBars menuBar = new MenuBars() ;
private TextPane[] textPane = new TextPane[N] ;
private JTabbedPane tab = new JTabbedPane() ;
private static String findStr;
private static String sourStr;
private static int curSearch ;
private static int N = 10;
private static int count = 0 ;
private static int current ;
private static int NUM = 5 ;
MainFrame(String title)
{
dm = Toolkit.getDefaultToolkit().getScreenSize();
textPane[0] = new TextPane();
tab.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
tab.add(textPane[0],"untitled-1") ;
tab.addMouseListener(new CloseTab());
frame.add(tab) ;
frame.setJMenuBar(menuBar) ;
frame.setTitle(title) ;
frame.setVisible(true) ;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(dm.width/6,dm.height/6,2*dm.width/3,2*dm.height/3);
}
public class CloseTab extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
current = tab.getSelectedIndex();
if(e.getClickCount() == 2)
{
tab.remove(current);
count--;
}
}
}
/**
菜单栏类
*/
class MenuBars extends JMenuBar
{
public JMenu file = new JMenu("File");
private JMenu edit = new JMenu("Edit");
private JMenu view = new JMenu("View");
private JMenu tool = new JMenu("Tool");
private JMenu help = new JMenu("Help");
private JMenuItem news = new JMenuItem("New") ;
private JMenuItem open = new JMenuItem("Open") ;
private JMenuItem save = new JMenuItem("Save") ;
private JMenuItem saveto= new JMenuItem("Save as");
private JMenuItem exit = new JMenuItem("Exit") ;
private JMenuItem copy = new JMenuItem("Copy") ;
private JMenuItem paste = new JMenuItem("Paste") ;
private JMenuItem cut = new JMenuItem("Cut") ;
// private JMenuItem del = new JMenuItem("Del") ;
private JMenuItem find = new JMenuItem("Find") ;
private JMenuItem next = new JMenuItem("Next") ;
private JMenuItem replac= new JMenuItem("Replace");
private JMenuItem font = new JMenuItem("Font") ;
private JMenuItem fore = new JMenuItem("FontColor") ;
private JMenuItem back = new JMenuItem("Background");
private JRadioButtonMenuItem wrap = new JRadioButtonMenuItem("AutoWrap") ;
private JMenuItem blank = new JMenuItem("NewWindow");
private JMenuItem count = new JMenuItem("WordCount");
private JMenuItem cmd = new JMenuItem("Command") ;
private JMenuItem calc = new JMenuItem("Calc") ;
private JMenuItem option = new JMenuItem("Option") ;
private JMenuItem topi = new JMenuItem("Topical") ;
private JMenuItem about = new JMenuItem("About") ;
MenuBars()
{
/*
设置快捷键
*/
news.setAccelerator(KeyStroke.getKeyStroke(new Character('N'),2)) ;
open.setAccelerator(KeyStroke.getKeyStroke(new Character('O'),2)) ;
save.setAccelerator(KeyStroke.getKeyStroke(new Character('S'),2)) ;
saveto.setAccelerator(KeyStroke.getKeyStroke(new Character('S'),3)) ;
exit.setAccelerator(KeyStroke.getKeyStroke(new Character('X'),8)) ;
copy.setAccelerator(KeyStroke.getKeyStroke(new Character('C'),2)) ;
paste.setAccelerator(KeyStroke.getKeyStroke(new Character('V'),2)) ;
cut.setAccelerator(KeyStroke.getKeyStroke(new Character('X'),2)) ;
// del.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0)) ;
find.setAccelerator(KeyStroke.getKeyStroke(new Character('F'),2)) ;
next.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0)) ;
replac.setAccelerator(KeyStroke.getKeyStroke(new Character('R'),2)) ;
wrap.setAccelerator(KeyStroke.getKeyStroke(new Character('W'),2)) ;
font.setAccelerator(KeyStroke.getKeyStroke(new Character('T'),2)) ;
blank.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0)) ;
option.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,0)) ;
about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0)) ;
/*
设置键盘助记符
*/
file.setMnemonic('F') ;
edit.setMnemonic('E') ;
view.setMnemonic('V') ;
tool.setMnemonic('T') ;
help.setMnemonic('H') ;
news.setMnemonic('N') ;
open.setMnemonic('O') ;
save.setMnemonic('S') ;
saveto.setMnemonic('A') ;
exit.setMnemonic('X') ;
copy.setMnemonic('C') ;
paste.setMnemonic('P') ;
cut.setMnemonic('U') ;
// del.setMnemonic('D') ;
find.setMnemonic('F') ;
next.setMnemonic('N') ;
replac.setMnemonic('R') ;
font.setMnemonic('F') ;
fore.setMnemonic('C') ;
back.setMnemonic('B') ;
wrap.setMnemonic('W') ;
blank.setMnemonic('W') ;
count.setMnemonic('C') ;
cmd.setMnemonic('M') ;
option.setMnemonic('O') ;
topi.setMnemonic('T') ;
about.setMnemonic('A') ;
saveto.setDisplayedMnemonicIndex(5);
blank.setDisplayedMnemonicIndex(3) ;
/*
添加菜单项
*/
file.add(news) ;
file.add(open) ;
file.addSeparator() ;
file.add(save) ;
file.add(saveto) ;
file.addSeparator() ;
file.add(exit) ;
edit.add(copy) ;
edit.add(paste) ;
edit.add(cut) ;
// edit.add(del) ;
edit.addSeparator() ;
edit.add(find) ;
edit.add(next) ;
edit.add(replac) ;
view.add(font) ;
view.add(fore) ;
view.add(back) ;
view.addSeparator() ;
view.add(wrap) ;
tool.add(blank) ;
tool.add(count) ;
tool.addSeparator() ;
tool.add(calc) ;
tool.add(cmd) ;
tool.addSeparator() ;
tool.add(option) ;
help.add(topi) ;
help.add(about) ;
/*
添加菜单项事件监听
*/
news.addActionListener(new FileAction()) ;
open.addActionListener(new FileAction()) ;
save.addActionListener(new FileAction()) ;
saveto.addActionListener(new FileAction());
exit.addActionListener(new FileAction()) ;
copy.addActionListener(new EditAction()) ;
paste.addActionListener(new EditAction()) ;
cut.addActionListener(new EditAction()) ;
// del.addActionListener(new EditAction()) ;
find.addActionListener(new EditAction()) ;
next.addActionListener(new EditAction()) ;
replac.addActionListener(new EditAction());
font.addActionListener(new ViewAction()) ;
fore.addActionListener(new ViewAction()) ;
back.addActionListener(new ViewAction()) ;
wrap.addActionListener(new ViewAction()) ;
blank.addActionListener(new ToolAction()) ;
count.addActionListener(new ToolAction()) ;
cmd.addActionListener(new ToolAction()) ;
calc.addActionListener(new ToolAction()) ;
option.addActionListener(new ToolAction());
topi.addActionListener(new HelpAction()) ;
about.addActionListener(new HelpAction()) ;
/*
添加菜单
*/
add(file);
add(edit);
add(view);
add(tool);
add(help);
}
}
/**
文本区域类
*/
class TextPane extends JPanel
{
private JTextArea[] text = new JTextArea[N] ;
private JScrollPane[] scoll = new JScrollPane[N];
private Font font = new Font("楷体",1,18) ;
private Color back = Color.white ;
private Color fore = Color.black ;
private boolean wrap = false ;
TextPane()
{
text[count] = new JTextArea();
scoll[count] = new JScrollPane(text[count]);
text[count].getDocument().addDocumentListener(new TextListener());
text[count].setFont(font) ;
text[count].setBackground(back);
text[count].setForeground(fore);
text[count].setLineWrap(wrap) ;
setLayout(new BorderLayout());
add(scoll[count],"Center") ;
}
/*
获取文本区域
*/
public JTextArea getArea()
{
return text[current];
}
}
/**
file菜单监听器
*/
class FileAction implements ActionListener
{
private int returnVar;
private String str ;
private char[] buffer;
private FileReader reader;
private FileWriter writer;
private File[] files = new File[N];
private JFileChooser chooser = new JFileChooser();
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand() == "New")
{
count++;
if(count < 10)
{
textPane[count] = new TextPane() ;
tab.add(textPane[count],"untitled-"+(count+1)) ;
}
}
if(e.getActionCommand() == "Open")
{
returnVar = chooser.showOpenDialog(frame);
if(returnVar == JFileChooser.APPROVE_OPTION)
{
files[current] = chooser.getSelectedFile();
tab.setTitleAt(current,files[current].getName());
buffer = new char[(int)files[current].length()];
try
{
reader = new FileReader(files[current]);
while(reader.read(buffer) != -1);
str = new String(buffer);
textPane[current].getArea().setText(str);
reader.close();
}
catch(IOException ie)
{
System.err.println(ie.toString());
}
if(NUM == 5)
{
menuBar.file.insertSeparator(NUM++);
menuBar.file.add(new JMenuItem(files[current].toString()),NUM) ;
}
else
menuBar.file.add(new JMenuItem(files[current].toString()),NUM++);
}
}
if(e.getActionCommand() == "Save")
{
if(files[current] == null)
{
returnVar = chooser.showSaveDialog(frame);
if(returnVar == JFileChooser.APPROVE_OPTION)
{
files[current] = chooser.getSelectedFile();
tab.setTitleAt(current,files[current].getName());
str = textPane[current].getArea().getText();
try
{
writer = new FileWriter(files[current]);
writer.write(str);
writer.close();
tab.setTitleAt(current,tab.getTitleAt(current).replace('*','\0').trim());
}
catch(IOException ie)
{
System.err.println(ie.toString());
}
}
}
else
{
tab.setTitleAt(current,files[current].getName());
str = textPane[current].getArea().getText();
try
{
writer = new FileWriter(files[current]);
writer.write(str);
writer.close();
tab.setTitleAt(current,tab.getTitleAt(current).replace('*','\0').trim());
}
catch(IOException ie)
{
System.err.println(ie.toString());
}
}
}
if(e.getActionCommand() == "Save as")
{
chooser.setDialogTitle("save as...");
returnVar = chooser.showSaveDialog(frame);
if(returnVar == JFileChooser.APPROVE_OPTION)
{
files[current] = chooser.getSelectedFile();
tab.setTitleAt(current,files[current].getName());
str = textPane[current].getArea().getText();
try
{
writer = new FileWriter(files[current]);
writer.write(str);
writer.close();
tab.setTitleAt(current,tab.getTitleAt(current).replace('*','\0').trim());
}
catch(IOException ie)
{
System.err.println(ie.toString());
}
}
}
if(e.getActionCommand() == "Exit")
{
System.exit(0);
}
}
}
/**
edit菜单监听器
*/
class EditAction implements ActionListener
{
FindOption findOption = new FindOption();
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand() == "Copy")
{
textPane[current].getArea().copy();
}
if(e.getActionCommand() == "Paste")
{
textPane[current].getArea().paste();
}
if(e.getActionCommand() == "Cut")
{
textPane[current].getArea().cut();
}
// if(e.getActionCommand() == "Del")
// {
// textPane[current].getArea().getSelectedText().remove();.
// }
if(e.getActionCommand() == "Find")
{
findOption.setVisible(true);
}
if(e.getActionCommand() == "Next")
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -