记事本代码分为4个部分:
1.顶部点击可展开的菜单如何生成?
2.当点击了顶部菜单的某一个子菜单,在程序中如何判断点击了哪个子菜单?【正在写】
3.那个供你输入文字并且可以滚动的文本框如何生成?
4.点击了子菜单的各种操作是如何实现的【正在写】
#1.如何实现记事本中“编辑”菜单中的 剪切,复制,粘贴,删除,全选 功能
请点击超链接,学习每个部分,并完成文章最后的作业。
以下是记事本代码:
1 package swing;//记事本源代码 2 import java.awt.*; 3 import java.awt.event.*; 4 import java.io.*; 5 6 import javax.swing.*; 7 8 public class Run implements ActionListener{ 9 private JFrame frame=new JFrame("新记事本"); 10 private JTextArea jta=new JTextArea(); 11 private String result=""; 12 private boolean flag=true; 13 private File f; 14 private JButton jb=new JButton("开始");//开始菜单在运行的时候没看到啊???在哪里 15 private JTextField jtf=new JTextField(15); 16 private JTextField jt=new JTextField(15); 17 private JButton jbt=new JButton("替换为"); 18 private JButton jba=new JButton("全部替换"); 19 private Icon ic=new ImageIcon("D:\\java课堂笔记\\GUI\\11.gif"); 20 //这是它设置的默认路劲???可是我电脑上只有 CEF盘啊 21 private String value; 22 private int start=0; 23 private JFrame jf=new JFrame("查找"); 24 private JFrame jfc=new JFrame("替换"); 25 26 @Override 27 public void actionPerformed(ActionEvent e) { 28 String comm=e.getActionCommand(); 29 System.out.println("comm="+comm); 30 if("新建".equals(comm)){//"新建".equals(comm)什么意思,后面的都不懂了??? 31 if(!(frame.getTitle().equals("新记事本"))){ 32 if(!flag){ 33 write(); 34 newNew(); 35 }else{ 36 JFileChooser jfc=new JFileChooser("D:\\java课堂笔记"); 37 int returnVal = jfc.showDialog(null,"保存为"); 38 if(returnVal == JFileChooser.APPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性 39 f=jfc.getSelectedFile(); 40 flag=false; 41 write(); 42 } 43 } 44 }else if(!(jta.getText().isEmpty())){ 45 JFileChooser jfc=new JFileChooser("D:\\java课堂笔记"); 46 int returnVal = jfc.showDialog(null,"保存为"); 47 if(returnVal == JFileChooser.APPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性 48 f=jfc.getSelectedFile(); 49 flag=false; 50 write(); 51 newNew(); 52 } 53 }else{ 54 newNew(); 55 } 56 }else if("打开".equals(comm)){ 57 JFileChooser jfc=new JFileChooser("D:\\java课堂笔记"); 58 jfc.setDialogType(JFileChooser.OPEN_DIALOG); 59 int returnVal = jfc.showOpenDialog(null); 60 if(returnVal == JFileChooser.APPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性 61 f=jfc.getSelectedFile(); 62 frame.setTitle(f.getName()); 63 result=read(); 64 flag=false; 65 value=result; 66 jta.setText(result); 67 } 68 }else if("保存".equals(comm)){ 69 JFileChooser jfc=new JFileChooser("D:\\java课堂笔记"); 70 if(flag){ 71 int returnVal = jfc.showDialog(null,"保存为"); 72 if(returnVal == JFileChooser.APPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性 73 f=jfc.getSelectedFile(); 74 flag=false; 75 write(); 76 } 77 }else{ 78 write(); 79 } 80 }else if("另存".equals(comm)){ 81 JFileChooser jfc=new JFileChooser("D:\\java课堂笔记"); 82 int returnVal = jfc.showDialog(null,"另存"); 83 if(returnVal == JFileChooser.APPROVE_OPTION) {//选择文件后再执行下面的语句,保证了程序的健壮性 84 f=jfc.getSelectedFile(); 85 write(); 86 } 87 }else if("退出".equals(comm)){ 88 System.exit(0); 89 }else if("撤销".equals(comm)){ 90 jta.setText(value); 91 }else if("剪切".equals(comm)){ 92 value=jta.getText(); 93 jta.cut(); 94 }else if("复制".equals(comm)){ 95 jta.copy(); 96 }else if("粘贴".equals(comm)){ 97 value=jta.getText(); 98 jta.paste(); 99 }else if("删除".equals(comm)){ 100 value=jta.getText(); 101 jta.replaceSelection(null); 102 }else if("全选".equals(comm)){ 103 jta.selectAll(); 104 }else if("查找".equals(comm)){ 105 value=jta.getText(); 106 jf.add(jtf,BorderLayout.CENTER); 107 jf.add(jb,BorderLayout.SOUTH); 108 109 jf.setLocation(300,300); 110 jf.pack(); 111 jf.setVisible(true); 112 jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 113 }else if("替换".equals(comm)){ 114 value=jta.getText(); 115 GridLayout gl=new GridLayout(3,3); 116 JLabel jl1=new JLabel("查找内容:"); 117 JLabel jl2=new JLabel("替换为:"); 118 jfc.setLayout(gl); 119 jfc.add(jl1); 120 jfc.add(jtf); 121 jfc.add(jb); 122 jfc.add(jl2); 123 jfc.add(jt); 124 jfc.add(jbt); 125 JLabel jl3=new JLabel(); 126 JLabel jl4=new JLabel(); 127 jfc.add(jl3); 128 jfc.add(jl4); 129 jfc.add(jba); 130 131 jfc.setLocation(300,300); 132 jfc.pack(); 133 jfc.setVisible(true); 134 jfc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 135 }else if("版本".equals(comm)){ 136 JDialog jd=new JDialog(frame,"关于对话框"); 137 jd.setSize(200,200); 138 JLabel l=new JLabel("哈哈哈哈哈哈哈哈哈哈呵呵呵呵呵呵呵呵呵呵呵呵呵"); 139 jd.add(l,BorderLayout.CENTER); 140 jd.setLocation(100,200); 141 jd.setSize(300,300); 142 jd.setVisible(true); 143 // jd.pack(); 144 jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 145 }else if("开始".equals(comm)||"下一个".equals(comm)){ 146 String temp=jtf.getText(); 147 int s=value.indexOf(temp,start); 148 if(value.indexOf(temp,start)!=-1){ 149 jta.setSelectionStart(s); 150 jta.setSelectionEnd(s+temp.length()); 151 jta.setSelectedTextColor(Color.GREEN); 152 start=s+1; 153 jb.setText("下一个"); 154 // value=value.substring(s+temp.length());//不能截取字串 155 }else { 156 JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic); 157 jf.dispose(); 158 } 159 }else if("替换为".equals(comm)){ 160 String temp=jtf.getText(); 161 int s=value.indexOf(temp,start); 162 if(value.indexOf(temp,start)!=-1){ 163 jta.setSelectionStart(s); 164 jta.setSelectionEnd(s+temp.length()); 165 jta.setSelectedTextColor(Color.GREEN); 166 start=s+1; 167 jta.replaceSelection(jt.getText()); 168 }else { 169 JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic); 170 jf.dispose(); 171 } 172 }else if("全部替换".equals(comm)){ 173 String temp=jta.getText(); 174 temp=temp.replaceAll(jtf.getText(), jt.getText()); 175 jta.setText(temp); 176 177 } 178 } 179 public String read(){ 180 String temp=""; 181 try { 182 FileInputStream fis = new FileInputStream(f.getAbsolutePath()); 183 byte[] b=new byte[1024]; 184 while(true){ 185 int num=fis.read(b); 186 if(num==-1)break; 187 temp=temp+new String(b,0,num); 188 } 189 fis.close(); 190 } catch (Exception e1) { 191 e1.printStackTrace(); 192 } 193 return temp; 194 } 195 196 public void write(){ 197 try { 198 FileOutputStream fos=new FileOutputStream(f); 199 fos.write(jta.getText().getBytes()); 200 fos.close(); 201 } catch (Exception e) { 202 e.printStackTrace(); 203 } 204 } 205 public void newNew(){ 206 frame.dispose(); 207 new Run(); 208 flag=true; 209 } 210 public Run(){ 211 JMenuBar jmb=new JMenuBar(); 212 String[] menuLab={"文件","编辑","帮助"}; 213 String[][] menuItemLab={{"新建","打开","保存","另存","退出"}, 214 {"撤销","剪切","复制","粘贴","删除","全选","查找","替换"}, 215 {"版本"}}; 216 for(int i=0;i<menuLab.length;i++){ 217 JMenu menu=new JMenu(menuLab[i]); 218 jmb.add(menu); 219 for(int j=0;j<menuItemLab[i].length;j++){ 220 JMenuItem jmi=new JMenuItem(menuItemLab[i][j]); 221 menu.add(jmi); 222 jmi.addActionListener(this); 223 } 224 } 225 frame.setJMenuBar(jmb); 226 jta.setLineWrap(true);//自动换行 227 JScrollPane jsp=new JScrollPane(jta);//滚动窗口面板 228 frame.add(jsp); 229 230 jb.addActionListener(this); 231 jbt.addActionListener(this); 232 jba.addActionListener(this); 233 234 frame.setLocation(200,50); 235 frame.setSize(620,660); 236 frame.setVisible(true); 237 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 238 } 239 public static void main(String[] args) { 240 new Run(); 241 } 242 }