- package java实验九;
- import java.awt.*;
- import java.awt.event.*;
- import java.io.*;
- import javax.swing.*;
- public class NotePadDemo extends JFrame implements ActionListener{
- private JMenuItem jmiNew,jmiOpen,jmiSave,jmiExit,jmiAbout,jmiTopic,jmiCut,jmiCopy,jmiPaste,jmiUndo,jmialldo,jmiRedo,jmifind,jmirepalace;//打开的菜单名字
- private JTextArea jta=new JTextArea(); //文本域
- private JTextField ca,tad; //输入框
- private JLabel tidai=new JLabel("代替成:");
- private JLabel jlbStatus=new JLabel(); // 显示域
- private JButton buttonzao=new JButton();
- private JButton butttidai=new JButton();
- private JFileChooser chooser=new JFileChooser(); //对话框
- public NotePadDemo() {
- jta.setFont(new Font(null,0,15)); //设置文本域属性
- setTitle("记事本");
- JMenuBar mb=new JMenuBar(); //菜单栏
- setJMenuBar(mb); //设置mb菜单属性
- JMenu fileMenu=new JMenu("文件(F)");
- JMenu editMenu=new JMenu("编辑(E)");
- JMenu geshiMenu=new JMenu("格式(G)");
- JMenu helpMenu=new JMenu("关于(H)");
- fileMenu.setMnemonic('F'); //设置热键f
- editMenu.setMnemonic('E'); //设置热键f
- geshiMenu.setMnemonic('G'); //设置热键f
- helpMenu.setMnemonic('H'); //设置热键f
- mb.add(fileMenu);
- mb.add(editMenu);
- mb.add(geshiMenu);
- mb.add(helpMenu);
- fileMenu.add(jmiNew=new JMenuItem("新建"));
- fileMenu.add(jmiOpen=new JMenuItem("打开"));
- fileMenu.add(jmiSave=new JMenuItem("保存"));
- fileMenu.addSeparator(); //加入分割线
- fileMenu.add(jmiExit=new JMenuItem("退出"));
- editMenu.add(jmiCut=new JMenuItem("剪切 "));
- editMenu.add(jmiCopy=new JMenuItem("复制 "));
- editMenu.add(jmiPaste=new JMenuItem("粘贴 "));
- editMenu.add(jmifind=new JMenuItem("查找"));
- editMenu.add(jmirepalace=new JMenuItem("替代"));
- editMenu.addSeparator();
- editMenu.add(jmialldo=new JMenuItem("全选 "));
- helpMenu.add(jmiAbout=new JMenuItem("关于记事本"));
- jmiNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK)); //设置快捷
- jmiOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));
- jmiSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
- jmiExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,ActionEvent.CTRL_MASK));
- jmifind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,ActionEvent.CTRL_MASK));
- jmirepalace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,ActionEvent.CTRL_MASK));
- jmiCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
- jmialldo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK));
- jmiCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
- jmiPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
- chooser.setCurrentDirectory(new File(".")); //设置对话框的路径
- add(new JScrollPane(jta),BorderLayout.CENTER);
- add(jlbStatus,BorderLayout.PAGE_END);
- //注册事件
- jmiOpen.addActionListener(this); // 打开
- jmiNew.addActionListener(this);// 保存
- jmiSave.addActionListener(this);// 保存
- jmiAbout.addActionListener(this);// 关于
- jmiExit.addActionListener(this); // 退出
- jmialldo.addActionListener(this);// 全选
- jmiCut.addActionListener(this); // 剪切
- jmiCopy.addActionListener(this); //复制
- jmirepalace.addActionListener(this); //替代
- jmiPaste.addActionListener(this);//粘贴
- jmifind.addActionListener(this);
- setSize(600,400);
- setLocationRelativeTo(null);
- setVisible(true);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public void actionPerformed(ActionEvent e) { //设置执行事件
- if(e.getSource()==jmiOpen) {
- open();
- }else if(e.getSource()==jmiSave) {
- save();
- }else if(e.getSource()==jmiNew) {
- renew();
- }else if(e.getSource()==jmialldo) {
- jta.selectAll();
- }else if(e.getSource()==jmiCut) {
- jta.cut();
- }else if(e.getSource()==jmiPaste) {
- jta.paste();
- }else if(e.getSource()==jmiCopy) {
- jta.copy();
- }else if(e.getSource()==jmifind) {
- find();
- }else if(e.getSource()==buttonzao) {
- zao();
- }else if(e.getSource()==jmirepalace) {
- tida();
- }else if(e.getSource()==butttidai) {
- tidaiwenben();
- }else if(e.getSource()==jmiAbout)
- JOptionPane.showMessageDialog(this, "用java语言开放的记事本程序","关于记事本",JOptionPane.INFORMATION_MESSAGE);
- else if(e.getSource()==jmiExit)
- System.exit(0);
- }
- private void tidaiwenben() {
- String s=ca.getText(); //提取ca输入框内容
- String ss=tad.getText(); //提取tab输入框内容
- x = jta.getText().indexOf(s,x+1);
- if (x == -1) {
- JOptionPane.showConfirmDialog(null, "没找到: " + s,"查找结果",JOptionPane.CANCEL_OPTION);
- } else {
- jta.setSelectionStart(x);
- jta.setSelectionEnd(x + s.length());
- jta.replaceSelection(ss);
- }
- }
- private void tida() {
- JFrame frame=new JFrame("逐个替代");
- JPanel j1=new JPanel();
- JPanel j2=new JPanel();
- frame.setSize(300, 120);
- butttidai=new JButton("确定");
- j1.add(ca=new JTextField(12),BorderLayout.LINE_START);
- j1.add(tidai,BorderLayout.CENTER);
- j1.add(tad=new JTextField(12),BorderLayout.AFTER_LINE_ENDS);
- j1.add(butttidai);
- frame.add(j1);
- butttidai.addActionListener(this);
- frame.setVisible(true);
- frame.setLocationRelativeTo(null);
- }
- int x=-1;
- private void zao() {
- String s=ca.getText(); //提取输入框内容
- x = jta.getText().indexOf(s,x+1);
- if (x == -1) {
- JOptionPane.showConfirmDialog(null, "没找到: " + s,"查找结果",JOptionPane.CANCEL_OPTION);
- } else {
- jta.setSelectionStart(x);
- jta.setSelectionEnd(x + s.length());
- }
- }
- private void find() {
- JFrame frame=new JFrame("查找");
- JPanel j1=new JPanel();
- frame.setSize(300, 100);
- buttonzao=new JButton("查找");
- j1.add(ca=new JTextField(12));
- j1.add(buttonzao);
- frame.add(j1);
- buttonzao.addActionListener(this);
- frame.setVisible(true);
- frame.setLocationRelativeTo(null);
- }
- private void renew() {
- JFrame frame=new JFrame("新建记事本");
- JPanel panel1=new JPanel();
- JLabel renew1=new JLabel("是否保存文件?",JLabel.CENTER);
- JButton shi=new JButton("保存");
- JButton fou=new JButton("不保存");
- shi.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- save();
- jta.setText("");
- frame.dispose();
- }
- });
- fou.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- jta.setText("");
- frame.dispose();
- jlbStatus.setText("文件放弃保存");
- //jta.add(jlbStatus,BorderLayout.PAGE_END);
- }
- });
- frame.setSize(300, 100);
- panel1.add(shi);
- panel1.add(fou);
- frame.add(renew1,BorderLayout.CENTER);
- frame.add(panel1,BorderLayout.PAGE_END);
- frame.setVisible(true);
- frame.setLocationRelativeTo(null);
- }
- private void open() { //打开文件的方法
- if(chooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION) {
- File file=chooser.getSelectedFile(); //设置选择到的文件
- try {
- BufferedInputStream in=new BufferedInputStream(new FileInputStream(file)); //设置输入流
- byte[]b=new byte[in.available()]; //返回从该输入流中可以读取的字节数的估计值
- in.read(b,0,b.length);//read(byte[] b, int off, int len) 从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。
- jta.append(new String (b,0,b.length)); // 将给定的文本附加到文档的末尾。
- in.close();
- jlbStatus.setText("打开文件"+file.getName());
- this.setTitle(file.toString()+"-记事本");
- }catch(IOException ex) {
- jlbStatus.setText("打开文件错误:"+file.getName());
- }
- }
- }
- private void save() {
- if(chooser.showSaveDialog(this)==JFileChooser.APPROVE_OPTION) {
- File file=chooser.getSelectedFile();
- try {
- BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(file));
- byte[]b=(jta.getText()).getBytes();
- out.write(b,0,b.length);
- out.close();
- jlbStatus.setText("文件已经保存:"+file.getName());
- }
- catch(IOException ex) {
- jlbStatus.setText("保存文件错误:"+file.getName());
- }
- }
- }
- public static void main(String[] args) {
- try {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- } catch(Exception e) {}
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- new NotePadDemo();
- }
- });
- }
- }
运行:
总结:光标的操作一开始不清楚,查看了资料才知道怎么使用。另外,发现虚拟类中的变量不可以进行更改(加减乘除)?或许是我操作的问题,造成不小的麻烦~