Java應用SWT插件編寫桌面記事本運用法式。本站提示廣大學習愛好者:(Java應用SWT插件編寫桌面記事本運用法式)文章只能為提供參考,不一定能成為您想要的結果。以下是Java應用SWT插件編寫桌面記事本運用法式正文
本文實例引見了Java基於SWT編寫記事本的具體進程,分享給年夜家供年夜家參考,詳細內容以下
可完成windows體系桌面記事本根本功效,傻瓜式教授教養,一步一步手把手操作。小白也可本身編寫出完全的運用法式。
須要對象:Eclipse(帶SWT插件)
制品以下:
運用法式功效引見:
功效剖析:
個中文件菜單中包含
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插件編寫桌面記事本運用法式,願望對年夜家的進修有所贊助。