この記事では、SWTに基づいたJavaライティングメモ帳の詳細なプロセスを紹介します。それはあなたの参照のためにあなたと共有されます。特定のコンテンツは次のとおりです
Windowsシステムのデスクトップメモ帳、フールスタイルの教育、段階的な操作の基本的な機能を実現できます。 Xiaobaiは、自分で完全なアプリケーションを書くこともできます。
必要なツール:Eclipse(SWTプラグインを使用)
完成品は次のとおりです。
アプリケーション機能の紹介:
機能分析:
ファイルメニューには含まれます
1.1。 (n)ctrl+nを作成します
1.2Open(o)Ctrl+o
1.3Save(s)Ctrl+s
1.4Save as(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 Delete(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
著者のクラスについて、著者情報を表示するためのダイアログウィンドウ
4.findwindow.java
検索関数のダイアログウィンドウ
5.go_to.java
関数のダイアログウィンドウに移動します
6.Openmethod.java
カプセル化されたファイルを開く方法は2つあります
7.Savamethod.java
ファイルを保存する2つの方法
8.swtrsourcemanager.java
このクラスは外部からインポートされたクラスであり、画像のロードに使用されます
9.test.java
プログラムエントリ、便利なパッケージJARファイル後
10.QuitMethod.java
ウィンドウを閉じる2つの方法がカプセル化されています
手順を書く:
1つ。新しいSWTプロジェクトを作成し、最初のウィンドウを作成します
Eclipse、new-> other-> windowbuilder-> swt Designer-> swt/jface Javaプロジェクト。プロジェクト名のメモ帳に名前を付けます
新しく作成されたメモ帳プロジェクトを開き、scrで右クリック> new->パッケージをクリックして、com.chance.orgという名前の新しいパッケージを作成します
ヒント:パッケージの命名規則は、COMの使用に最適です。 custom.org。理由を尋ねないでください、あなたは将来働いた後に理解するでしょう。
新しく作成されたパッケージを右クリックしてくださいnew-> other-> windowbuilder-> swtデザイナー - > swt->アプリケーションウィンドウ名notepad
この時点で、最初のSWTウィンドウを構築し、ソースの右側にあるデザインをクリックして、新しく作成された番号のグラフィカルインターフェイスを表示して視覚的なプログラミングを実現しました。
メモ帳フォームのプロパティのTXTプロパティの名前を次のように変更します。
コンポジットのコンポーネントをコンポジットのコンポーネントをメトパッドコンポーネントにドラッグし、レイアウトプロパティをFillLayoutに変更します。つまり、インターフェイス全体を後で編集ドメインに変えることができます。次に、テキストコンポーネントをコンポジットコンポーネントにドラッグします。テキストコンポーネントのプロパティスタイルでh_scroll属性とv_scroll属性をtrueに確認してください
説明:H_Scrollは水平スクロールバーで、V_Scrollは垂直スクロールバーです
二。メニューバーの関連ラベルとフォームの全体的なレイアウトを設定します
メニューバーコンポーネントを選択してメインフォームにドラッグします
1.最初のメニュー項目(ファイル)を設定します
CASCDEメニューコンポーネントを選択し、メニューバーコンポーネントにドラッグし、属性を変更します。FILE_MENUに変数属性を変更し、テキストをFILE(f)に変更します。
1.1設定サブメニュー:create(n)ctrl+n
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、次の変数属性を変更し、テキストを次のように変更します。
1.2設定サブメニュー:open(o)ctrl+o
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更します。変数属性をOpen_Fileに変更し、テキストをOPEN(O)CTRL+Oに変更します。
1.3設定サブメニュー:保存(o)ctrl+s
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更し、save_fileに変数属性を変更し、テキストを以下に変更します。
1.4設定サブメニュー:(a)として保存
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更します。変数属性をsave_asに変更し、テキストを次のように変更します。
1.5設定サブメニュー:exit(x)
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更します。変数属性をQUITに変更し、テキストを次のように変更します。
2。2番目のメニュー項目(編集)を設定します
CASCDEメニューコンポーネントを選択し、メニューバーコンポーネントにドラッグし、属性を変更します。変数属性をedit_menuに変更し、テキストを編集(e)に変更します。
2.1設定サブメニュー:元に戻す(u)ctrl+z
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、次のように変数属性を変更し、テキストを以下に変更します。
2.2設定サブメニュー:カット(t)ctrl+t
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、次のように変数属性を変更し、テキストを次のように変更します。
2.3設定サブメニュー:コピー(c)ctrl+c
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、次の属性を変更し、テキストをコピー(c)ctrl+cに変更し、falseにenableを変更します。
2.4設定サブメニュー:貼り付け(P)Ctrl+v
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、次の属性を変更し、テキストを貼り付け(P)ctrl+vに変更します。
2.5設定サブメニュー:削除(l)del
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更します。変数属性を変更して削除し、テキストを削除(l)delに変更し、falseにenableを変更します。
2.6設定サブメニュー:(d)ctrl+fを見つけます
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、次のように変数属性を変更し、テキストを次のように変更します。
2.7設定サブメニュー:次の場所(n)F3を見つけます
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更します。変数属性をFind_Nextに変更し、次のようにテキストを変更します。
2.8設定サブメニュー:交換(r)ctrl+h
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、変数属性を変更して置換し、テキストを次のように変更します。
2.9設定サブメニュー:(g)ctrl+gに移動します
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更し、go_toに変数属性を変更し、テキストを(g)ctrl+gに変更します。
2.10設定サブメニュー:すべて(a)ctrl+aを選択します
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更し、次の属性を変更し、テキストを以下に変更します。
2.11設定サブメニュー:時間/日付(d)F5
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更します。変数属性をshowdateに変更し、テキストを以下に変更します。
3. 3番目のメニュー項目(フォーマット)を設定します
CASCDEメニューコンポーネントを選択し、メニューバーコンポーネントにドラッグし、属性を変更します。変数属性をformat_menuに変更し、テキストをformat(o)に変更します。
3.1設定サブメニュー:自動ラインラップ(W)
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更します。変数属性をAuto_Enterに変更し、テキストを次のように変更します。
3.2設定サブメニュー:フォント(f)
CASCDEメニューコンポーネントに追加するメニュー項目を選択し、属性を変更します。変数属性をSetFontに変更し、テキストを次のように変更します。
4. 4番目のメニュー項目(表示)を設定します
CASCDEメニューコンポーネントを選択し、メニューバーコンポーネントにドラッグし、属性を変更します。view_menuに変数属性を変更し、テキストを[v)に変更します。
4.1設定サブメニュー:ステータスバー
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更します。変数属性を状態に変更し、テキストを以下に変更します。
5。5番目のメニュー項目を設定します(ヘルプ)
CASCDEメニューコンポーネントを選択し、メニューバーコンポーネントにドラッグし、属性を変更します。verable属性をhelp_menuに変更し、テキストを変更してhep(h)を変更します。
5.1設定サブメニュー:ヘルプを表示(h)
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更します。変数属性をLookHelpに変更し、テキストを次のように変更します。
5.2設定サブメニュー:メモ帳について(a)
メニュー項目を選択してCASCDEメニューコンポーネントに追加し、属性を変更します。次の属性を変更し、テキストを次のように変更します。
この時点で、ページレイアウト全体のレンダリングは次のように設定されています。
次に、さまざまな機能を実装します
三つ。設定メニューショートカットキー
setaccelerator()関数の紹介:setaccelerator()関数を使用して、関連するショートカットキーを設定します。渡されたパラメーターは重要な値です。たとえば、ショートカットキーCtrl+Nは次のように設定されています。 SetAccelerator(swt.ctrl+'n');
ショートカットキーF5設定方法は次のとおりです。Object.SetAccelerator(SWT.F5);
これから、必要なすべてのショートカットキーを設定できます
new_file.setaccelerator(swt.ctrl + 'n'); //新しいファイルショートカットopen_file.setaccelerator(swt.ctrl + 'o'); //ファイルショートカットを保存します。 //ショートカットcut.setaccelerator(swt.ctrl + 't')を元に戻す; //ショートカットCopy.SetAccelerator(SWT.CTRL + 'C'); //ショートカットPaste.SetAccelerator(SWT.CTRL + 'V')をコピーします。 //ショートカットキーdelete.setAccelerator(swt.del)を貼り付けます。 //ショートカットキーfind.setAccelerator(swt.ctrl + 'f')を削除します。 //ショートカットkey find_next.setaccelerator(swt.f3)を見つける; //次のショートカットキーを見つけます。SetAccelerator(swt.ctrl + 'h'); //ショートカットキーgo_to.setaccelerator(swt.ctrl + 'g')を交換します。 //ショートカットキーSelectAll.SetAccelerator(swt.ctrl + 'a'); //すべてのショートカットキーshowdate.setaccelerator(swt.f5);を選択します。 //タイムショートカットキーを表示します
4.イベントリスニング機能(1)ファイルクラスを追加します
ファイルの各メニューにイベントリスニング機能を追加する
1.「Exit」メニューリスニングイベントを追加します
関数の説明:アプリケーションを終了するためにこのメニューをトリガーする実装は比較的簡単です。 System Function System.Exit(0)を呼び出します。 [Time/Date(F5)]コンポーネントを設計モードでクリックして、[イベントを表示] - >選択 - > [widgetselected]をダブルクリックします
イベントコードは次のとおりです。
Quit.AddSelectionListener(new SelectionAdapter(){ / ***「exit」メニューのリスニングイベントを追加*機能説明:このメニューのトリガーは、アプリケーションを終了します。しかし、それは単純ですか?実際、クリックするだけで終了してから直接終了することはできません。実際のメモ帳でやめるときはまだヒントがあるため、改善されたコードは次のとおりです。
public void diyquit(){ / ***関数を終了するとき、それを保存する必要があるかどうかを判断します* /文字列のヒント。 system.out.println(util.shell.getText()。getText()); if(util.shell.filedir!= null || util.shell.getText()。getText()!= ""){//ファイルディレクトリは空ではありません。つまり、オープンファイルがあります。 (util.shell.filedir == null){tips = "ファイルの無題のテキストが変更された場合、保存するかどうかを尋ねる必要があります。 /n"+"ファイルを保存しますか?"; } else {tips = "file" + util.shell.filedir + "のテキストが変更されました。 /n "+"ファイルを保存しますか? "} int n = joptionpane.showconfirmdialog(null、tips、" motepad "、joptionpane.yes_no_cancel_option); //はい、ファイルを保存して} else(n == 1){// no system.exit(0);保存されていません= "ファイルの無題のテキストが変更されました。 /n "+"ファイルを保存したいですか? "; int n = joptionpane.showconfirmdialog(null、tips、" notepad "、joptionpane.yes_no_cancel_option); if(n == 0){// //はい、ファイルを保存します} else(n == 1){// no system(0);次のリスニングイベントの各操作を関数として定義します。リスニングイベントの追加方法は、最初のステップと同じです。特定の実装方法は次のとおりです。
2.「保存」メニューを追加して、イベントをリッスンします
関数の説明:このメニューをトリガーし、[ウィンドウとして保存]がポップアップし、他の場所のようにファイルを保存します。コードの再利用を容易にするために、メソッドにカプセル化するように保存し、次のようにコードを呼び出します。
public void saveas(){ / ***コールを促進するためにこの方法としてカプセル化* / filedialogダイアログ= new filedialog(util.shell.shell、swt.save); Dialog.setFilterPath(system.getProperty( "c:// documents and settings")); //デフォルトパスを[new string] {] {"*.txt"、 "*。*"}); //開設されたファイルの拡張機能を設定します[new String [] {"text files(*.txt)"、 "all files(*。*)"}); //ドロップダウンボックス文字列file = dialog.open(); //ウィンドウを開き、ユーザーが選択したファイルディレクトリに戻す拡張機能の名前を設定してくださいif(file!= null){util.shell.filedir = file; // fileディレクトリを保存、後で} if(file!= null){util.shell.shell.settext file.trim())。 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が存在しない場合、ファイルが新しく開かれており、パスがまだ決定されていないことを意味しますので、フォームとして保存するためにジャンプします。
最初に、グローバル変数文字列filedir = nullを定義します。空に割り当てると、すべてのファイルがデフォルトで保存されません。次に、ファイルを開くか、ファイルとして保存するかどうかにかかわらず、ファイル(ファイル名と接尾辞名を含む)がFileDirに記録され、最後にFileDirが保存イベントで空であるかどうかを決定します。
コードは次のとおりです。
public void save(){ / *** save file* / if(util.shell.filedir!= null){//ファイルにディレクトリがあり、保存時に直接保存することを意味します。 //ファイル名(パスを除く)を取得して、タイトル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() /n "+"ファイルを保存したいですか? "; int n = joptionpane.showconfirmdialog(null、tips、" notepad "、joptionpane.yes_no_cancel_option); if(n == 0){// //はい、ファイルを保存してファイルを開きます} else(n == 1){// return} else if(// return cancel return} Dialog.setFilterExtensionsを開くためのデフォルトパス(new String [] {"*.txt"、 "*。*"}); //開いたファイルの拡張機能を設定します[] new String.setfilternames( "Text Files(*.txt)"、 "すべてのファイル(*。*)"});ユーザーが選択したファイル(ファイル名を含む){return.shell.filedir = file; BufferedReader = new BufferedReader(fileReader); settext( ""); e1.printstacktrace();5.「新しい」メニューリスニングイベントを追加します
関数の説明:イベントがトリガーされたら、新しいウィンドウを作成します。現在のファイルが保存されていない場合、保存するように求められます。そうしないと、新しいページがジャンプして生成されます。
新しいページを生成するという原則:タイトルを再発行し、ファイリングを初期化し、編集ドメインを初期化します。ここでは、コードを抽出して新しいファイルをメソッドに開きます。これは、次のようにコードを呼び出すのに便利です。
void opennewfile(){if(util.shell.filedir!= null || util.shell.getText()。getText() /n "+"ファイルを保存したいですか? "; int n = joptionpane.showconfirmdialog(null、tips、" notepad "、joptionpane.yes_no_cancel_option); if(n == 0){// file} if(n == 1){n == 2){// return return; util.shell.filedir = null;初期化}4.イベントリスニング機能(2)編集クラスを追加します
メニューごとにイベントリスニング機能を追加します
1.「show time」メニューを追加して、イベントをリッスンします
関数の説明:イベントがトリガーされると、システム時間が編集ボックスのカーソルに表示されます。現在のシステム時間を取得し、文字列タイプに変換し、編集ボックスカーソルの後の時間を表示するためにtext.append(str)メソッドを呼び出します。
1.1イベントリスニング関数を追加して、システムの現在の時間方法を取得します。SimpledateFormatオブジェクトを呼び出して時間をフォーマットし、日付を呼び出して時間を取得します。
最初の問題:それは毎回コンテンツの終わりにのみ追加できます。慎重に考える場合は、現在のカーソル位置を見つけてから、カーソルの後にカーソル +文字列の前に文字列をスプライスし、一緒に表示する必要があります。
私は長い間検索し、getCaretPosition()がプラスチックとして返されたばかりであることがわかりました。これは現在のカーソル位置を取得するはずです。予想通りに試しました。次に、文字列スプライシングテクノロジーを実装することです。S1.Substring(0、Index) + S2 + S1.Substring(index、s1.length());
返された新しい文字列。
発生する問題:スプライシング後、出力が直接生成され、以前のコンテンツが後で新しい文字列でスプライスされます。長い間変化した後、settext(string)メソッドを呼び出す必要があることがわかりました。出力の前に、最初に前の編集ボックスに表示されているコンテンツをクリアします。最終的なリスニング関数の内容は次のとおりです。
showdate.addselectionListener(new SelectionAdapter(){ /***「時間と日付」メニューのリスニングイベントを追加*機能*機能メニューをトリガーして、編集ボックスのカーソルの終わりに現在のシステム時間を追加します* /public void widetgetselected(selectionevent e){intextext = gettext() box // system.out.println(index); getText()。settext( "");スプライシング文字列関数は次のとおりです。
public String InsertString(String S1、String S2、Int Index){ / ***文字列の挿入関数を実装*渡される3つのパラメーターは次のとおりです。元の文字列、挿入された文字列*は挿入された文字列* / return s1.substring(0、index) + s2 + s1.substring(index、s1.length、s1.length(); }2。「すべての選択」メニューを追加して、イベントを聴く
関数の説明:このメニューをトリガーして、すべてのテキストフィールド文字列を選択します
Javaの編集ボックスには、実際にすべてを選択する機能が備わっています。ははは、text.selectall()を直接呼び出すことができます。既製のコピーと貼り付けもあると推定されています。私はほとんど忘れていました。すべてを選択した後、選択したコンテンツが空であるかどうかを判断する必要があります。空でない場合は、「削除」と「カット」ボタンを設定して、次のようにすべてのコードをオプションで選択する必要があります。
selectal.addselectionListener(new SelectionAdapter(){ /***「すべて」メニューのリスニングイベントを追加*機能*機能説明:テキストフィールド内のすべてのテキストを選択し、「削除」ボタンと「カット」ボタンをオプションに設定し、パブリックボイドwidgetSelected(selectionevent e){gettext(){gettext()。 ()。getText()!= null){//コンテンツがすべて選択されていることを意味するため、「削除」ボタンをオプションの削除に設定する必要があります。3.「カット」メニュー監視イベントを追加します
関数の説明:このメニューをトリガーし、次のように編集ボックスのcut()メソッドを直接呼び出す編集ボックスのcut()メソッドコードを実現します。
cut.addselectionListener(new SelectionAdapter(){ / ***「Cut」メニューのリスニングイベントを追加*機能説明:このメニューをトリガーして、選択した文字列* / public void widgetSelected(selectionevent e){getText()。cut();}});4.「貼り付け」メニュー監視イベントを追加します
関数の説明:このメニューをトリガーし、クリップボードの内容を貼り付けて編集ボックスを直接呼び出すPaste()メソッドコードを実装してください。
Paste.AddSelectionListener(new SelectionAdapter(){ / ***「Paste」メニューのリスニングイベントを追加*機能説明:このメニューをトリガーして、クリップボードのコンテンツを編集ボックスに貼り付けます* / public void widgetSelected(SelectionEvent E){getText()。};});5.「コピー」メニューを追加して、イベントを聴きます
関数の説明:このメニューをトリガーし、選択したコンテンツを次のようにコピーして編集ボックスを直接呼び出すコピー()メソッドコードを実装します。
copy.AddSelectionListener(new SelectionAdapter(){ / ***「カット」メニューのリスニングイベントを追加*機能説明:このメニューをトリガーして、選択した文字列* / public void widgetSelected(selectionevent e){text.copy();}6.「元に戻す」メニュー監視イベントを追加します
関数の説明:このメニューをトリガーし、現在の操作を元に戻し、この関数に関与するアルゴリズムを元に戻します。とりあえず、このメモ帳はボタン元に戻す方法をサポートしていませんが、右クリックの元に戻すことをサポートします(右クリックの元に戻すと書かれていないときにJavaテキストコンポーネントが付属しています、ハハ)
7.「検索」メニューを追加して、イベントを聴きます
関数の説明:このメニューをトリガーし、検索操作を実行します
find.AddSelectionListener(new SelectionAdapter(){ / ** *検索機能を追加するためのダイアログボックス、[検索]をクリックする必要があり、[ダイアログ]ボックスがポップアップ表示され、[検索] widgetSelected(SelectionEvent e){findwindow fw = new findwindow(swt.dialog_trim); fw.dialog_trim);4.イベントリスニング機能(3)補助クラスを追加します
メニューバーのいくつかのメニューイベントに加えて、キーボードイベントを聴く必要もあります。つまり、キーボードがテキストフィールドをタイプすると、関連するメニューの表示がトリガーされます。
1。テキストフィールドのリスニング
getText()。addKeyListener(new keyAdapter(){/***キーボードリスニングイベントを設定*キーボードタイピングがある場合、関連するボタンを目に見えるように設定する必要があります。 find.setEnable(true);2。「フォント」メニューのイベントリスニング機能を実装します
コードは次のとおりです。
setFont.AddSelectionListener(new SelectionAdapter(){ / ***フォントのリスニングイベントを設定* / public void widgetSelected(SelectionEvent E){fontdialog fontdialog = new fontdialog(shell、swt.none); fontdialog.setfontlist(oldfont.getfontdata} fontdialog.open(); if(oldfont!= null){oldfont.dispose()}});五。フォームタグ設定
メイン関数をテストクラスに抽出し、メモ帳の形式のタイトルをパラメーター化し、初期ラベルをメイン関数に渡します。
パラメーターコンストラクターは、フォームクラスmain_windowで定義され、渡されたパラメーターは次のようにタイトル名コンストラクターです。
main_window(string titlename){ / ***パラメーターコンストラクトで渡されたパラメーターは、ファイル名* / this.titlename = titlename; }注:ソフトウェアのタイトルは次のとおりです。ファイルを開くときに、タイトルが開かれたファイル名です。保存されたファイル名を保存するとき、タイトルは保存されたファイル名です。ファイル名を保存するときは、保存されたファイル名です。ファイル名を取得する方法(パスを含まない)は次のとおりです。
shlnotepad.settext((new file(filedir.trim()))。getname()); //ファイル名を取得(パスを除く)
簡単にするために、私はそれを文章として略しました
プログラムアイコンを設定し、プロジェクトディレクトリに入れて、使用するために直接導入できます
考え:ユーザーに保存するかどうかを促すと、パスが空であるかどうかを確認することはできません。キーボードが押されているかどうか、つまり、変更があるかどうか、コンテンツが変更されたかどうかを確認する必要があります(右クリックして直接削除し、キーボードを通過していない場合があります)
6.他の3つのダイアログダイアログボックスの定義
1.ダイアログボックスを見つけます
また、新しく作成されたパッケージを右クリックしますnew-> other-> windowbuilder-> swt Designer-> swt-> nikerog nike findwindow
結果は次のとおりです。
このウィンドウは、ここで共有されており、次の場所の検索、交換、検索を行います。検索コンテンツ編集ボックスは、ボタンをクリックするとトリガーできます。検索コンテンツ編集ボックスと交換ボックスは空ではありません。交換機能をトリガーできます。次の検索のリストと、次の場所を検索する交換方法本体のリストです。
アイデア:最初にメインウィンドウのすべての文字列を取得し、検索する必要があるコンテンツを取得し、Javaが提供する検索文字列関数を直接呼び出して開始インデックスを取得し、検索コンテンツをレンダリングする必要がある文字列長の長さに追加し、メインウィンドウのレンダリング関数を呼び出して表示して表示します。
特定のコードは次のとおりです。
find_next.addselectionListener(new SelectionAdapter(){@Override public void widgetSelected(parestr = util.shell.getText_1(); //メインウィンドウテキストボックスコンテンツを取得するTrue index = parestexof = parestexof(textContent.getText()、index); joptionpane.showmessageialog(null、 ""+textcontent.getText()+"/" "、" notepad "、joptionpane.error_message)} index+textcontent.getText(); index+textContent.getText()。length()});交換ボタンは、次のようにイベントをトリガーします。
交換btn.addselectionListener(new SelectionAdapter(){ /*** Butth Eventを交換* /public void widgetSelected(SelectionEvent e){parestr = util.shell.getText_1(); util.shell.showtext(parestr)});2。AboutAuthorダイアログボックスの確立
このダイアログボックスの作成は、[検索]ダイアログボックスと同じです。 Authorについて名前を付けてください。特定のレンダリングは次のとおりです。
このダイアログボックスには、関連するアルゴリズムは含まれません。 3つのJLabelタグを追加し、3つの文を入力します。
3。GO_TOダイアログボックスの確立
ダイアログボックスを作成する方法についてはあまり言いません。特定のレンダリングは次のとおりです。
コードの実装は次のとおりです。
Queding.AddSelectionListener(new SelectionAdapter(){ / ***特定の行にジャンプすることを確認* / public void widgetSelected(SelectionEvent e){int n = integer.parseint(goto_line.getText()); goto_line.settext( "" + n + ");メインウィンドウでgotooneLine()メソッドを呼び出します
public void gotooneLine(int row){getText()。setSelection(row); }この時点で、メモ帳全体の一般的な機能が完了しました
7。概要
執筆の初めから最終完了まで、約2〜3日かかりました。関連するアルゴリズムをたくさん学びました。 Javaプログラミングは非常に便利です。多くの方法は、自分で実装する必要はありません。直接呼び出すことができます。ただし、Javaには多くの欠点もあります。たとえば、Javaが所有するダイアログボックスを使用してウィンドウを閉じました。 The result was particularly stuck. If you are interested, you can customize the exit dialog box. Just change the included three-choice dialog box to a custom dialog box. At the same time, the previous one was only for learning and did not consider the efficiency of the algorithm. For example, opening a file operation, it only implemented the function, but did not consider the timeliness of the algorithm. The method used in this example is to read the file by line. You can try to open a text document with thousands of lines by yourself, and you can feel the importance of the algorithm. Also, upward search has not been implemented. The preliminary idea is: find the coordinates that need to be found, and then start to go back from the position of the coordinates you are looking for, and invert the search content, and then call the string search function that comes with Java.
例えば:
母串为“ab记事本def3g” 需要从”3”这个字符串开始向前查找”记事本”字符串,可将母串中”3”字符串所在位置之前的字符串”ab记事本def”完全倒置为”g3fed本事记ba” 将查找内容也倒置成”本事记” 再调用Java内带的字符串查找函数查找所在位置,再还原即可。
以上就是手把手编写记事本的详细步骤,Java基于SWT插件编写桌面记事本应用程序,希望对大家的学习有所帮助。