程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java應用SWT插件編寫桌面記事本運用法式

Java應用SWT插件編寫桌面記事本運用法式

編輯:關於JAVA

Java應用SWT插件編寫桌面記事本運用法式。本站提示廣大學習愛好者:(Java應用SWT插件編寫桌面記事本運用法式)文章只能為提供參考,不一定能成為您想要的結果。以下是Java應用SWT插件編寫桌面記事本運用法式正文


本文實例引見了Java基於SWT編寫記事本的具體進程,分享給年夜家供年夜家參考,詳細內容以下

可完成windows體系桌面記事本根本功效,傻瓜式教授教養,一步一步手把手操作。小白也可本身編寫出完全的運用法式。
須要對象:Eclipse(帶SWT插件)
制品以下:

運用法式功效引見:

功效剖析:

  • 1.文件(F)
  • 2.編纂(E)
  • 3.格局(O)
  • 4.檢查(V)
  • 5.贊助(H)

個中文件菜單中包含

1.1.新建(N) Ctrl+N
1.2翻開(O) Ctrl+O
1.3保留(S) Ctrl+S
1.4另存為(A)
1.5加入(X)

個中編纂菜單中包含:

2.1撤消(U) Ctrl+Z
2.2剪切(T) Ctrl+T
2.3復制(C) Ctrl+C
2.4粘貼(P) Ctrl+V
2.5刪除(L) Del
2.6查找(D) Ctrl+F
2.7查找下一處(N) F3
2.8調換(R) Ctrl+H
2.9轉到(G) Ctrl+G
2.10全選(A) Ctrl+A
2.11時光/日期(D) F5

個中格局菜單中包含

3.1主動換行(W)
3.2字體(F)

個中檢查菜單中包含

4.1狀況欄(S)

個中贊助菜單中包含
5.1檢查贊助(H)
5.2關於記事本(A)
接上去會一步一步教年夜家手把手編寫一個記事本
詳細的幾個類以下:
1.NotePad.java
該類為主界面類,個中包括了各個按鈕的監聽事宜
2.Util.java類
該類為幫助類,便利在其余類中挪用主窗口類中界說的成員
3.AboutAuthor.java
關於作者的類,一個Dialog窗口,用於顯示作者信息
4.FindWindow.java
查找功效的一個Dialog窗口
5.Go_To.java
轉到功效的一個Dialog窗口
6.OpenMethod.java
外面封裝了翻開文件的兩個辦法
7.SavaMethod.java
封裝了保留文件的兩種辦法
8.SWTResourceManager.java
該類為內部導入的類,用於加載圖片
9.test.java
法式進口,便利以後的打包程jar文件
10.QuitMethod.java
封裝了封閉窗口的兩種辦法

編寫步調:

一.新建SWT項目和第一個窗口的創立

翻開Eclipse,new->other->WindowBuilder->SWT Designer->SWT/JFace Java Project .將project name 定名為 NotePad

翻開新建好的NotePad工程,在scr處右鍵 new->Package 新建一個包,定名為com.chance.org
tips:包的定名規矩,最好用com.自界說.org ,別問為何,今後任務了你就會明確了。
右鍵新建好的包 new->other ->WindowBuilder->SWT Designer -> SWT ->Application Window 定名為NotePad
到此,我們便建好了第一個SWT窗口點擊source左邊的design便可檢查新建號的圖形界面,完成可視化編程。
將NotePad窗體中屬性(Properties)裡的txt屬性更名為:NotePad
將Composites中的Composites組件拖入NotePad組件下,並將其Layout屬性修正為FillLayout,即填充式結構,如許便可便利前面將全部界面釀成編纂域。接著將text組件拖入Composites組件下。將text組件的屬性Style中的h_scroll屬性和v_scroll屬性勾選為true
解釋:h_scroll為橫向轉動條,v_scroll為縱向轉動條

二.設置菜單欄的相干標簽和窗體整體結構

選擇Menu bar組件 將其拖入主窗體中

1.設置第一個菜單項(文件)

選擇Cascde Menu組件,將其拖入Menu bar組件中,修正屬性:variable屬性修正為file_menu, text修正為 文件(F);
1.1設置子菜單:新建(N) Ctrl+N
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為new_file, text修正為:新建(N) Ctrl+N;
1.2設置子菜單:翻開(O) Ctrl+O
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為open_file, text修正為:翻開(O) Ctrl+O
1.3設置子菜單:保留(O) Ctrl+S
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為save_file, text修正為: 保留(O) Ctrl+S
1.4設置子菜單:另存為(A)
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為save_as, text修正為: 另存為(A)
1.5設置子菜單:加入(X)
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為quit, text修正為: 加入(X)

2.設置第二個菜單項(編纂)

選擇Cascde Menu組件,將其拖入Menu bar組件中,修正屬性:variable屬性修正為edit_menu, text修正為 編纂(E);
2.1設置子菜單:撤消(U) Ctrl+Z
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為undo, text修正為: 撤消(U) Ctrl+Z, 並將enable改成false;
2.2設置子菜單:剪切(T) Ctrl+T
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為cut, text修正為: 剪切(T) Ctrl+T, 並將enable改成false;
2.3設置子菜單:復制(C) Ctrl+C
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為copy, text修正為: 復制(C) Ctrl+C, 並將enable改成false;
2.4設置子菜單:粘貼(P) Ctrl+V
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為paste, text修正為: 粘貼(P) Ctrl+V
2.5設置子菜單:刪除(L) Del
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為delete, text修正為: 刪除(L) Del, 並將enable改成false;
2.6設置子菜單:查找(D) Ctrl+F
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為find, text修正為: 查找(D) Ctrl+F, 並將enable改成false;
2.7設置子菜單:查找下一處(N) F3
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為find_next, text修正為: 查找下一處(N) F3, 並將enable改成false;
2.8設置子菜單:調換(R) Ctrl+H
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為replace, text修正為: 調換(R) Ctrl+H, 並將enable改成false;
2.9設置子菜單:轉到(G) Ctrl+G
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為go_to, text修正為: 轉到(G) Ctrl+G
2.10設置子菜單:全選(A) Ctrl+A
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為selectAll, text修正為: 全選(A) Ctrl+A
2.11設置子菜單:時光/日期(D) F5
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為showDate, text修正為: 時光/日期(D) F5

3.設置第三個菜單項(格局)

選擇Cascde Menu組件,將其拖入Menu bar組件中,修正屬性:variable屬性修正為format_menu, text修正為 格局(O);
3.1設置子菜單:主動換行(W)
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為auto_Enter, text修正為: 主動換行(W)
3.2設置子菜單:字體(F)
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為setFont, text修正為: 字體(F)

4.設置第四個菜單項(檢查)

選擇Cascde Menu組件,將其拖入Menu bar組件中,修正屬性:variable屬性修正為view_menu, text修正為 檢查(V);
4.1設置子菜單:狀況欄(S)
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為state, text修正為: 狀況欄(S)

5.設置第五個菜單項(贊助)

選擇Cascde Menu組件,將其拖入Menu bar組件中,修正屬性:variable屬性修正為help_menu, text修正為 贊助(H);
5.1設置子菜單:檢查贊助(H)
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為lookHelp, text修正為: 檢查贊助(H)
5.2設置子菜單:關於記事本(A)
選擇Menu Item參加到Cascde Menu組件下,修正屬性:variable屬性修正為aboutAuthor, text修正為: 關於記事本(A)
至此,已將全部頁面結構設置終了
後果圖以下:

接上去完成各個功效

三.設置菜單快捷鍵

setAccelerator()函數的引見:應用setAccelerator()函數設置相干的快捷鍵,傳入的參數為鍵值
例如快捷鍵Ctrl+N 設置辦法為: 對象. setAccelerator(SWT.CTrl+'N');
快捷鍵F5 設置辦法為:對象.setAccelerator(SWT.F5);
由此我們可以將所需的全體快捷鍵設置出來

 new_file.setAccelerator(SWT.CTRL + 'N'); //新建文件快捷鍵
 open_file.setAccelerator(SWT.CTRL + 'O');//保留文件快捷鍵
 undo.setAccelerator(SWT.CTRL + 'Z'); //撤消快捷鍵
 cut.setAccelerator(SWT.CTRL + 'T'); //剪切快捷鍵
 copy.setAccelerator(SWT.CTRL + 'C'); //復制快捷鍵
 paste.setAccelerator(SWT.CTRL + 'V'); //粘貼快捷鍵
 delete.setAccelerator(SWT.DEL);  //刪除快捷鍵
 find.setAccelerator(SWT.CTRL + 'F'); //查找快捷鍵
 find_next.setAccelerator(SWT.F3); //查找下一處快捷鍵
 replace.setAccelerator(SWT.CTRL + 'H'); //調換快捷鍵
 go_to.setAccelerator(SWT.CTRL + 'G'); //轉到快捷鍵
 selectAll.setAccelerator(SWT.CTRL + 'A');//全選快捷鍵
 showDate.setAccelerator(SWT.F5);  //顯示時光快捷鍵

四.添加事宜監聽函數(1)文件類

為文件每一個菜單添加事宜監聽函數

1.添加”加入” 菜單的監聽事宜

功效描寫:觸發該菜單將加入運用法式
加入的完成比擬簡略,挪用體系函數System.exit(0);便可
在design形式下點擊”時光/日期(F5)”組件 再點擊”Show event”->selection->雙擊widgetSelected
事宜代碼以下:

quit.addSelectionListener(new SelectionAdapter() {
  /**
  * 添加"加入"菜單的監聽事宜
  * 功效描寫:觸發該菜單將加入運用法式
  */
  public void widgetSelected(SelectionEvent e) {
  System.exit(0);
  }
 });

但現實真的這麼簡略嗎,其實否則,哪有點擊加入就直接加入的,真實的記事本,加入的時刻可是還有提醒的,因而乎,改良後的代碼以下;

public void DIYquit(){
 /**
  * 加入函數加入時停止斷定能否須要保留
  */
 String tips;
 System.out.println(Util.shell.getText().getText());
 if(Util.shell.fileDir != null || Util.shell.getText().getText() != ""){ //文件目次不為空,解釋有翻開著的文件,須要訊問能否保留
  if(Util.shell.fileDir == null){
  tips = "文件 無題目 的文字曾經轉變。\n"+"想保留文件嗎";
  }else{
  tips = "文件 " +Util.shell.fileDir + " 的文字曾經轉變。\n"+"想保留文件嗎";
  }
  int n=JOptionPane.showConfirmDialog(null, tips,"記事本",JOptionPane.YES_NO_CANCEL_OPTION);
  if(n==0){ //是 前往0 否前往1 撤消 前往2 
  SaveMethod savemethod = new SaveMethod();
  savemethod.Save(); //點是,則保留文件然後翻開文件
  }else if(n==1){ //前往否
  System.exit(0);
  }else if(n==2){ //前往撤消
  return ;
  }
  System.exit(0);
 }else{ 
  if(Util.shell.getText().getText() != ""){ //若目次為空,然則內容不為空,解釋有內容但未保留,提醒之
  tips = "文件 無題目 的文字曾經轉變。\n"+"想保留文件嗎";
  int n=JOptionPane.showConfirmDialog(null, tips,"記事本",JOptionPane.YES_NO_CANCEL_OPTION);
  if(n==0){ //是 前往0 否前往1 撤消 前往2 
   SaveMethod savemethod = new SaveMethod();
   savemethod.Save(); //點是,則保留文件然後翻開文件
  }else if(n==1){ //前往否
   System.exit(0);
  }else if(n==2){ //前往撤消
   return ;
  }
  System.exit(0);
  }else{

  }
 }
 System.exit(0);
 }

接上去的每一個監聽事宜內的操作我都界說為了一個函數,監聽事宜添加辦法同第一步,詳細完成辦法以下:

2. 添加”另存為” 菜單的監聽事宜

功效描寫:觸發該菜單將彈出另存為的窗口,完成將文件另存為別處
這裡為了便利代碼的復用,另存為封裝成辦法停止挪用
代碼以下:

public void SaveAs(){
 /**
  * 將另存為這個辦法停止封裝,便利挪用
  */
 FileDialog dialog = new FileDialog(Util.shell.shell,SWT.SAVE);
  dialog.setFilterPath(System.getProperty("C:\\Documents and Settings"));//設置翻開默許的途徑
  dialog.setFilterExtensions(new String[] {"*.txt", "*.*"}); //設置所翻開文件的擴大名
  dialog.setFilterNames( new String[]{"Text Files (*.txt)", "All Files (*.*)"}); //設置顯示到下拉框中的擴大名的稱號
  String file = dialog.open();//翻開窗口,前往用戶所選的文件目次
  if(file != null){
  Util.shell.fileDir = file;//將文件目次保留上去,方面以後的應用
  }
  if ( file != null )
  {
  Util.shell.shell.setText((new File( file.trim())).getName());//獲得文件名(不含途徑)用於設置title
  FileWriter fileWriter;
  try {
  fileWriter = new FileWriter(file);
  BufferedWriter out = new BufferedWriter(fileWriter);
  out.write(Util.shell.getText().getText());
  out.close();
  fileWriter.close();
  } catch (IOException e1) {
  e1.printStackTrace();
  }
  }
 }

3. 添加”保留” 菜單的監聽事宜

功效描寫:觸發”保留”菜單時,彈出保留文件窗口,然後選擇目次和輸出文件名停止保留
關於保留這裡的邏輯我要好好說一說了:一開端一向在想若何能力肯定以後文檔能否是保留照樣另存為,後來細心不雅察桌面記事本才發明,本來保留和另存為彈出的對話框是統一個,只須要略微加以差別便可斷定是要保留照樣要另存為了
斷定以下:若是保留則解釋存在fileDir,直接挪用保留的函數便可,若不存在fileDir則解釋文件時新翻開的,還沒肯定過途徑,是以跳轉另存為窗體。
起首界說一個全局變量String fileDir = null;將其賦值為空,默許一切的文件都未保留
接著不論是翻開文件,照樣另存為文件,都將文件地點目次(包含文件名和後綴名)記載在fileDir中,最初在保留事宜中肯定fileDir能否為空便可。
代碼以下:

 public void Save(){

 /**
  * 保留文件
  */
 if(Util.shell.fileDir!=null ){ //表現該文件有目次,保留時直接保留,不須要彈窗
  Util.shell.shell.setText((new File( Util.shell.fileDir.trim())).getName());//獲得文件名(不含途徑)用於設置title
  FileWriter fileWriter;
  try {
   fileWriter = new FileWriter(Util.shell.fileDir);
   BufferedWriter out = new BufferedWriter(fileWriter);
   out.write(Util.shell.getText().getText());
   out.close();
   fileWriter.close();
  } catch (IOException e1) {
   e1.printStackTrace();
  }
 }
 else{//不然為從未保留過,則挪用另存為窗口
  SaveAs();
 }
 }

4.添加”翻開” 菜單的監聽事宜

功效描寫:觸發”翻開”菜單時,彈出翻開文件窗口,然後選擇文件停止翻開
為了完成代碼的復用,將翻開辦法停止封裝成函數
代碼以下:

public void OpenFile(){
 if(Util.shell.fileDir != null || Util.shell.getText().getText() != ""){
  String tips = "文件 " +Util.shell.fileDir + " 的文字曾經轉變。\n"+"想保留文件嗎";
  int n=JOptionPane.showConfirmDialog(null, tips,"記事本",JOptionPane.YES_NO_CANCEL_OPTION);
  if(n==0){ //是 前往0 否前往1 撤消 前往2 
  SaveMethod savemethod = new SaveMethod();
  savemethod.Save(); //點是,則保留文件然後翻開文件
  }else if(n==1){ //前往否

  }else if(n==2){ //前往撤消
  return ;
  }
 }else{
  FileDialog dialog = new FileDialog(Util.shell.shell,SWT.OPEN);
  dialog.setFilterPath(System.getProperty("C:\\Documents and Settings"));//設置翻開默許的途徑
  dialog.setFilterExtensions(new String[] {"*.txt", "*.*"});//設置所翻開文件的擴大名
  dialog.setFilterNames( new String[]{"Text Files (*.txt)", "All Files (*.*)"});//設置顯示到下拉框中的擴大名的稱號
  String file = dialog.open();//翻開窗口,前往用戶所選的文件目次(包含文件名)
  if(file == null){
   return ;
  }
  Util.shell.fileDir = file;
  Util.shell.shell.setText((new File( file.trim())).getName());//獲得文件名(不含途徑)用於設置title
  FileReader filereader;
  try {
  filereader = new FileReader(file);
  BufferedReader in = new BufferedReader(filereader);
  String s = null;
  Util.shell.getText().setText(""); //將編纂框內容制空
   try {
   while((s=in.readLine())!=null){
    Util.shell.getText().append(s+"\n");
   }
   } catch (IOException e1) {
   e1.printStackTrace();
   }
  } catch (FileNotFoundException e2) {
  e2.printStackTrace();
  }
 }
 }

5. 添加”新建” 菜單的監聽事宜

功效描寫:觸發事宜時,完成新建一個窗口,若以後文件未保留,提醒其保留,不然跳轉發生新頁面。
發生新頁面的道理:將title從新初始化,將fileDir初始化,和把編纂域初始化便可
這裡將翻開新文件的代碼抽出為一個辦法,便利挪用
代碼以下:

void openNewFile() {

 if(Util.shell.fileDir != null || Util.shell.getText().getText() != ""){
  String tips = "文件 " +Util.shell.fileDir + " 的文字曾經轉變。\n"+"想保留文件嗎";
  int n=JOptionPane.showConfirmDialog(null, tips,"記事本",JOptionPane.YES_NO_CANCEL_OPTION);
  if(n==0){ //是 前往0 否前往1 撤消 前往2 
  SaveMethod savemethod = new SaveMethod(); //點是,則保留文件然後翻開文件
  }else if(n==1){ //前往否

  }else if(n==2){ //前往撤消
  return ;
  }
  String t = "無題目(" + ++Util.shell.cnt + ") - 記事本";
  Util.shell.shell.setText(t); //設置題目
  Util.shell.getText().setText("");   //清空編纂框
  Util.shell.fileDir = null; 
 }else{
  String t = "無題目(" + ++Util.shell.cnt + ") - 記事本";
  Util.shell.shell.setText(t); //設置題目
  Util.shell.getText().setText("");   //清空編纂框
  Util.shell.fileDir = null; 
 }
   //一切的數據都初始化
 }

四.添加事宜監聽函數(2)編纂類

為每一個菜單添加事宜監聽函數

1.添加”顯示時光”菜單的監聽事宜

功效描寫:事宜觸發時,會在編纂框中光標地點處顯示體系其時時光
完成:獲得以後體系時光,將其轉換成String型,再挪用text.append(str)辦法,將時光顯示在編纂框光標以後
1.1添加事宜監聽函數
獲得體系以後時光辦法:挪用SimpleDateFormat對象格局化時光,再挪用Date獲得時光。
剛開端存在的成績:每次都只能添加到內容開頭,細心一想,必需要定位到以後光標地點地位,再將光標前的字符串+時光字符串+光標後的字符串 停止拼接,再一路顯示出來。
找了很久找到了getCaretPosition()恰好前往類型為整形,應當就是獲得以後光標地位的,一試果真如斯。接上去就是要完成字符串的拼接技巧
字符串拼接:s1.substring(0, index) + s2 + s1.substring(index, s1.length());
前往的為新的字符串。
湧現的成績:拼接好後直接輸入,招致之前存在的內容與後來新的字符串又一次拼接,改了很久才發明須要挪用setText(String)辦法,在輸入之前先將之前編纂框中顯示的內容清空
終究監聽函數內容以下:

 showDate.addSelectionListener(new SelectionAdapter() {
  /**
  * 添加"時光日期"菜單的監聽事宜
  * 功效描寫:觸發該菜單將以後體系時光添加到編纂框光標開頭處
  */
  public void widgetSelected(SelectionEvent e) {
  int index = getText().getCaretPosition(); //獲得以後編纂框中光標的地位
  //System.out.println(index);
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格局
  String localTime = df.format(new Date());
  String newString = insertString(getText().getText(),localTime,index); //拼接好後的字符串
  getText().setText("");//將本來編纂框的內容清空再將新的內容顯示出來
  //System.out.println(localTime);// new Date()為獲得以後體系時光
  getText().append(newString); //將拼接好的字符串顯示出來
  }
 });

個中拼接字符串函數以下:

public String insertString(String s1,String s2,int index){
 /**
  * 完成字符串的拔出函數
  * 傳入的三個參數為:原串,要拔出的串,和拔出的地位
  * 前往的為拔出後的字符串
  */
 return s1.substring(0, index) + s2 + s1.substring(index, s1.length());
 }

2.添加”全選”菜單監聽事宜

功效描寫:觸發該菜單將全體選定文本域字符串
Java外面的編纂框居然自帶全選功效,哈哈,可以直接text.selectAll()挪用,那估量復制和粘貼也有現成的,差點忘了,全選後還需斷定所選內容能否為空,不為空則需將”刪除” “剪切”這兩個按鈕設置成可選
全選代碼以下:

selectAll.addSelectionListener(new SelectionAdapter() {
  /**
   * 添加"全選"菜單的監聽事宜
   * 功效描寫:觸發該菜單將全體選中文本域的文字,同時將"刪除" "剪切"這兩個按鈕設置成可選
   */
  public void widgetSelected(SelectionEvent e) {
   getText().selectAll(); //直接挪用自帶的函數喲
   if(getText().getText() !=null){ //若內容不為空,解釋全選有內容,是以須要將"刪除" "剪切" "復制"這三個按鈕設置成可選
   delete.setEnabled(true); //將復制
   cut.setEnabled(true);
   copy.setEnabled(true);
   }
  }
  });

3.添加”剪切”菜單監聽事宜

功效描寫:觸發該菜單,完成選擇內容的剪切
直接挪用編纂框的cut()辦法
代碼以下:

cut.addSelectionListener(new SelectionAdapter() {
  /**
   * 添加"剪切"菜單的監聽事宜
   * 功效描寫:觸發該菜單將選中的字符串停止剪切
   */
  public void widgetSelected(SelectionEvent e) {
   getText().cut();
  }
  });

4.添加”粘貼”菜單監聽事宜

功效描寫:觸發該菜單,完成將剪切板內容停止粘貼
直接挪用編纂框的paste()辦法
代碼以下:

paste.addSelectionListener(new SelectionAdapter() {
  /**
   * 添加"粘貼"菜單的監聽事宜
   * 功效描寫:觸發該菜單將剪切板中的內容粘貼到編纂框中
   */
  public void widgetSelected(SelectionEvent e) {
   getText().paste();
  }
  });

5.添加”復制”菜單監聽事宜

功效描寫:觸發該菜單,完成將選擇內容停止復制
直接挪用編纂框的copy()辦法
代碼以下:

copy.addSelectionListener(new SelectionAdapter() {
  /**
  * 添加"剪切"菜單的監聽事宜
  * 功效描寫:觸發該菜單將選中的字符串停止剪切
  */
  public void widgetSelected(SelectionEvent e) {
  text.copy ();
  }

6.添加”撤消”菜單監聽事宜

功效描寫:觸發該菜單,撤消以後步操作
撤消該功效觸及到的算法長處龐雜,臨時該記事本不支撐按鈕的撤消辦法,然則支撐右鍵的撤消(右鍵的撤消時Java Text組件自帶的,又不是我寫的,哈哈)

7.添加”查找”菜單監聽事宜

功效描寫:觸發該菜單,履行查找操作

 find.addSelectionListener(new SelectionAdapter() {
  /**
   * 添加查找功效的對話框,個中須要點擊查找,然後彈出一個對話框,輸出查找的相干內容
   */
  public void widgetSelected(SelectionEvent e) {
   FindWindow fw = new FindWindow(shell,SWT.DIALOG_TRIM);
   fw.open();
  } 
  });

四.添加事宜監聽函數(3)幫助類

除菜單欄的幾個菜單事宜外,還須要監聽鍵盤事宜,即如有鍵盤鍵入文本域,則會觸發相干菜單的顯示:撤消,查找,查找下一處,調換 這四個菜單設置成可選

1.文本域的監聽

 getText().addKeyListener(new KeyAdapter() {
  /**
   * 設置鍵盤監聽事宜
   * 有鍵盤鍵入則須要把相干按鈕設置成可見:撤消,查找,查找下一處
   */
  public void keyReleased(KeyEvent e) {
   if(getText().getText()!=""){//解釋有輸出
   find.setEnabled(true);
   find_next.setEnabled(true);
   replace.setEnabled(true);
   }else{
   find.setEnabled(false);
   find_next.setEnabled(false);
   replace.setEnabled(true);
   }
  }
  });

2.完成”字體”菜單的事宜監聽函數

代碼以下:

setFont.addSelectionListener(new SelectionAdapter() {
  /**
   * 設置字體的監聽事宜
   */
  public void widgetSelected(SelectionEvent e) {
   FontDialog fontDialog = new FontDialog(shell, SWT.NONE);
   Font oldFont = getText().getFont();
   if(oldFont != null) {
   fontDialog.setFontList(oldFont.getFontData());
   }
   FontData fontData = fontDialog.open();
   if(fontData == null) {
   return;
   }
   final Display display = Display.getDefault();
   Font newFont = new Font(display, fontData);
   getText().setFont(newFont);
   if(oldFont != null) {
   oldFont.dispose();
   }
  }
  });

五.窗體標簽設置

將主函數提取到test類,並將記事本的窗體的題目參數化,在主函數中傳入一個初始標簽:”無題目 – 記事本”
在窗體類Main_Window中界說有參結構辦法,傳入的參數即為題目名
結構函數以下:

 Main_Window(String titleName){
 /**
  * 有參結構傳入的參數為文件名
  */
 this.titleName = titleName;
 }

留意的是:剛開端運轉軟件 題目為: 無題目 – 記事本
翻開文件時 題目為所翻開的文件名
保留時 題目為所保留的文件名
另存為時 題目為另存為的文件名
已知途徑獲得文件名(不包括途徑)的辦法為:
shlNotepad.setText((new File( fileDir.trim())).getName());//獲得文件名(不含途徑)用於設置title
這裡為了簡練我曾經將其縮寫成一句話代碼

設置了法式圖標,將其放在工程目次下,便可直接引入應用

思慮:提醒用戶能否保留時,不克不及用僅僅看途徑能否為空,應當要檢測鍵盤能否有按下,等於否有轉變,和內容能否有轉變(有能夠直接右鍵刪除,並未經由鍵盤)

六.其他三個Dialog對話框的界說

1.查找對話框

異樣右鍵新建好的包 new->other ->WindowBuilder->SWT Designer -> SWT ->Dialog定名為FindWindow
結果圖以下:


這裡查找,調換,和查找下一處都共用這一個窗口。查找內容編纂框有內容方可觸發按鈕可點擊,查找內容編纂框與調換為編纂框同時不為空方可觸發調換功效
這裡列出查找下一處和調換為的辦法體
查找下一處:
思緒:先獲得主窗口中一切字符串,再獲得須要查找的內容,直接挪用Java 自帶的查找字符串函數取得肇端索引,再加上查找內容的字符串長度即為須要襯著的字符串長度,再挪用主窗口中的襯著函數,將字符串停止襯著再顯示出來。
詳細代碼以下:

find_next.addSelectionListener(new SelectionAdapter() {
  @Override
  public void widgetSelected(SelectionEvent e) {
  pareStr = Util.shell.getText_1(); //獲得主窗口文本框內容 true
  index = pareStr.indexOf(textContent.getText(),index); //獲得查找串在母串中的從index處開端的地位
  if(index == -1){
   JOptionPane.showMessageDialog(null, "找不到\""+textContent.getText()+"\"","記事本", JOptionPane.ERROR_MESSAGE); 
  }
  int end = index+textContent.getText().length();//取得襯著的停止地位
  Util.shell.selectContent(index, end);
  index = index+textContent.getText().length(); 
  }
 });

調換按鈕觸發事宜以下;

replaceBtn.addSelectionListener(new SelectionAdapter() {
  /**
  * 調換按鈕事宜
  */
  public void widgetSelected(SelectionEvent e) {
  pareStr = Util.shell.getText_1(); //獲得主窗口文本框內容 
  pareStr = pareStr.replaceFirst(textContent.getText(), replaceText.getText());
  Util.shell.showText(pareStr);
  }
 });

2.AboutAuthor對話框的樹立

該對話框的創立同查找對話框,將其定名為AboutAuthor便可
詳細後果圖以下:

該對話框未觸及相干算法,添加三個JLabel標簽然後輸出三句話罷了

3.Go_to對話框的樹立

對話框樹立辦法不多說,定名為Go_to便可
詳細後果圖以下:

代碼完成以下:

queding.addSelectionListener(new SelectionAdapter() {
  /**
  * 肯定跳轉到某行
  */
  public void widgetSelected(SelectionEvent e) {
  int n = Integer.parseInt(goto_line.getText());
  goto_line.setText(""+ n + "");
  Util.shell.gotoOneLine(1);
  }
 });

挪用主窗口中的gotoOneLine()辦法

 public void gotoOneLine(int row)
 {
 getText().setSelection(row);
 }

至此,全部記事本的普通功效已全體完成

七.總結

從剛開端編寫,到終究的完成,花了年夜概2-3天,個中學到了許多相干的算法,Java編程很便利,很多辦法都不須要本身再去完成,直接挪用便可,然則Java也存在許多缺乏,好比,封閉窗口的辦法我用的Java自帶的對話框,成果特殊卡,列位感興致的可以自界說加入的對話框,只需將自帶的三選對話框改成自界說的對話框便可。同時,前只是出於進修,並未斟酌到算法發高效性,好比翻開文件操作,只是完成了功效,但並未斟酌算法的時效性,本例應用的辦法是按行讀取文件,你可以本身嘗嘗翻開一個上千行的文本文檔,你就可以感到獲得算法的主要性,還有就是 向上查找並未完成,初步思緒:找到須要查找的坐標找到,然後從查找的坐標的地位開端往回走,將查找內容也顛倒,再挪用Java自帶的字符串查找函數,
例如:
母串為 “ab記事本def3g” 須要從”3”這個字符串開端向前查找”記事本”字符串,可將母串中”3”字符串地點地位之前的字符串”ab記事本def”完整顛倒為”g3fed本領記ba” 將查找內容也顛倒成”本領記” 再挪用Java內帶的字符串查找函數查找地點地位,再復原便可。

以上就是手把手編寫記事本的具體步調,Java基於SWT插件編寫桌面記事本運用法式,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved