/*
 * @(#)BaseComp.java v1.0 2005/04/20
 * 
 * Copyright @ 2005 Dirspace, All Rights Reserved.
 */

/**
 * BaseComponentアプレット
 * 		自作BaseComponentを実装したテスト画面。
 * @author <table>
 *           <tr><td>Dir (dirspace@s31.xrea.com)</td><td>v1.0</td></tr>
 *          </table>
 * @version 1.0
 * @since   J2SE1.4.2_08
 */
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class BaseComp extends JApplet {

  /**	テキストフィールド格納パネル */
  JPanel pnlText = new JPanel();

  /** ボタン格納パネル */
  JPanel pnlButton = new JPanel();
  
  /** タイトルラベル */
  JLabel lblTitle = new JLabel("自作基本クラスてすと");
  
  /** ラベル名称配列 */
  String[] strLblName = {"同期ﾃｷｽﾄ1", "同期ﾃｷｽﾄ2", "ﾉｰﾏﾙﾃｷｽﾄ1"};

  /** ラベル配列 */
  JLabel[] lblArray = new JLabel[strLblName.length];
  
  /** テキスト(同期メソッド実装テキスト)配列 */
  BaseTextField[] txtSync = new BaseTextField[strLblName.length - 1];
  
  /** テキスト */
  BaseTextField txtNormal = new BaseTextField("", 10);
  
  /** ボタン */
  BaseButton btnOK = new BaseButton("OK");
  BaseButton btnCancel = new BaseButton("Cancel");
  
  /**
   * 初期処理
   */
	public void init() {
    
    // コンテントペインを取得
    Container contentPane = getContentPane();
    
    // レイアウト設定(ボーダーレイアウト)
    contentPane.setLayout(new BorderLayout());
    
    /* ラベル及び同期テキスト(txtSync)の設定 */
    // 同期テキストの要素数になるまでLOOP
    int i;
    for (i = 0; i < txtSync.length; i++) {
      lblArray[i] = new JLabel(strLblName[i]);
      txtSync[i] = new BaseTextField("", 10);
      // InnerClass内で配列のindexを使用する為、final変数にiを格納
      final int fi = i;
      // フォーカスリスナー実装
      txtSync[i].addFocusListener(new FocusListener() {
        // getFocusイベント
        public void focusGained(FocusEvent fe) {
        }
        // lostFocusイベント
        public void focusLost(FocusEvent fe) {
          // PnBaseTextField配列の同期メソッド呼出し
          txtSync[fi].synchroFieldsArray(txtSync, fi);
        }      
      });
    }
    lblArray[i] = new JLabel(strLblName[i]);
    
    // パネルにラベル及びテキストを格納
    for (i = 0; i < txtSync.length; i++) {
      pnlText.add(lblArray[i]);
      pnlText.add(txtSync[i]);
    }
    pnlText.add(lblArray[i]);
    pnlText.add(txtNormal);
    
    // KeyAdapterのインスタンス化
    PressEnter pe = new PressEnter();
    
    // OKボタンのKeyイベント設定
    btnOK.addKeyListener(pe);
    // OKボタンのActionイベント設定
    btnOK.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent ae)
      {
        btn_actionPerformed(ae);
      }
    });
    
    // CancelボタンのKeyイベント設定
    btnCancel.addKeyListener(pe);
    // CancelボタンのActionイベント設定
    btnCancel.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent ae)
      {
        btn_actionPerformed(ae);
      }
    });
    
    // パネルにボタンを格納
    pnlButton.add(btnOK);
    pnlButton.add(btnCancel);
    
    /* コンポーネントの設置 */
    contentPane.add(lblTitle, BorderLayout.NORTH);
    contentPane.add(pnlText, BorderLayout.CENTER);
    contentPane.add(pnlButton, BorderLayout.SOUTH);
  }
  
  /**
   * ボタン押下時のイベント。
   *
   * @param ae
   */
  private final void btn_actionPerformed(ActionEvent ae) {
    // OKボタンの場合
    if (ae.getSource() == btnOK) {
      JOptionPane.showMessageDialog(null, "OKボタン押下ヽ(´ー｀)ノ"
        , "OKボタンいべんと", JOptionPane.INFORMATION_MESSAGE);
    }
    // Cancelボタンの場合
    if (ae.getSource() == btnCancel) {
      for (int i = 0; i < txtSync.length; i++) {
        txtSync[i].setText(null);
      }
      txtNormal.setText(null);
      txtSync[0].requestFocus();
    }
  }
  
  
  /**
   * EnterKeyでボタン押下を行うインナークラス。
   * 
   * @author <table>
   *           <tr><td>Dir (dirspace@s31.xrea.com)</td><td>v1.0</td></tr>
   *          </table>
   * @version 1.0
   * @since J2SE1.4.2_08
   */
  class PressEnter extends KeyAdapter {
    public void keyPressed(KeyEvent ke) {
      // OKボタンの場合
      if (ke.getSource() == btnOK) {
        // エンターキーが押下された場合
        if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
          JOptionPane.showMessageDialog(null, "OKボタン押下ヽ(´ー｀)ノ"
            , "OKボタンいべんと", JOptionPane.INFORMATION_MESSAGE);
        }
      }
      // Cancelボタンの場合
      if (ke.getSource() == btnCancel) {
        // エンターキーが押下された場合
        if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
          for (int i = 0; i < txtSync.length; i++) {
            txtSync[i].setText(null);
          }
          txtNormal.setText(null);
          txtSync[0].requestFocus();
        }
      }
    }
  }
}