Eclipse と WindowBuilder の機能を使ってできるだけ簡単にデータベースアプリケーションを作成します。『社員マスタメンテ』は、主キーが一つでシステム稼動の為に最初から必要な『マスターテーブル』の一つとして想定しています。本来は、『登録・修正・削除・一覧印刷』の機能を持つべきですが、ここでは一つのアプリケーションに一つの機能という事で簡潔にする為、『修正』のみに限定します。 データベースは、特別な環境を構築せずに使える MS Access( MDB ) を使用します。Java の接続を変更すれば、若干の SQL 変更で Oracle でも動作します。( 今回この記事では SQL を使用していませんが )関連する記事 JDBC と ODBC を使った、オールマイティなデータベース接続サンプルMDB で使用する社員マスタの CERATE 文は以下のようになります
create table [社員マスタ] ( [社員コード] VARCHAR(4) ,[氏名] VARCHAR(50) ,[フリガナ] VARCHAR(50) ,[所属] VARCHAR(4) ,[性別] INT ,[作成日] DATETIME ,[更新日] DATETIME ,[給与] INT ,[手当] INT ,[管理者] VARCHAR(4) ,[生年月日] DATETIME ,primary key([社員コード]) )
社員マスタを含んだ MDB ファイル(販売管理C.MDB)は以下からダウンロードできます アプリケーション作成で最初に行うのは画面作成です。単純なレイアウトであれば、場合によっては、設計時に既に作成されている可能性もあります。ただ、ここではアプリケーションの基本機能として、いくつかの設定が必要になります。 その最も大きなものは『2会話処理』を前提とした、2会話目のコントロールの Disable 設定です。WindowBuilder では、Design のプロパティから設定できますが、結局はコードとなってコンストラクタで実行されます。 ですが、その前に JFrame を使った WindowBuilder のプロジェクトを作成する必要があります WindowBuilder JFrame アプリケーションプロジェクト (1) ワークスペースと Javaプロジェクト 何をするにも、ワークスペースと Javaプロジェクトは必要です。他からプロジェクトをインポートする場合にも、Eclipse 側でプロジェクトが必要です。 WindowBuilder JFrame アプリケーションプロジェクト (2) JFrame クラスの作成と、JPanel の絶対レイアウト JFrame の中に JPanel が作成され、JFrame がいわゆる Window の役目をします。JPanel は、コントロールのコンテナとして機能しますが、初期状態では『絶対レイアウト』にならないので、その設定までが基本操作になります 画面作成 以下のような画面を作成して、コードに入力した値に対応する社員のデータを更新する処理です。 コードと確認ボタンは第一会話グループで、初期状態として入力可能となります。それ以外は全て第二会話グループとなり、確認ボタンでエラーがなければ、第一会話グループを入力不可に変更して、第二会話グループの入力を可能にします。その際(第二会話グループへの移行直後)、初期フォーカスは氏名となります 第二会話グループを選択すると、共通となるプロパティが表示されるので、その中の enabled のチェックが外れた状態にします。 それ以外の調整も必要ですが、以下のソースコードをそのまま使用すると、WindowBuilder が Design に同じものを表示してくれます
import java.awt.BorderLayout; import java.awt.Component; import java.awt.EventQueue; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MainWindow extends JFrame { private JPanel contentPane; private JTextField syainCode; private JTextField syainName; private JTextField syainFuri; private JTextField syainSyozoku; private JTextField syainSyozokuName; private JComboBox<String> syainSex; private JTextField syainKyuyo; private JTextField syainTeate; private JTextField syainKanri; private JTextField syainKanriName; private JTextField syainBirth; private JButton checkButton; private JButton updateButton; private JButton cancelButton; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainWindow frame = new MainWindow(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MainWindow() { addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent arg0) { MainWindow.this.setLocationRelativeTo(null); } }); setResizable(false); setTitle("\u793E\u54E1\u30DE\u30B9\u30BF\u30E1\u30F3\u30C6"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 468, 331); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); syainCode = new JTextField(); syainCode.setBounds(98, 29, 50, 19); contentPane.add(syainCode); syainCode.setColumns(10); syainName = new JTextField(); syainName.setEnabled(false); syainName.setColumns(10); syainName.setBounds(98, 85, 202, 19); contentPane.add(syainName); syainFuri = new JTextField(); syainFuri.setEnabled(false); syainFuri.setColumns(10); syainFuri.setBounds(98, 108, 202, 19); contentPane.add(syainFuri); syainSyozoku = new JTextField(); syainSyozoku.setEnabled(false); syainSyozoku.setColumns(10); syainSyozoku.setBounds(98, 131, 42, 19); contentPane.add(syainSyozoku); syainSyozokuName = new JTextField(); syainSyozokuName.setEditable(false); syainSyozokuName.setEnabled(false); syainSyozokuName.setColumns(10); syainSyozokuName.setBounds(153, 131, 147, 19); contentPane.add(syainSyozokuName); syainSex = new JComboBox<String>(); syainSex.setEnabled(false); syainSex.setModel(new DefaultComboBoxModel<String>(new String[] {"\u7537\u6027", "\u5973\u6027"})); syainSex.setBounds(98, 154, 80, 19); contentPane.add(syainSex); syainKyuyo = new JTextField(); syainKyuyo.setEnabled(false); syainKyuyo.setColumns(10); syainKyuyo.setBounds(98, 177, 96, 19); contentPane.add(syainKyuyo); syainTeate = new JTextField(); syainTeate.setEnabled(false); syainTeate.setColumns(10); syainTeate.setBounds(98, 200, 96, 19); contentPane.add(syainTeate); syainKanri = new JTextField(); syainKanri.setEnabled(false); syainKanri.setColumns(10); syainKanri.setBounds(98, 223, 42, 19); contentPane.add(syainKanri); syainKanriName = new JTextField(); syainKanriName.setEditable(false); syainKanriName.setEnabled(false); syainKanriName.setColumns(10); syainKanriName.setBounds(153, 223, 147, 19); contentPane.add(syainKanriName); syainBirth = new JTextField(); syainBirth.setEnabled(false); syainBirth.setColumns(10); syainBirth.setBounds(98, 246, 82, 19); contentPane.add(syainBirth); checkButton = new JButton("\u78BA\u8A8D"); checkButton.setBounds(333, 28, 106, 21); contentPane.add(checkButton); updateButton = new JButton("\u66F4\u65B0"); updateButton.setEnabled(false); updateButton.setBounds(333, 209, 106, 21); contentPane.add(updateButton); cancelButton = new JButton("\u30AD\u30E3\u30F3\u30BB\u30EB"); cancelButton.setEnabled(false); cancelButton.setBounds(333, 247, 106, 21); contentPane.add(cancelButton); JLabel label = new JLabel("\u30B3\u30FC\u30C9"); label.setBounds(31, 32, 67, 13); contentPane.add(label); JLabel label_1 = new JLabel("\u6C0F\u540D"); label_1.setBounds(31, 88, 67, 13); contentPane.add(label_1); JLabel label_2 = new JLabel("\u30D5\u30EA\u30AC\u30CA"); label_2.setBounds(31, 111, 67, 13); contentPane.add(label_2); JLabel label_3 = new JLabel("\u751F\u5E74\u6708\u65E5"); label_3.setBounds(31, 249, 67, 13); contentPane.add(label_3); JLabel label_4 = new JLabel("\u6240\u5C5E"); label_4.setBounds(31, 134, 67, 13); contentPane.add(label_4); JLabel label_5 = new JLabel("\u6027\u5225"); label_5.setBounds(31, 157, 67, 13); contentPane.add(label_5); JLabel label_6 = new JLabel("\u7D66\u4E0E"); label_6.setBounds(31, 180, 67, 13); contentPane.add(label_6); Component label_7 = new JLabel("\u624B\u5F53"); label_7.setBounds(31, 203, 67, 13); contentPane.add(label_7); JLabel label_8 = new JLabel("\u7BA1\u7406\u8005"); label_8.setBounds(31, 226, 67, 13); contentPane.add(label_8); } }
その他の設定 ■ windowOpened イベントを追加し、表示ウインドウを中央に表示する ※ public void setLocationRelativeTo(Component c) ■ JFrame のタイトル文字列を設定する。 ※ public void setTitle(String title) ■ ウインドウ枠のサイズ変更をできないようにする ※ public void setResizable(boolean resizable) ■ JLabel をローカル変数として定義し、それ以外は フィールドとして定義する ▼ このアイコンで、ローカルとフィールドの切り替えができます ※ 但し、ローカルから参照されているフィールドは、ローカルには戻せません 変数名の変更と、変数の定義位置の変更 プロパティウインドウの Variable プロパティを変更すると、ソース上で使用されている変数名が自動的に全て変更されます。デフォルトでは、WindowBuilder が作成するので、後からシステムの命名規則を元に変更するといいと思います。整理の為に、変数の順序もコンポーネントウインドウでドラッグする事によって変更可能です。 クラス名の変更 パッケージエクスプローラで選択して F2 キーで変更用のウインドウが表示されます ※ 選択して、右クリックの『リファクタリング』の中にもあります コントロールの複製 ある程度プロパティを変更したものをそのまま複製したい場合は、デザイン画面上で選択して、CTRL+C から CTRL + V を実行すると、プロパティの複製されたコントロールを貼り付ける事のできるカーソルに変化します。 ( ESC で解除 ) 関連する記事
|
【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アプリケーション(社員マスタメンテ)の二会話画面制御
- Eclipse+WindowBuilder : DBアプリケーション(社員マスタメンテ)でDBからSELECT構文で行データを読み出す
- Eclipse+WindowBuilder : ボタンイベント(AbstractAction) の作成
- 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 の環境変数の列挙( 含ソート )