java文本编辑器5
1 package peng_jun; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 import javax.swing.*; 7 8 import java.io.*; 9 10 import javax.swing.filechooser.*; 11 12 import java.awt.datatransfer.*; 13 14 public class Text4 extends JFrame { 15 public static void main(String[] args) throws Exception { 16 new Text4(); 17 } 18 19 JTextArea area = new JTextArea();;// 文本域 20 String name = null;// 文件名 21 String board = null; 22 Clipboard cb;// 系统粘贴板 此类实现一种使用剪切/复制/粘贴操作传输数据的机制 23 24 JMenu font = new JMenu("字体"); 25 JMenuItem bold = new JMenuItem("加粗"); 26 JMenuItem italics = new JMenuItem("斜体"); 27 JMenu size = new JMenu("字号"); 28 JMenuItem size_18 = new JMenuItem("18"); 29 JMenuItem size_19 = new JMenuItem("19"); 30 JMenuItem size_20 = new JMenuItem("20"); 31 JMenuItem size_21 = new JMenuItem("21"); 32 JMenu color = new JMenu("颜色"); 33 JMenuItem red = new JMenuItem("红色"); 34 JMenuItem blue = new JMenuItem("蓝色"); 35 36 JMenu file = new JMenu("文件");// 定义“文件”菜单项 37 JMenuItem rebuild = new JMenuItem("新建"); 38 JMenuItem save = new JMenuItem("保存"); 39 JMenuItem open = new JMenuItem("打开"); 40 JMenuItem anotherSave = new JMenuItem("另存为"); 41 JMenuItem clear = new JMenuItem("清除"); 42 JMenuItem close = new JMenuItem("退出"); 43 44 JMenu edit = new JMenu("编辑");// 定义“编辑”菜单项 45 JMenuItem cut = new JMenuItem("剪切"); 46 JMenuItem copy = new JMenuItem("复制"); 47 JMenuItem plaster = new JMenuItem("粘贴"); 48 JMenuItem all = new JMenuItem("全选"); 49 JMenuItem replice = new JMenuItem("替换"); 50 JMenuItem check = new JMenuItem("查找"); 51 52 JMenu help = new JMenu("帮助");// 定义“帮助”菜单项 53 JMenuItem about = new JMenuItem("关于"); 54 55 Toolkit kit = Toolkit.getDefaultToolkit();// Toolkit获得本机系统的屏幕的参数 56 JMenuBar jmb = new JMenuBar();// 创建菜单条 57 58 Text4() throws Exception {// 构造函数 59 setTitle("记事本"); 60 61 // 设置快捷键 62 bold.setAccelerator(KeyStroke.getKeyStroke("ctrl B")); 63 italics.setAccelerator(KeyStroke.getKeyStroke("ctrl I")); 64 rebuild.setAccelerator(KeyStroke.getKeyStroke("ctrl N")); 65 save.setAccelerator(KeyStroke.getKeyStroke("ctrl S")); 66 copy.setAccelerator(KeyStroke.getKeyStroke("ctrl C")); 67 open.setAccelerator(KeyStroke.getKeyStroke("ctrl O")); 68 cut.setAccelerator(KeyStroke.getKeyStroke("ctrl X")); 69 plaster.setAccelerator(KeyStroke.getKeyStroke("ctrl V")); 70 all.setAccelerator(KeyStroke.getKeyStroke("ctrl A")); 71 replice.setAccelerator(KeyStroke.getKeyStroke("ctrl H")); 72 check.setAccelerator(KeyStroke.getKeyStroke("ctrl F")); 73 74 75 add(jmb); 76 setJMenuBar(jmb);// 设置菜单条 77 add(area); 78 file.add(rebuild); 79 file.add(save); 80 file.add(open); 81 file.add(anotherSave); 82 file.addSeparator(); 83 file.add(clear); 84 file.add(close); 85 // JScrollPane scroldPane=new JScrollPane(area); //设置滚动轴 86 // add(scroldPane); 87 88 edit.add(cut); 89 edit.add(copy); 90 edit.add(plaster); 91 edit.add(all); 92 edit.addSeparator(); 93 edit.add(replice); 94 edit.add(check); 95 96 font.add(bold); 97 font.add(italics); 98 size.add(size_18); 99 size.add(size_19); 100 size.add(size_20); 101 size.add(size_21); 102 color.add(red); 103 color.add(blue); 104 font.add(size); 105 font.add(color); 106 107 help.add(about); 108 // 添加事件 109 clear.addActionListener(new HandleAct()); 110 close.addActionListener(new HandleAct()); 111 bold.addActionListener(new HandleAct()); 112 italics.addActionListener(new HandleAct()); 113 size_18.addActionListener(new HandleAct()); 114 size_19.addActionListener(new HandleAct()); 115 size_20.addActionListener(new HandleAct()); 116 size_21.addActionListener(new HandleAct()); 117 red.addActionListener(new HandleAct()); 118 blue.addActionListener(new HandleAct()); 119 replice.addActionListener(new HandleAct()); 120 check.addActionListener(new HandleAct()); 121 122 jmb.add(file); 123 jmb.add(edit); 124 jmb.add(font); 125 jmb.add(help); 126 setSize(600, 400);// 大小信息 127 // setLocation(300, 200);// 文本框位置 128 setVisible(true); 129 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 130 131 cb = Toolkit.getDefaultToolkit().getSystemClipboard();// 调用系统剪贴板 132 save.addActionListener(new ActionListener() { 133 public void actionPerformed(ActionEvent e) { 134 try { 135 saveText(); 136 } catch (Exception ex) { 137 } 138 } 139 }); 140 open.addActionListener(new ActionListener() { 141 public void actionPerformed(ActionEvent e) { 142 try { 143 openText(); 144 } catch (Exception ex) { 145 } 146 } 147 }); 148 rebuild.addActionListener(new ActionListener() { 149 public void actionPerformed(ActionEvent e) { 150 try { 151 area.setText(""); 152 name = null; 153 } catch (Exception ex) { 154 } 155 } 156 }); 157 anotherSave.addActionListener(new ActionListener() { 158 public void actionPerformed(ActionEvent e) { 159 anotherSaveText(); 160 } 161 }); 162 163 size_18.addActionListener(new ActionListener() { 164 165 @Override 166 public void actionPerformed(ActionEvent e) { 167 // TODO 自动生成的方法存根 168 Font oldF = area.getFont();// 获取当前字体 169 String name = oldF.getName();// 获取当前字体的名字 170 area.setFont(new Font(name, oldF.getStyle(), 18)); 171 } 172 }); 173 174 cut.addActionListener(new ActionListener() // 剪切 175 { 176 public void actionPerformed(ActionEvent e) { 177 board = area.getSelectedText(); 178 cb.setContents(new StringSelection(board), null); 179 area.replaceRange("", area.getSelectionStart(), 180 area.getSelectionEnd()); 181 } 182 }); 183 copy.addActionListener(new ActionListener() // 复制 184 { 185 public void actionPerformed(ActionEvent e) { 186 board = area.getSelectedText(); 187 cb.setContents(new StringSelection(board), null); 188 } 189 }); 190 plaster.addActionListener(new ActionListener() // 粘贴 191 { 192 public void actionPerformed(ActionEvent e) { 193 try { 194 Transferable content = cb.getContents(null); 195 String st = (String) content 196 .getTransferData(DataFlavor.stringFlavor); 197 area.replaceRange(st, area.getSelectionStart(), 198 area.getSelectionEnd()); 199 } catch (Exception ex) { 200 } 201 } 202 }); 203 all.addActionListener(new ActionListener() // 全选 204 { 205 public void actionPerformed(ActionEvent e) { 206 area.setSelectionStart(0); 207 area.setSelectionEnd(area.getText().length()); 208 } 209 }); 210 211 about.addActionListener(new ActionListener() {// 帮助 212 public void actionPerformed(ActionEvent e) { 213 JFrame frame = new JFrame("关于"); 214 frame.setSize(250, 150); 215 frame.setLocation(400, 300); 216 JTextArea area1 = new JTextArea("java简易文本编辑器开发人员:" + '\n' 217 + "彭军军 201321091103," + '\n' + "鲍静瑶201321091080," 218 + '\n' + "刘瑾 201321091081."); 219 frame.add(area1); 220 frame.setVisible(true); 221 } 222 }); 223 } 224 225 public void openText() // 打开 226 { 227 /* 228 * 在选择文件方法中,首先创建JFileChooser文件选择器, 229 * 使用JFileChooser类的setFileFilter()方法创建文件扩展名过滤器,再使用JFileChooser类 230 * 的setFileSelectionMode()方法设置文件选择模式为文件, 231 * 通过JFileChooser类的showOpenDialog()方法显示文件打开对话框,确定用户按下打开按钮, 232 * 而非取消按钮后,通过JFileChooser类的getSelectedFile()方法获取用户选择的文件对象, 233 * 使用JTextField类的setText()方法显示文件信息到文本框。 234 */ 235 JFileChooser chooser = new JFileChooser();//创建JFileChooser文件选择器 236 FileNameExtensionFilter filter = new FileNameExtensionFilter("Files", 237 "txt", "java","html","css","js");//文件过滤器 238 chooser.setFileFilter(filter); 239 chooser.setCurrentDirectory(new File(".")); 240 int result = chooser.showOpenDialog(Text4.this);//打开当前文件夹 241 if (result == JFileChooser.APPROVE_OPTION) {//用户按下了yes 242 name = chooser.getSelectedFile().getPath();//获取文件对象 243 setTitle(name); 244 try { 245 BufferedReader in = new BufferedReader(new FileReader(name)); 246 String line = null; 247 String datas = "";//保存数据 248 //用while循环来判断读取是否结束 此处用的是行读取 249 while ((line = in.readLine()) != null) { 250 if (datas == "") { 251 datas = datas + line; 252 } else { 253 datas = datas + "\n" + line; 254 } 255 } 256 area.setText(datas); 257 in.close(); 258 } catch (Exception ex) { 259 } 260 } 261 } 262 263 public void saveText() // 保存 264 { 265 if (name == null) { 266 JFileChooser chooser = new JFileChooser(); 267 FileNameExtensionFilter filter = new FileNameExtensionFilter( 268 "Files", "txt", "java");// 限制扩展名,只能杜渠道txt和java类型的文件 269 chooser.setFileFilter(filter); 270 chooser.setCurrentDirectory(new File("."));//设置当前目录 271 int result = chooser.showSaveDialog(Text4.this); 272 if (result == JFileChooser.APPROVE_OPTION) {//用户按下了yes 273 name = chooser.getSelectedFile().getPath(); 274 try { 275 OutputStream out = new FileOutputStream(name); 276 String datas = area.getText(); 277 out.write(datas.getBytes()); 278 out.close(); 279 } catch (Exception ex) { 280 } 281 } 282 } 283 } 284 285 public void anotherSaveText() // 另存为 286 { 287 JFileChooser chooser = new JFileChooser(); 288 FileNameExtensionFilter filter = new FileNameExtensionFilter("Files", 289 "txt", "java","html","js","css"); 290 chooser.setFileFilter(filter); 291 chooser.setCurrentDirectory(new File(".")); 292 int result = chooser.showSaveDialog(Text4.this); 293 if (result == JFileChooser.APPROVE_OPTION) {//用户按下了yes 294 name = chooser.getSelectedFile().getPath(); 295 try { 296 OutputStream out = new FileOutputStream(name); 297 String datas = area.getText(); 298 out.write(datas.getBytes()); 299 out.close(); 300 } catch (Exception ex) { 301 } 302 } 303 } 304 305 class HandleAct implements ActionListener {// 内部类 306 307 public void actionPerformed(ActionEvent e) { 308 // TODO 自动生成的方法存根 309 Font oldF = area.getFont();// 获取当前字体 310 String name = oldF.getName();// 获取当前字体的名字 311 int size = oldF.getSize();// 当前字体的大小 312 if (e.getSource() == size_18) 313 area.setFont(new Font(name, oldF.getStyle(), 18)); 314 else if (e.getSource() == size_19) 315 area.setFont(new Font(name, oldF.getStyle(), 19)); 316 else if (e.getSource() == size_20) 317 area.setFont(new Font(name, oldF.getStyle(), 20)); 318 else if (e.getSource() == size_21) 319 area.setFont(new Font(name, oldF.getStyle(), 21)); 320 321 if (e.getSource() == red) { 322 area.setForeground(Color.red);// 设置文字颜色 323 } else if (e.getSource() == blue) { 324 area.setForeground(Color.blue);// 设置文字颜色 325 } 326 327 if (e.getSource() == bold) { 328 area.setFont(new Font(name, Font.BOLD, size)); 329 } else if (e.getSource() == italics) { 330 area.setFont(new Font(name, Font.ITALIC, size)); 331 } 332 333 if (e.getSource() == clear) { 334 area.setText(" "); 335 } else if (e.getSource() == close) { 336 System.exit(0); 337 } 338 339 if (e.getSource() == replice) { 340 //替换弹出框的布局 341 JPanel replacePanel = new JPanel(); 342 JLabel lookupLabel = new JLabel("要替换的内容"); 343 JTextField inputText = new JTextField(10); 344 JLabel replaceLabel = new JLabel("替换为"); 345 JTextField changetoText = new JTextField(10); 346 replacePanel.add(lookupLabel); 347 replacePanel.add(inputText); 348 replacePanel.add(replaceLabel); 349 replacePanel.add(changetoText); 350 //布局结束 351 JOptionPane.showMessageDialog(null, replacePanel); 352 String text = area.getText();//获得整个文本内容 353 String changeText = text.replace(inputText.getText(), 354 changetoText.getText());//启用replace功能函数 355 area.setText(changeText); 356 } 357 else if (e.getSource() == check) { 358 //查找弹出框的布局 359 JPanel swapPanel=new JPanel(); 360 JLabel seekLabel=new JLabel("要查找的内容"); 361 JTextField inputText=new JTextField(20); 362 swapPanel.add(seekLabel); 363 swapPanel.add(inputText); 364 JOptionPane.showMessageDialog(null,swapPanel); 365 //布局结束 366 String text=area.getText();//获得整个文本内容 367 int fromIndex=area.getCaretPosition();//取得当前的光标位置 368 int lastfromIndex=text.lastIndexOf(inputText.getText(),fromIndex);//获得查找后的位置 369 area.setCaretPosition(lastfromIndex); 370 area.moveCaretPosition(lastfromIndex+inputText.getText().length());//使查找到的子字符串显示出来 371 } 372 373 } 374 375 } 376 377 }