アプリケーションにおける『会話数』は、ウインドウ数にあたり、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 の環境変数の列挙( 含ソート )


ブロックのソース上の位置は、『アウトラインウインドウ』でドラッグして変更できます。
※ インスタンスは、private 変数として定義すると同時に作成しています
初期画面は、passControl.clearDetailes(); と passControl.pass1Enable(); で作成され、キャンセルボタンでも、passControl.clearDetailes(); と passControl.pass1Enable(); が実行されます。社員マスタの内容が表示された時にのみ、passControl.pass2Enable() が実行されます。
その他の画面コントロール
(1) Enter キーを TAB キーと同等に扱い、次のフィールドへの移動に使用する
関連する記事




