📄 notepad.java
字号:
closeAndSave();
System.exit(0);
}
});
ta.addMouseListener(
new MouseAdapter()
{
public void mouseReleased(MouseEvent me)
{
if (me.isPopupTrigger())
{
popupMenu.show(Notepad.this, me.getX()+10, me.getY()+80);
}
}
}
);
}
public void showMenu()
{
menuBar=new JMenuBar();
setJMenuBar(menuBar);
menu=new JMenu[5];
menuItem=new JMenuItem[menu.length][];
menu[0]=new JMenu("文件(F)");
menu[0].setMnemonic('F');
menu[1]=new JMenu("编辑(E)");
menu[1].setMnemonic('E');
menu[2]=new JMenu("格式(O)");
menu[2].setMnemonic('O');
menu[3]=new JMenu("查看(V)");
menu[3].setMnemonic('V');
menu[4]=new JMenu("帮助(H)");
menu[4].setMnemonic('H');
menuItem[0]=new JMenuItem[5];
menuItem[1]=new JMenuItem[7];
menuItem[2]=new JMenuItem[2];
menuItem[3]=new JMenuItem[1];
menuItem[4]=new JMenuItem[1];
menuItem[0][0]=new JMenuItem("新建(N)");
menuItem[0][0].setMnemonic('N');
menuItem[0][1]=new JMenuItem("打开(O) ...");
menuItem[0][1].setMnemonic('O');
menuItem[0][2]=new JMenuItem("保存(S)");
menuItem[0][2].setMnemonic('S');
menuItem[0][3]=new JMenuItem("另存为(A) ...");
menuItem[0][3].setMnemonic('A');
menuItem[0][4]=new JMenuItem("关闭(C)");
menuItem[0][4].setMnemonic('C');
menuItem[1][0]=new JMenuItem("剪切(X)");
menuItem[1][0].setMnemonic('X');
menuItem[1][1]=new JMenuItem("复制(C)");
menuItem[1][1].setMnemonic('C');
menuItem[1][2]=new JMenuItem("粘贴(P)");
menuItem[1][2].setMnemonic('P');
menuItem[1][3]=new JMenuItem("查找(F)");
menuItem[1][3].setMnemonic('F');
menuItem[1][4]=new JMenuItem("替换(R)");
menuItem[1][4].setMnemonic('R');
menuItem[1][5]=new JMenuItem("全选(A)");
menuItem[1][5].setMnemonic('A');
menuItem[1][6]=new JMenuItem("时间/日期(T)");
menuItem[1][6].setMnemonic('T');
menuItem[2][0]=new JCheckBoxMenuItem("自动换行(W)");
menuItem[2][0].setMnemonic('T');
menuItem[2][1]=new JMenuItem(" 字体...");
menuItem[2][1].setEnabled(false);
menuItem[3][0]=new JCheckBoxMenuItem("状态栏(S)", true);
menuItem[3][0].setMnemonic('S');
menuItem[4][0]=new JMenuItem("关于(A) ...");
menuItem[4][0].setMnemonic('S');
popupMenuItem=new JMenuItem[4];
popupMenuItem[0]=new JMenuItem("剪切(X)");
popupMenuItem[0].setMnemonic('X');
popupMenuItem[1]=new JMenuItem("复制(C)");
popupMenuItem[1].setMnemonic('C');
popupMenuItem[2]=new JMenuItem("粘贴(P)");
popupMenuItem[2].setMnemonic('P');
popupMenuItem[3]=new JMenuItem("全选(A)");
popupMenuItem[3].setMnemonic('A');
popupMenu=new JPopupMenu();
for(int i=0; i<menu.length; i++)
{
menuBar.add(menu[i]);
menu[i].setFont(defaultFont);
for (int j=0; j<menuItem[i].length; j++)
{
menu[i].add(menuItem[i][j]);
menuItem[i][j].addActionListener(this);
menuItem[i][j].setFont(defaultFont);
if (i==0 && j==3 || i==1 && j==2 || i==1 && j==4)
menu[i].addSeparator();
}
}
for (int i=0; i<popupMenuItem.length; i++)
{
popupMenu.add(popupMenuItem[i]);
popupMenuItem[i].addActionListener(this);
popupMenuItem[i].setFont(defaultFont);
if (i==2)
popupMenu.addSeparator();
}
}
public void readFile(File file)
{
ta.setText("");
try
{
BufferedReader in=new BufferedReader(new FileReader(file));
String read;
char[] readBuf=new char[20480];
int n=0;
while (true)
{
n=in.read(readBuf, 0, 20480);
if (n==-1)
break;
read=new String(readBuf, 0, n);
ta.append(read);
}
in.close();
ta.setCaretPosition(0);
}
catch (IOException ioe)
{
JOptionPane.showMessageDialog(null,
"I/O 错误:"+ioe+"。\n",
"打开失败",
JOptionPane.ERROR_MESSAGE);
}
}
public void saveFile(File file)
{
try
{
FileWriter fw_out=new FileWriter(file);
PrintWriter out=new PrintWriter(new BufferedWriter(fw_out));
String outData=ta.getText();
String[] outLine;
outLine=outData.split("\n");
for (int i=0; i<outLine.length; i++)
out.print(outLine[i]+"\r\n");
out.close();
}
catch (IOException ioe)
{
JOptionPane.showMessageDialog(null,
"I/O 错误:"+ioe+"。\n",
"打开失败",
JOptionPane.ERROR_MESSAGE);
}
}
public void open()
{
JFileChooser fc=new JFileChooser();
if (fc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION)
{
String _curFileName=fc.getSelectedFile().getAbsolutePath();
File file=new File(_curFileName);
if (file.exists())
{
curFileName=_curFileName;
File f=new File(curFileName);
setTitle(f.getName()+" - 记事本");
changed=false;
readFile(file);
}
else
JOptionPane.showMessageDialog(null,
file.getAbsolutePath()+"\n找不到文件。\n请检查所给的文件名是否正确。\n",
"打开失败",
JOptionPane.ERROR_MESSAGE);
}
}
public void save()
{
if (curFileName.equals(""))
{
saveAs();
}
else
{
File file=new File(curFileName);
saveFile(file);
changed=false;
}
}
public void saveAs()
{
JFileChooser fc=new JFileChooser();
fc.setDialogTitle("另存为");
if (fc.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
{
boolean overwrite=false;
String _curFileName=fc.getSelectedFile().getAbsolutePath();
File file=new File(_curFileName);
if (file.exists())
{
int exit;
exit=JOptionPane.showConfirmDialog(
this,
file.getAbsolutePath()+"已存在。\n要覆盖它吗? ",
"另存为",
JOptionPane.YES_NO_OPTION);
if (exit==JOptionPane.YES_OPTION)
overwrite=true;
}
else
overwrite=true;
if (overwrite)
{
changed=false;
saveFile(file);
curFileName=_curFileName;
File f=new File(curFileName);
setTitle(f.getName()+" - 记事本");
}
}
}
public void closeAndSave()
{
String fName;
if (changed)
{
if (curFileName.equals(""))
fName="无标题";
else
{
File f=new File(curFileName);
fName=f.getName();
}
int exit=JOptionPane.showConfirmDialog(
this,
" 文件 "+fName+" 的文字可能已经改变。\n\n 想保存文件吗?",
"记事本",
JOptionPane.YES_NO_CANCEL_OPTION
);
if (exit==JOptionPane.NO_OPTION)
System.exit(0);
else if (exit==JOptionPane.YES_OPTION)
save();
}
else
System.exit(0);
}
public void actionPerformed(ActionEvent ae)
{
if (ae.getSource()==menuItem[0][0])
{
ta.setText("");
curFileName="";
setTitle("无标题 - 记事本");
changed=false;
}
if (ae.getSource()==menuItem[0][1])
{
open();
}
if (ae.getSource()==menuItem[0][2])
{
save();
}
if (ae.getSource()==menuItem[0][3])
{
saveAs();
}
if (ae.getSource()==menuItem[0][4])
{
closeAndSave();
}
if (ae.getSource()==menuItem[1][0] || ae.getSource()==popupMenuItem[0])
{
ta.cut();
}
if (ae.getSource()==menuItem[1][1] || ae.getSource()==popupMenuItem[1])
{
ta.copy();
}
if (ae.getSource()==menuItem[1][2] || ae.getSource()==popupMenuItem[2])
{
ta.paste();
}
if (ae.getSource()==menuItem[1][3])
{
Searcher s=new Searcher(null, false, ta);
}
if (ae.getSource()==menuItem[1][4])
{
Replacer s=new Replacer(null, false, ta);
}
if (ae.getSource()==menuItem[1][5] || ae.getSource()==popupMenuItem[3])
{
ta.selectAll();
}
if (ae.getSource()==menuItem[1][6])
{
Date da=new Date();
int h, m, s;
h=da.getHours();
m=da.getMinutes();
s=da.getSeconds();
String res1=(h<10?"0":"")+h+":"+(m<10?"0":"")+m+":"+(s<10?"0":"")+s;
String res2=(da.getYear()+1900)+"-"+da.getMonth()+"-"+da.getDate();
int index=ta.getCaretPosition();
String str=ta.getText();
String strTemp=str.substring(0, index)+res1+" "+res2+str.substring((index), str.length());
ta.setText(strTemp);
ta.setCaretPosition(index);
}
if (ae.getSource()==menuItem[2][0])
{
if (ta.getLineWrap())
{
ta.setLineWrap(false);
menuItem[3][0].setEnabled(true);
lblStatus.setVisible(((JCheckBoxMenuItem)menuItem[3][0]).getState());
}
else
{
ta.setLineWrap(true);
lblStatus.setVisible(false);
menuItem[3][0].setEnabled(false);
}
}
if (ae.getSource()==menuItem[3][0])
{
if (lblStatus.isVisible())
{
lblStatus.setVisible(false);
}
else
{
menuItem[3][0].setText("状态栏");
lblStatus.setVisible(true);
}
}
if (ae.getSource()==menuItem[4][0])
{
JOptionPane.showMessageDialog(null,
"版本号:1.0\n版权:厦门大学软件学院 黄炜 @ 2005",
"关于 记事本",
JOptionPane.INFORMATION_MESSAGE);
}
}
public static void main(String[] args)
{
//设置界面为WindowsLookAndFeel
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception e) {
}
Notepad np=new Notepad();
np.setSize(500, 500);
np.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -