5月6日 ゴールデンウィークで少し時間があるのか,こうしろうのEclipse3 + Visual EditorによるJavaの勉強が続く。今日はプロジェクトを作成し,GUIの構築へと進む。

 Eclipseを起動したら,ファイル-新規-プロジェクトでプロジェクトを作成する。

 club_cameraというプロジェクト名にしたが,アンダースコアなしでClubCameraなどのほうがわかりやすいぞと思うのだが,細かいことは言わないでおこう。とにかく作ってみることが大切なのだ。

 次にアプリケーションの中心となるウィンドウをSwingのJFrameクラスの派生クラスとして作成する。ファイル-新規-その他でJFrame Visual Classを選択し,名前をclub_cameraとする。public static void main(String[] args)にチェックを付け,mainメソッドの作成を指示する。アプリケーションはこのmainメソッドから開始する。

 ウィンドウのsizeプロパティを400,400に,titleプロパティを部カメラ-検索・管理に設定する。ウィンドウの外観が変わると同時にコードに反映される。次にコンテンツペイン(jContentPane)のLayoutプロパティをBorderLayoutからFlowLayoutに変更したら,Paletteからどんどん部品を載せていく。

 まず,タブ付きペイン(jTabbedPane)を配置し,PreferredSizeを適当に設定する。こうしろうは390,340にした。少しややこしいが,タブに表示する文字列(検索)はjTabbedPaneに設定するのではなく,jTabbedPane に配置したパネル(jPanel)のtab titleプロパティに記述する。タブ付きペイン には複数のパネルを配置できるからだ。

 こんどは検索条件を入力するためのパネルを先ほどのパネルの上にのっける。borderプロパティの右端のボタンをクリックするとJava Property Editorが開くので,Titleに「検索条件」と打ち込む。その上に,ラベル(jLabel 機種名)とテキストフィールド(jTextField)を配置した。

 タブ付きペインやパネルはPaletteのSwing Containersから,ラベルやテキストフィールドはSwing Componentsから配置していく。

 こんな風にペチャペチャと部品を貼り付けているだけで,以下のコードが作成される。

----------------------------------------------------------

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import javax.swing.JTabbedPane;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class club_camera extends JFrame {
private JPanel jContentPane = null;
 private JTabbedPane jTabbedPane = null;
 private JPanel jPanel = null;
 private JPanel jPanel1 = null;
 private JLabel jLabel = null;
 private JTextField jTextField = null;
 /**
 * This method initializes jTabbedPane
 * 
 * @return javax.swing.JTabbedPane
 */
 private JTabbedPane getJTabbedPane() {
  if (jTabbedPane == null) {
   jTabbedPane = new JTabbedPane();
   jTabbedPane.setPreferredSize
       (new java.awt.Dimension(390,340));
   jTabbedPane.setName("");  // Generated
   jTabbedPane.addTab("検索", null, getJPanel(), null);
  }
  return jTabbedPane;
 }
 /**
 * This method initializes jPanel
 * 
 * @return javax.swing.JPanel
 */
 private JPanel getJPanel() {
  if (jPanel == null) {
   FlowLayout flowLayout = new FlowLayout();
   flowLayout.setAlignment(java.awt.FlowLayout.CENTER); 
         // Generated
   jPanel = new JPanel();
   jPanel.setLayout(flowLayout);  // Generated
   jPanel.add(getJPanel1(), null);  // Generated
  }
  return jPanel;
 }
 /**
 * This method initializes jPanel1
 * 
 * @return javax.swing.JPanel
 */
 private JPanel getJPanel1() {
  if (jPanel1 == null) {
   jLabel = new JLabel();
   jLabel.setText("機種名:");  // Generated
   jPanel1 = new JPanel();
   jPanel1.setPreferredSize(new java.awt.Dimension(290,150));
   jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, 
        "検索条件", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); 
          // Generated
   jPanel1.add(jLabel, null);  // Generated
   jPanel1.add(getJTextField(), null);  // Generated
  }
  return jPanel1;
 }
 /**
 * This method initializes jTextField
 * 
 * @return javax.swing.JTextField
 */
 private JTextField getJTextField() {
  if (jTextField == null) {
   jTextField = new JTextField();
    jTextField.setColumns(15);  // Generated
   }
   return jTextField;
  }
  /**
  * @param args
  */
  public static void main(String[] args) {
   // TODO 自動生成されたメソッド・スタブ
  }
  /**
  * This is the default constructor
  */
  public club_camera() {
   super();
   initialize();
  }
  /**
  * This method initializes this
  * 
  * @return void
  */
  private void initialize() {
   this.setSize(400, 400);
   this.setContentPane(getJContentPane());
   this.setTitle("部カメラ―検索・管理");
  }
  /**
  * This method initializes jContentPane
  * 
  * @return javax.swing.JPanel
  */
  private JPanel getJContentPane() {
   if (jContentPane == null) {
    jContentPane = new JPanel();
    jContentPane.setLayout(new FlowLayout());
    jContentPane.setPreferredSize(new java.awt.Dimension(0,0));
    jContentPane.add(getJTabbedPane(), null);  // Generated
   }
   return jContentPane;
  }
}

----------------------------------------------------------
 ソースコードを上下させて眺めると,コード上でも階層通りに部品がのっかっていることがおわかりいただけるでしょうか。getJContentPane()-getJTabbedPane()-getJPanel()-getJPanel1()-getJTextField()とつながっている。

 Visual Editorで部品を配置すると,リアルタイムにコードが更新されるので,コードの書き方の予習にもなるだろう。