JPad 1.00(20081213)

  1. /**
  2. *@authort0nsha(liaodunxia{at}gmail.com)
  3. *@version1.00(20081213)
  4. */
  5. importjavax.print.attribute.HashPrintRequestAttributeSet;
  6. importjavax.print.attribute.PrintRequestAttributeSet;
  7. importjavax.swing.ButtonGroup;
  8. importjavax.swing.JButton;
  9. importjavax.swing.JDialog;
  10. importjavax.swing.JFileChooser;
  11. importjavax.swing.JFrame;
  12. importjavax.swing.JLabel;
  13. importjavax.swing.JMenu;
  14. importjavax.swing.JMenuBar;
  15. importjavax.swing.JMenuItem;
  16. importjavax.swing.JOptionPane;
  17. importjavax.swing.JRadioButton;
  18. importjavax.swing.JScrollPane;
  19. importjavax.swing.JTextArea;
  20. importjavax.swing.JTextField;
  21. importjavax.swing.KeyStroke;
  22. importjavax.swing.UIManager;
  23. importjavax.swing.text.BadLocationException;
  24. importjavax.swing.undo.UndoManager;
  25. importjava.awt.BorderLayout;
  26. importjava.awt.Checkbox;
  27. importjava.awt.Container;
  28. importjava.awt.Dimension;
  29. importjava.awt.FlowLayout;
  30. importjava.awt.Font;
  31. importjava.awt.Frame;
  32. importjava.awt.Graphics;
  33. importjava.awt.Graphics2D;
  34. importjava.awt.GraphicsEnvironment;
  35. importjava.awt.GridLayout;
  36. importjava.awt.List;
  37. importjava.awt.Panel;
  38. importjava.awt.Toolkit;
  39. importjava.awt.event.ActionEvent;
  40. importjava.awt.event.ActionListener;
  41. importjava.awt.event.InputEvent;
  42. importjava.awt.event.KeyEvent;
  43. importjava.awt.event.WindowEvent;
  44. importjava.awt.event.WindowListener;
  45. importjava.awt.print.PageFormat;
  46. importjava.awt.print.Printable;
  47. importjava.awt.print.PrinterException;
  48. importjava.awt.print.PrinterJob;
  49. importjava.io.File;
  50. importjava.io.FileNotFoundException;
  51. importjava.io.FileReader;
  52. importjava.io.FileWriter;
  53. importjava.io.IOException;
  54. importjava.util.Calendar;
  55. publicclassJPad{
  56. JFrameframe=newJFrame();
  57. JMenuBarmenuBar=newJMenuBar();
  58. //JTextPanetextpane=newJTextPane();
  59. JTextAreatextArea=newJTextArea();
  60. Stringfilepath="";
  61. Stringfilename="Untitled";
  62. booleandirty=false;
  63. StringsavedContent="";
  64. Stringjpad="-JPad";
  65. UndoManagerundoManager=newUndoManager();
  66. StatusBarstatusBar=newStatusBar();
  67. booleanshowStatusBar=true;
  68. classStatusBarextendsJLabel{
  69. /**CreatesanewinstanceofStatusBar*/
  70. publicStatusBar(){
  71. super();
  72. super.setPreferredSize(newDimension(100,16));
  73. setMessage(Calendar.getInstance().getTime().toString());
  74. }
  75. publicvoidsetMessage(Stringmessage){
  76. setText(""+message);
  77. }
  78. }
  79. classDaemonextendsThread{
  80. Daemon(){
  81. setDaemon(true);
  82. start();
  83. }
  84. publicvoidrun(){
  85. while(true){
  86. try{
  87. sleep(100);
  88. }catch(InterruptedExceptione){
  89. thrownewRuntimeException(e);
  90. }
  91. statusBar.setMessage(Calendar.getInstance().getTime()
  92. .toString());
  93. //if(savedContent!=textArea.getText()){
  94. if(!savedContent.equals(textArea.getText())){
  95. frame.setTitle("*"+filename+jpad);
  96. dirty=true;
  97. }else{
  98. frame.setTitle(filename+jpad);
  99. dirty=false;
  100. }
  101. }
  102. }
  103. }
  104. publicclassPrintDialogimplementsPrintable{
  105. publicintprint(Graphicsg,PageFormatpf,intpage)
  106. throwsPrinterException{
  107. if(page>0){/*Wehaveonlyonepage,and'page'iszero-based*/
  108. returnNO_SUCH_PAGE;
  109. }
  110. /*
  111. *User(0,0)istypicallyoutsidetheimageablearea,sowemust
  112. *translatebytheXandYvaluesinthePageFormattoavoid
  113. *clipping
  114. */
  115. Graphics2Dg2d=(Graphics2D)g;
  116. g2d.translate(pf.getImageableX(),pf.getImageableY());
  117. /*Nowweperformourrendering*/
  118. g.drawString(textArea.getText(),100,100);
  119. /*tellthecallerthatthispageispartoftheprinteddocument*/
  120. returnPAGE_EXISTS;
  121. }
  122. }
  123. classBrowserControl{
  124. /**
  125. *Displayafileinthesystembrowser.Ifyouwanttodisplayafile,
  126. *youmustincludetheabsolutepathname.
  127. *
  128. *@paramurl
  129. *thefile'surl(theurlmuststartwitheither"http://"
  130. *or"file://").
  131. */
  132. publicvoiddisplayURL(Stringurl){
  133. booleanwindows=isWindowsPlatform();
  134. Stringcmd=null;
  135. try{
  136. if(windows){
  137. //cmd='rundll32url.dll,FileProtocolHandlerhttp://...'
  138. cmd=WIN_PATH+""+WIN_FLAG+""+url;
  139. Processp=Runtime.getRuntime().exec(cmd);
  140. }else{
  141. //UnderUnix,Netscapehastoberunningforthe"-remote"
  142. //commandtowork.So,wetrysendingthecommandand
  143. //checkforanexitvalue.Iftheexitcommandis0,
  144. //itworked,otherwiseweneedtostartthebrowser.
  145. //cmd='netscape-remote
  146. //openURL(http://www.javaworld.com)'
  147. cmd=UNIX_PATH+""+UNIX_FLAG+"("+url+")";
  148. Processp=Runtime.getRuntime().exec(cmd);
  149. try{
  150. //waitforexitcode--ifit's0,commandworked,
  151. //otherwiseweneedtostartthebrowserup.
  152. intexitCode=p.waitFor();
  153. if(exitCode!=0){
  154. //Commandfailed,startupthebrowser
  155. //cmd='netscapehttp://www.javaworld.com'
  156. cmd=UNIX_PATH+""+url;
  157. p=Runtime.getRuntime().exec(cmd);
  158. }
  159. }catch(InterruptedExceptionx){
  160. System.err
  161. .println("Errorbringingupbrowser,cmd='"
  162. +cmd+"'");
  163. System.err.println("Caught:"+x);
  164. }
  165. }
  166. }catch(IOExceptionx){
  167. //couldn'texecbrowser
  168. System.err.println("Couldnotinvokebrowser,command="
  169. +cmd);
  170. System.err.println("Caught:"+x);
  171. }
  172. }
  173. /**
  174. *TrytodeterminewhetherthisapplicationisrunningunderWindowsor
  175. *someotherplatformbyexamingthe"os.name"property.
  176. *
  177. *@returntrueifthisapplicationisrunningunderaWindowsOS
  178. */
  179. publicbooleanisWindowsPlatform(){
  180. Stringos=System.getProperty("os.name");
  181. if(os!=null&&os.startsWith(WIN_ID))
  182. returntrue;
  183. else
  184. returnfalse;
  185. }
  186. //Usedtoidentifythewindowsplatform.
  187. privatestaticfinalStringWIN_ID="Windows";
  188. //Thedefaultsystembrowserunderwindows.
  189. privatestaticfinalStringWIN_PATH="rundll32";
  190. //Theflagtodisplayaurl.
  191. privatestaticfinalStringWIN_FLAG="url.dll,FileProtocolHandler";
  192. //Thedefaultbrowserunderunix.
  193. privatestaticfinalStringUNIX_PATH="netscape";
  194. //Theflagtodisplayaurl.
  195. privatestaticfinalStringUNIX_FLAG="-remoteopenURL";
  196. }
  197. classFontChooserextendsJDialog{
  198. //Results:
  199. /**Thefonttheuserhaschosen*/
  200. protectedFontresultFont;
  201. /**Theresultingfontname*/
  202. protectedStringresultName;
  203. /**Theresultingfontsize*/
  204. protectedintresultSize;
  205. /**Theresultingboldness*/
  206. protectedbooleanisBold;
  207. /**Theresultingitalicness*/
  208. protectedbooleanisItalic;
  209. //Workingfields
  210. /**Displaytext*/
  211. protectedStringdisplayText="AaBbCcYyZz";
  212. /**ThelistofFonts*/
  213. protectedStringfontList[];
  214. /**Thefontnamechooser*/
  215. protectedListfontNameChoice;
  216. /**Thefontsizechooser*/
  217. protectedListfontSizeChoice;
  218. /**Theboldanditalicchoosers*/
  219. Checkboxbold,italic;
  220. /**Thelistoffontsizes*/
  221. protectedStringfontSizes[]={"8","10","11","12","14","16",
  222. "18","20","24","30","36","40","48","60","72"};
  223. /**Theindexofthedefaultsize(e.g.,14point==4)*/
  224. protectedstaticfinalintDEFAULT_SIZE=4;
  225. /**
  226. *Thedisplayarea.UseaJLabelastheAWTlabeldoesn'talwayshonor
  227. *setFont()inatimelyfashion:-)
  228. */
  229. protectedJLabelpreviewArea;
  230. /**
  231. *ConstructaFontChooser--Setstitleandgetsarrayoffontsonthe
  232. *system.BuildsaGUItolettheuserchooseonefontatonesize.
  233. */
  234. publicFontChooser(Framef){
  235. super(f,"FontChooser",true);
  236. Containercp=getContentPane();
  237. Paneltop=newPanel();
  238. top.setLayout(newFlowLayout());
  239. fontNameChoice=newList(8);
  240. top.add(fontNameChoice);
  241. Toolkittoolkit=Toolkit.getDefaultToolkit();
  242. //ForJDK1.1:returnsabout10names(Serif,SansSerif,etc.)
  243. //fontList=toolkit.getFontList();
  244. //ForJDK1.2:amuchlongerlist;mostofthenamesthatcome
  245. //withyourOS(e.g.,Arial),plustheSun/Javaones(Lucida,
  246. //LucidaBright,LucidaSans...)
  247. fontList=GraphicsEnvironment.getLocalGraphicsEnvironment()
  248. .getAvailableFontFamilyNames();
  249. for(inti=0;i<fontList.length;i++)
  250. fontNameChoice.add(fontList[i]);
  251. fontNameChoice.select(0);
  252. fontSizeChoice=newList(8);
  253. top.add(fontSizeChoice);
  254. for(inti=0;i<fontSizes.length;i++)
  255. fontSizeChoice.add(fontSizes[i]);
  256. fontSizeChoice.select(DEFAULT_SIZE);
  257. cp.add(top,BorderLayout.NORTH);
  258. Panelattrs=newPanel();
  259. top.add(attrs);
  260. attrs.setLayout(newGridLayout(0,1));
  261. attrs.add(bold=newCheckbox("Bold",false));
  262. attrs.add(italic=newCheckbox("Italic",false));
  263. previewArea=newJLabel(displayText,JLabel.CENTER);
  264. previewArea.setSize(200,50);
  265. cp.add(previewArea,BorderLayout.CENTER);
  266. Panelbot=newPanel();
  267. JButtonokButton=newJButton("Apply");
  268. bot.add(okButton);
  269. okButton.addActionListener(newActionListener(){
  270. publicvoidactionPerformed(ActionEvente){
  271. previewFont();
  272. dispose();
  273. setVisible(false);
  274. }
  275. });
  276. JButtonpvButton=newJButton("Preview");
  277. bot.add(pvButton);
  278. pvButton.addActionListener(newActionListener(){
  279. publicvoidactionPerformed(ActionEvente){
  280. previewFont();
  281. }
  282. });
  283. JButtoncanButton=newJButton("Cancel");
  284. bot.add(canButton);
  285. canButton.addActionListener(newActionListener(){
  286. publicvoidactionPerformed(ActionEvente){
  287. //Setallvaluestonull.Better:restoreprevious.
  288. resultFont=null;
  289. resultName=null;
  290. resultSize=0;
  291. isBold=false;
  292. isItalic=false;
  293. dispose();
  294. setVisible(false);
  295. }
  296. });
  297. cp.add(bot,BorderLayout.SOUTH);
  298. previewFont();//ensureviewisuptodate!
  299. pack();
  300. setLocation(100,100);
  301. }
  302. /**
  303. *Calledfromtheactionhandlerstogetthefontinfo,buildafont,
  304. *andsetit.
  305. */
  306. protectedvoidpreviewFont(){
  307. resultName=fontNameChoice.getSelectedItem();
  308. StringresultSizeName=fontSizeChoice.getSelectedItem();
  309. intresultSize=Integer.parseInt(resultSizeName);
  310. isBold=bold.getState();
  311. isItalic=italic.getState();
  312. intattrs=Font.PLAIN;
  313. if(isBold)
  314. attrs=Font.BOLD;
  315. if(isItalic)
  316. attrs|=Font.ITALIC;
  317. resultFont=newFont(resultName,attrs,resultSize);
  318. //System.out.println("resultName="+resultName+";"+
  319. //"resultFont="+resultFont);
  320. previewArea.setFont(resultFont);
  321. pack();//ensureDialogisbigenough.
  322. }
  323. /**Retrievetheselectedfontname.*/
  324. publicStringgetSelectedName(){
  325. returnresultName;
  326. }
  327. /**Retrievetheselectedsize*/
  328. publicintgetSelectedSize(){
  329. returnresultSize;
  330. }
  331. /**Retrievetheselectedfont,ornull*/
  332. publicFontgetSelectedFont(){
  333. returnresultFont;
  334. }
  335. }
  336. classFindReplaceextendsJDialog{
  337. JLabellabelFindWhat=newJLabel("Findwhat:");
  338. JLabellabelReplaceWith=newJLabel("Repalcewith:");
  339. JTextFieldtextFieldFind=newJTextField();
  340. JTextFieldtextFieldReplace=newJTextField();
  341. JButtonfind=newJButton("FindNext");
  342. JRadioButtonforward=newJRadioButton("Forward");
  343. JRadioButtonbackward=newJRadioButton("Backward");
  344. GridLayoutgridLayout=newGridLayout(4,3);
  345. JButtoncancel=newJButton("Cancel");
  346. ButtonGroupbuttonGroup=newButtonGroup();
  347. CheckboxcaseSensitive=newCheckbox("Casesensitive");
  348. JButtonreplace=newJButton("Replace");
  349. intselectionStart=textArea.getCaretPosition();
  350. intselectionEnd=textArea.getCaretPosition();
  351. FindReplace(Frameowner,Stringtitle,booleanmodal){
  352. super(owner,title,modal);
  353. this.setSize(400,120);
  354. Containercp=this.getContentPane();
  355. cp.setLayout(gridLayout);
  356. buttonGroup.add(backward);
  357. buttonGroup.add(forward);
  358. cp.add(labelFindWhat);
  359. cp.add(textFieldFind);
  360. cp.add(find);
  361. cp.add(labelReplaceWith);
  362. cp.add(textFieldReplace);
  363. cp.add(replace);
  364. cp.add(backward);
  365. cp.add(forward);
  366. cp.add(cancel);
  367. cp.add(caseSensitive);
  368. pack();
  369. forward.setSelected(true);
  370. cancel.addActionListener(newActionListener(){
  371. publicvoidactionPerformed(ActionEventae){
  372. FindReplace.this.setVisible(false);
  373. }
  374. });
  375. find.addActionListener(newActionListener(){
  376. publicvoidactionPerformed(ActionEventae){
  377. intfindLen=textFieldFind.getText().length();
  378. inttextLen=textArea.getText().length();
  379. intselectionStart=textArea.getCaretPosition();
  380. intselectionEnd=textArea.getCaretPosition();
  381. System.out.println("selectionEnd="+selectionEnd
  382. +",selectionEnd="+selectionEnd);
  383. if(caseSensitive.getState()==true){
  384. if(forward.isSelected()){
  385. while((selectionStart+=findLen)<=(textLen-findLen)){
  386. try{
  387. if(textArea.getText(selectionStart,
  388. findLen).equals(
  389. textFieldFind.getText())){
  390. selectionEnd=selectionStart+findLen;
  391. textArea.select(selectionStart,
  392. selectionEnd);
  393. break;
  394. }
  395. }catch(BadLocationExceptione){
  396. //TODOAuto-generatedcatchblock
  397. e.printStackTrace();
  398. }
  399. }
  400. }elseif(backward.isSelected()){
  401. while((selectionEnd-=findLen)>=findLen){
  402. try{
  403. selectionStart=selectionEnd-findLen;
  404. if(textArea.getText(selectionStart,
  405. findLen).equals(
  406. textFieldFind.getText())){
  407. textArea.select(selectionStart,
  408. selectionEnd);
  409. break;
  410. }
  411. }catch(BadLocationExceptione){
  412. //TODOAuto-generatedcatchblock
  413. e.printStackTrace();
  414. }
  415. }
  416. }
  417. }elseif(caseSensitive.getState()==false){
  418. if(forward.isSelected()){
  419. while((selectionStart+=findLen)<=(textLen-findLen)){
  420. try{
  421. if(textArea.getText(selectionStart,
  422. findLen).toLowerCase().equals(
  423. textFieldFind.getText()
  424. .toLowerCase())){
  425. selectionEnd=selectionStart+findLen;
  426. textArea.select(selectionStart,
  427. selectionEnd);
  428. break;
  429. }
  430. }catch(BadLocationExceptione){
  431. //TODOAuto-generatedcatchblock
  432. e.printStackTrace();
  433. }
  434. }
  435. }elseif(backward.isSelected()){
  436. while((selectionEnd-=findLen)>=findLen){
  437. try{
  438. selectionStart=selectionEnd-findLen;
  439. if(textArea.getText(selectionStart,
  440. findLen).toLowerCase().equals(
  441. textFieldFind.getText()
  442. .toLowerCase())){
  443. textArea.select(selectionStart,
  444. selectionEnd);
  445. break;
  446. }
  447. }catch(BadLocationExceptione){
  448. //TODOAuto-generatedcatchblock
  449. e.printStackTrace();
  450. }
  451. }
  452. }
  453. }
  454. if((selectionStart>(textArea.getText().length()-findLen))
  455. ||(selectionEnd<findLen)){
  456. JOptionPane.showMessageDialog(FindReplace.this,
  457. "Cannotfind/""+textFieldFind.getText()
  458. +"/"");
  459. }
  460. }
  461. });
  462. replace.addActionListener(newActionListener(){
  463. publicvoidactionPerformed(ActionEventae){
  464. textArea.replaceSelection(textFieldReplace.getText());
  465. }
  466. });
  467. }
  468. }
  469. booleanaskSaved(){
  470. booleanret=false;
  471. if(dirty){
  472. intoption=JOptionPane.showConfirmDialog(frame,
  473. "Contenthasbeenchanged,doyouwanttosave?");
  474. if(option==JOptionPane.YES_OPTION){
  475. saveAs(false);
  476. ret=true;
  477. }elseif(option==JOptionPane.NO_OPTION){
  478. ret=true;
  479. }
  480. }else{
  481. ret=true;
  482. }
  483. returnret;
  484. }
  485. voidsaveAs(booleanisSaveAs){
  486. if(isSaveAs){
  487. JFileChooserchooser=newJFileChooser();
  488. intreturnVal=chooser.showSaveDialog(frame);
  489. if(returnVal==JFileChooser.APPROVE_OPTION){
  490. filename=chooser.getSelectedFile().getName();
  491. filepath=chooser.getSelectedFile().getPath();
  492. try{
  493. FileWriterwriter=newFileWriter(filepath);
  494. writer.write(textArea.getText());
  495. writer.close();
  496. savedContent=textArea.getText();
  497. }catch(IOExceptione){
  498. //TODOAuto-generatedcatchblock
  499. e.printStackTrace();
  500. }
  501. }
  502. }else{
  503. if(filepath.length()!=0){
  504. try{
  505. FileWriterwriter=newFileWriter(filepath);
  506. writer.write(textArea.getText());
  507. writer.close();
  508. savedContent=textArea.getText();
  509. }catch(IOExceptione){
  510. //TODOAuto-generatedcatchblock
  511. e.printStackTrace();
  512. }
  513. }else{
  514. JFileChooserchooser=newJFileChooser();
  515. intreturnVal=chooser.showSaveDialog(frame);
  516. if(returnVal==JFileChooser.APPROVE_OPTION){
  517. filename=chooser.getSelectedFile().getName();
  518. filepath=chooser.getSelectedFile().getPath();
  519. try{
  520. FileWriterwriter=newFileWriter(filepath);
  521. writer.write(textArea.getText());
  522. writer.close();
  523. savedContent=textArea.getText();
  524. }catch(IOExceptione){
  525. //TODOAuto-generatedcatchblock
  526. e.printStackTrace();
  527. }
  528. }
  529. }
  530. }
  531. frame.setTitle(filename+jpad);
  532. }
  533. voidopen(){
  534. JFileChooserchooser=newJFileChooser();
  535. intreturnVal=chooser.showOpenDialog(frame);
  536. if(returnVal==JFileChooser.APPROVE_OPTION){
  537. filepath=chooser.getSelectedFile().getPath();
  538. filename=chooser.getSelectedFile().getName();
  539. try{
  540. intoffset=0;
  541. intlength=(int)(newFile(filepath)).length();
  542. char[]cbuf=newchar[length];
  543. FileReaderreader=newFileReader(filepath);
  544. while(reader.ready()){
  545. reader.read(cbuf,offset,length);
  546. }
  547. reader.close();
  548. textArea.setText(newString(cbuf));
  549. savedContent=newString(cbuf);
  550. }catch(FileNotFoundExceptione){
  551. //TODOAuto-generatedcatchblock
  552. e.printStackTrace();
  553. }catch(IOExceptione){
  554. //TODOAuto-generatedcatchblock
  555. e.printStackTrace();
  556. }
  557. }
  558. frame.setTitle(filename+jpad);
  559. }
  560. voidjnew(){
  561. savedContent="";
  562. textArea.setText("");
  563. filename="Untitled";
  564. frame.setTitle(filename+jpad);
  565. }
  566. classFrameLimplementsWindowListener{
  567. @Override
  568. publicvoidwindowActivated(WindowEvente){
  569. //TODOAuto-generatedmethodstub
  570. }
  571. @Override
  572. publicvoidwindowClosed(WindowEvente){
  573. //TODOAuto-generatedmethodstub
  574. }
  575. @Override
  576. publicvoidwindowClosing(WindowEvente){
  577. //TODOAuto-generatedmethodstub
  578. if(dirty){
  579. if(askSaved()){
  580. System.exit(0);
  581. }
  582. }else{
  583. System.exit(0);
  584. }
  585. }
  586. @Override
  587. publicvoidwindowDeactivated(WindowEvente){
  588. //TODOAuto-generatedmethodstub
  589. }
  590. @Override
  591. publicvoidwindowDeiconified(WindowEvente){
  592. //TODOAuto-generatedmethodstub
  593. }
  594. @Override
  595. publicvoidwindowIconified(WindowEvente){
  596. //TODOAuto-generatedmethodstub
  597. }
  598. @Override
  599. publicvoidwindowOpened(WindowEvente){
  600. //TODOAuto-generatedmethodstub
  601. }
  602. }
  603. publicJPad(){
  604. newDaemon();
  605. textArea.setText("");
  606. frame.setTitle(filename+jpad);
  607. frame.setSize(640,480);
  608. //addclosehandle
  609. frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  610. frame.addWindowListener(newFrameL());
  611. //addmenufileMenu
  612. JMenufileMenu=newJMenu("File");
  613. fileMenu.setMnemonic('F');//make'F'underlined.
  614. menuBar.add(fileMenu);
  615. //addmenuitemfileMenu-->new
  616. JMenuItemfileNew=newJMenuItem("New",'N');
  617. fileNew.setAccelerator(KeyStroke.getKeyStroke('N',
  618. InputEvent.CTRL_MASK,true));
  619. fileNew.addActionListener(newActionListener(){
  620. publicvoidactionPerformed(ActionEventae){
  621. //JOptionPane.showMessageDialog(null,"fileMenunew");
  622. if(askSaved()){
  623. jnew();
  624. }
  625. }
  626. });
  627. fileMenu.add(fileNew);
  628. //addmenuitemfileMenu-->open
  629. JMenuItemfileOpen=newJMenuItem("Open...",'O');
  630. fileOpen.setAccelerator(KeyStroke.getKeyStroke('O',
  631. InputEvent.CTRL_MASK,true));
  632. fileOpen.addActionListener(newActionListener(){
  633. publicvoidactionPerformed(ActionEventae){
  634. //JOptionPane.showMessageDialog(null,"fileMenuopen");
  635. if(askSaved()){
  636. open();
  637. }
  638. }
  639. });
  640. fileMenu.add(fileOpen);
  641. //addmenuitemfileMenu-->save
  642. JMenuItemfileSave=newJMenuItem("Save",'S');
  643. fileSave.setAccelerator(KeyStroke.getKeyStroke('S',
  644. InputEvent.CTRL_MASK,true));
  645. fileSave.addActionListener(newActionListener(){
  646. publicvoidactionPerformed(ActionEventae){
  647. //JOptionPane.showMessageDialog(null,"fileMenusave");
  648. saveAs(false);
  649. }
  650. });
  651. fileMenu.add(fileSave);
  652. //addmenuitemfileMenu-->saveas
  653. JMenuItemfileSaveAs=newJMenuItem("SaveAs...",'A');
  654. fileSaveAs.addActionListener(newActionListener(){
  655. publicvoidactionPerformed(ActionEventae){
  656. //JOptionPane.showMessageDialog(null,"fileMenusaveas");
  657. saveAs(true);
  658. }
  659. });
  660. fileMenu.add(fileSaveAs);
  661. //addmenuitemfileMenu-->separator
  662. fileMenu.addSeparator();
  663. //addmenuitemfileMenu-->print
  664. JMenuItemfilePrint=newJMenuItem("Print...",'P');
  665. filePrint.setAccelerator(KeyStroke.getKeyStroke('P',
  666. InputEvent.CTRL_MASK,true));
  667. filePrint.addActionListener(newActionListener(){
  668. publicvoidactionPerformed(ActionEventae){
  669. //JOptionPane.showMessageDialog(null,"fileMenuprint");
  670. try{
  671. Stringcn=UIManager.getSystemLookAndFeelClassName();
  672. UIManager.setLookAndFeel(cn);//UsethenativeL&F
  673. }catch(Exceptioncnf){
  674. }
  675. PrinterJobjob=PrinterJob.getPrinterJob();
  676. PrintRequestAttributeSetaset=newHashPrintRequestAttributeSet();
  677. PageFormatpf=job.pageDialog(aset);
  678. job.setPrintable(newPrintDialog(),pf);
  679. booleanok=job.printDialog(aset);
  680. if(ok){
  681. try{
  682. job.print(aset);
  683. }catch(PrinterExceptionex){
  684. /*Thejobdidnotsuccessfullycomplete*/
  685. }
  686. }
  687. }
  688. });
  689. fileMenu.add(filePrint);
  690. //addmenuitemfileMenu-->separator
  691. fileMenu.addSeparator();
  692. //addmenuitemfileMenu-->exit
  693. JMenuItemfileExit=newJMenuItem("Exit",'X');
  694. fileExit.addActionListener(newActionListener(){
  695. publicvoidactionPerformed(ActionEventae){
  696. //JOptionPane.showMessageDialog(null,"fileMenuexit");
  697. if(askSaved()){
  698. System.exit(0);
  699. }
  700. }
  701. });
  702. fileMenu.add(fileExit);
  703. //addmenuedit
  704. JMenueditMenu=newJMenu("Edit");
  705. editMenu.setMnemonic('E');
  706. menuBar.add(editMenu);
  707. //addmenuitemedit-->undotyping
  708. JMenuItemeditUndoTyping=newJMenuItem("UndoTyping",'U');
  709. editUndoTyping.setAccelerator(KeyStroke.getKeyStroke('Z',
  710. InputEvent.CTRL_MASK,true));
  711. editUndoTyping.addActionListener(newActionListener(){
  712. publicvoidactionPerformed(ActionEventae){
  713. if(undoManager.canUndo()){
  714. undoManager.undo();
  715. }
  716. }
  717. });
  718. editMenu.add(editUndoTyping);
  719. //addmenuitemedit-->separator
  720. editMenu.addSeparator();
  721. //addmenuitemedit-->cut
  722. JMenuItemeditCut=newJMenuItem("Cut",'T');
  723. editCut.setAccelerator(KeyStroke.getKeyStroke('X',
  724. InputEvent.CTRL_MASK,true));
  725. editCut.addActionListener(newActionListener(){
  726. publicvoidactionPerformed(ActionEventae){
  727. textArea.cut();
  728. }
  729. });
  730. editMenu.add(editCut);
  731. //addmenuitemedit-->copy
  732. JMenuItemeditCopy=newJMenuItem("Copy",'C');
  733. editCopy.setAccelerator(KeyStroke.getKeyStroke('C',
  734. InputEvent.CTRL_MASK,true));
  735. editCopy.addActionListener(newActionListener(){
  736. publicvoidactionPerformed(ActionEventae){
  737. textArea.copy();
  738. }
  739. });
  740. editMenu.add(editCopy);
  741. //addmenuitemedit-->paste
  742. JMenuItemeditPaste=newJMenuItem("Paste",'P');
  743. editPaste.setAccelerator(KeyStroke.getKeyStroke('V',
  744. InputEvent.CTRL_MASK,true));
  745. editPaste.addActionListener(newActionListener(){
  746. publicvoidactionPerformed(ActionEventae){
  747. textArea.paste();
  748. }
  749. });
  750. editMenu.add(editPaste);
  751. //addmenuitemedit-->delete
  752. JMenuItemeditDelete=newJMenuItem("Delete",'L');
  753. editDelete
  754. .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
  755. editDelete.addActionListener(newActionListener(){
  756. publicvoidactionPerformed(ActionEventae){
  757. textArea.replaceSelection(null);
  758. }
  759. });
  760. editMenu.add(editDelete);
  761. //addmenuitemedit-->separator
  762. editMenu.addSeparator();
  763. //addmenuitemedit-->find
  764. JMenuItemeditFind=newJMenuItem("Find/Replace...",'F');
  765. editFind.setAccelerator(KeyStroke.getKeyStroke('F',
  766. InputEvent.CTRL_MASK,true));
  767. editFind.addActionListener(newActionListener(){
  768. publicvoidactionPerformed(ActionEventae){
  769. //JOptionPane.showMessageDialog(null,"editfind");
  770. FindReplacefindReplace=newFindReplace(frame,"Find",false);
  771. findReplace.setVisible(true);
  772. }
  773. });
  774. editMenu.add(editFind);
  775. //addmenuitemedit-->goto
  776. JMenuItemeditGoto=newJMenuItem("GoTo...",'G');
  777. editGoto.setAccelerator(KeyStroke.getKeyStroke('G',
  778. InputEvent.CTRL_MASK,true));
  779. editGoto.addActionListener(newActionListener(){
  780. publicvoidactionPerformed(ActionEventae){
  781. if(!textArea.getLineWrap()){
  782. Strings=JOptionPane.showInputDialog(null,
  783. "Linenumber:","Gotothefollowingrow",
  784. JOptionPane.QUESTION_MESSAGE);
  785. //pressCancelwillraiseaNullPointerException
  786. if(s!=null){
  787. try{
  788. inti=Integer.parseInt(s);
  789. if(i>textArea.getLineCount()){
  790. JOptionPane.showMessageDialog(null,
  791. "Rowoutofrange.","JPad-GoTo",
  792. JOptionPane.NO_OPTION);
  793. }else{
  794. textArea.setCaretPosition(textArea.getText()
  795. .indexOf("/n",i-1)+1);
  796. }
  797. }catch(NumberFormatExceptionnfe){
  798. JOptionPane.showMessageDialog(null,
  799. "InvalidNumber!");
  800. }
  801. }
  802. }else{
  803. JOptionPane.showMessageDialog(null,
  804. "Pleaseturnoffautowrapfirst!");
  805. }
  806. }
  807. });
  808. editMenu.add(editGoto);
  809. //addmenuitemseparator
  810. editMenu.addSeparator();
  811. //addmenuitemedit-->selectall
  812. JMenuItemeditSelectAll=newJMenuItem("SelectAll",'A');
  813. editSelectAll.setAccelerator(KeyStroke.getKeyStroke('A',
  814. InputEvent.CTRL_MASK,true));
  815. editSelectAll.addActionListener(newActionListener(){
  816. publicvoidactionPerformed(ActionEventae){
  817. textArea.selectAll();
  818. }
  819. });
  820. editMenu.add(editSelectAll);
  821. //addmenuitemedit-->timedate
  822. JMenuItemeditTimeDate=newJMenuItem("Time/Date",'D');
  823. editTimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));
  824. editTimeDate.addActionListener(newActionListener(){
  825. publicvoidactionPerformed(ActionEventae){
  826. textArea.replaceSelection(Calendar.getInstance().getTime()
  827. .toString());
  828. }
  829. });
  830. editMenu.add(editTimeDate);
  831. //addmenuoption
  832. JMenuoptionMenu=newJMenu("Option");
  833. optionMenu.setMnemonic('O');
  834. menuBar.add(optionMenu);
  835. //addmenuitemoption-->autowrap
  836. JMenuItemoptionAutoWrap=newJMenuItem("AutoWrap",'W');
  837. optionAutoWrap.addActionListener(newActionListener(){
  838. publicvoidactionPerformed(ActionEventae){
  839. textArea.setLineWrap(!textArea.getLineWrap());
  840. }
  841. });
  842. optionMenu.add(optionAutoWrap);
  843. //addmenuitemoption-->autowrap
  844. JMenuItemoptionFont=newJMenuItem("Font...",'F');
  845. optionFont.addActionListener(newActionListener(){
  846. publicvoidactionPerformed(ActionEventae){
  847. //JOptionPane.showMessageDialog(null,"optionfont");
  848. FontChooserfc=newFontChooser(frame);
  849. fc.setVisible(true);
  850. Fontf=fc.getSelectedFont();
  851. textArea.setFont(f);
  852. }
  853. });
  854. optionMenu.add(optionFont);
  855. //addmenuview
  856. JMenuviewMenu=newJMenu("View");
  857. viewMenu.setMnemonic('V');
  858. menuBar.add(viewMenu);
  859. //addmenuitemview-->statusbar
  860. JMenuItemviewStatusBar=newJMenuItem("StatusBar",'S');
  861. viewStatusBar.addActionListener(newActionListener(){
  862. publicvoidactionPerformed(ActionEventae){
  863. showStatusBar=!showStatusBar;
  864. statusBar.setVisible(showStatusBar);
  865. }
  866. });
  867. viewMenu.add(viewStatusBar);
  868. //addmenuhelp
  869. JMenuhelpMenu=newJMenu("Help");
  870. helpMenu.setMnemonic('H');
  871. menuBar.add(helpMenu);
  872. //addmenuitemhelp-->helpcontents
  873. JMenuItemhelpContents=newJMenuItem("HelpContents",'H');
  874. helpContents.addActionListener(newActionListener(){
  875. publicvoidactionPerformed(ActionEventae){
  876. BrowserControlbc=newBrowserControl();
  877. bc.displayURL("http://blog.youkuaiyun.com/t0nsha");
  878. }
  879. });
  880. helpMenu.add(helpContents);
  881. //addmenuitemseparator
  882. helpMenu.addSeparator();
  883. //addmenuitemhelp-->aboutjpad
  884. JMenuItemhelpAboutJPad=newJMenuItem("AboutJPad",'A');
  885. helpAboutJPad.addActionListener(newActionListener(){
  886. publicvoidactionPerformed(ActionEventae){
  887. JOptionPane
  888. .showMessageDialog(
  889. null,
  890. "version1.00(20081213)/n(c)t0nsha/nliaodunxia{at}gmail.com",
  891. "AboutJPad",JOptionPane.INFORMATION_MESSAGE);
  892. }
  893. });
  894. helpMenu.add(helpAboutJPad);
  895. //addmenubar
  896. frame.setJMenuBar(menuBar);
  897. frame.getContentPane().add(statusBar,BorderLayout.SOUTH);
  898. //addtextarea
  899. textArea.getDocument().addUndoableEditListener(undoManager);
  900. frame.add(newJScrollPane(textArea));
  901. frame.setVisible(true);
  902. }
  903. publicstaticvoidmain(String[]args){
  904. newJPad();
  905. }
  906. }

jar文件匿名提取连接 http://pickup.mofile.com/1651850105553469

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值