アプリケーションにおける『会話数』は、ウインドウ数にあたり、2会話目を終了するか、キャンセルしない限り1会話目の結果を変更する事ができないというルールを守る事によって、矛盾の無いデータの処理を行う事が可能になります。
その為に必要な一般的な処理として、1会話目の画面状態の作成、1会話目の画面状態から2会話の画面状態への変更( 画面遷移 )、2会話目の画面に表示されたものを全て消去して初期化する、という3つの処理が必要になります。
PassControl クラス
private class PassControl { // 第一会話を使用可能にし、第二会話を使用不能にする // フォーカスコントロール public void pass1Enable() { syainCode.setEnabled(true); checkButton.setEnabled(true); syainName.setEnabled(false); syainFuri.setEnabled(false); syainSyozoku.setEnabled(false); syainSex.setEnabled(false); syainKyuyo.setEnabled(false); syainTeate.setEnabled(false); syainKanri.setEnabled(false); syainBirth.setEnabled(false); updateButton.setEnabled(false); cancelButton.setEnabled(false); syainCode.selectAll(); syainCode.requestFocusInWindow(); } // 第二会話を使用可能にし、第一会話を使用不能にする // フォーカスコントロール public void pass2Enable() { syainCode.setEnabled(false); checkButton.setEnabled(false); syainName.setEnabled(true); syainFuri.setEnabled(true); syainSyozoku.setEnabled(true); syainSex.setEnabled(true); syainKyuyo.setEnabled(true); syainTeate.setEnabled(true); syainKanri.setEnabled(true); syainBirth.setEnabled(true); updateButton.setEnabled(true); cancelButton.setEnabled(true); syainName.selectAll(); syainName.requestFocusInWindow(); } // 第二会話の入力項目をクリアする // 選択コントロール public void clearDetailes() { syainSyozokuName.setEditable(false); syainSyozokuName.setEnabled(true); syainSyozokuName.setFocusable(false); syainKanriName.setEditable(false); syainKanriName.setEnabled(true); syainKanriName.setFocusable(false); syainName.setText(""); syainFuri.setText(""); syainSyozoku.setText(""); syainSyozokuName.setText(""); // コンボボックス非選択 syainSex.setSelectedIndex(-1); syainKyuyo.setText(""); syainTeate.setText(""); syainKanri.setText(""); syainKanriName.setText(""); syainBirth.setText(""); } }
PassControl クラスは、機能をまとめたものであり、メソッドを実行する事が目的なので、private で作成します。( メソッドを3つ作成しても大差はありません ) Eclipse で private クラスを作成するには、手作業で書いたほうが早いですが、一般的なクラス作成のダイアログで『エンクロージング型』にチェックする事で対話的にブロックを作成できます。 ブロックのソース上の位置は、『アウトラインウインドウ』でドラッグして変更できます。 ※ インスタンスは、private 変数として定義すると同時に作成しています 初期画面は、passControl.clearDetailes(); と passControl.pass1Enable(); で作成され、キャンセルボタンでも、passControl.clearDetailes(); と passControl.pass1Enable(); が実行されます。社員マスタの内容が表示された時にのみ、passControl.pass2Enable() が実行されます。 その他の画面コントロール (1) Enter キーを TAB キーと同等に扱い、次のフィールドへの移動に使用する
addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent arg0) { MainWindow.this.setLocationRelativeTo(null); // 接続文字列を作成して、Rdbms のインスタンスを作成 currentDir = System.getProperty("user.dir"); String connectionString = "Provider=MSDASQL" + ";Driver={Microsoft Access Driver (*.mdb)}" + ";Dbq=" + currentDir + "\\data\\販売管理C.mdb" + ";"; rdbms = new Rdbms( connectionString ); System.out.println(connectionString); passControl.clearDetailes(); passControl.pass1Enable(); // Enter キーで次のフォーカスへ移動する KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); Set<AWTKeyStroke> forwardKeys = new HashSet<AWTKeyStroke>(focusManager.getDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); forwardKeys.add(KeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0)); focusManager.setDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys); } });
(2) 表示用の入力しない JTextField は、setEnabled を使わない
// 所属名 編集不可 syainSyozokuName.setEditable(false); // 所属名 使用可 syainSyozokuName.setEnabled(true); // 所属名 フォーカスなし syainSyozokuName.setFocusable(false); // 管理者名 編集不可 syainKanriName.setEditable(false); // 管理者名 使用可 syainKanriName.setEnabled(true); // 管理者名 フォーカスなし syainKanriName.setFocusable(false);
setEnabled を使うと、表示内容が見にくい(画面上のコードが disable で内容が見にくいのが解ると思います)ので、編集不可にしてフォーカスが移動しないようにしています。 また、タブオーダーを指定する事ができないので、ボタンの位置を変更しました。 関連する記事
|
【Javaの最新記事】
- Java : Apache POI で最低限の処理を標準化( ここではワークブックは新規作成 )
- Java で JSON 文字列を オブジェクトに変換する Google Gson の基本 4 パターン
- Java のコンソールで NAVER の RSS を取得して、title 部分を正規表現で加工して表示するサンプル
- Eclipse で、文字列内のファイルのパスの \ 記号を \\ にする方法
- Java : Google gson 2.3.1 で JSON 文字列を定義済みのクラスを使ってオブジェクト化
- Java : Google gson 2.3.1 で、JSON 文字列のフォーマットが解らなくてもなんとかなる『ベタ』な処理方法
- Eclipse のホバーで追加したライブラリの javadoc を表示させる手順
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の更新(データ修正)処理
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)の入力チェック
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)でDBからSELECT構文で行データを読み出す
- Eclipse+WindowBuilder : ボタンイベント(AbstractAction) の作成
- Eclipse+WindowBuilder : データベースアプリケーション(社員マスタメンテ)の画面作成
- Eclipse + WindowBuilder : JDBC と ODBC を使った、オールマイティなデータベース接続サンプル( MySQL / SQLServer / Oracle / Postgr..
- Eclipse + WindowBuilder : Design タブが表示されなくなった時の対処
- Eclipse のパンくずリスト(breadcrumb) をワークスペースの設定ファイルで非表示にする
- Java : Eclipse 実行の System.in.read(buff) でコンソール入力
- iText( itextpdf-5.4.3 / Java ) で簡単に PDF 出力をする。
- SQL 文へのデータバインド用 public class GetSQL
- ADT( Android Development Tools ) Eclipse に Window Builder をインストールして Swing アプリケーションを作成する(2)
- Java : Windows の環境変数の列挙( 含ソート )