/** GUI コンポーネントを初期化する。 */
  private void initComponents() {

    view = new NLabTestImportView();
    setUI(view);

    String[] columnNames =
        new String[] {"ラボ", "患者ID", "カナ", "カルテ・カナ", "性別", "カルテ・性別", "検体採取日", "項目数", "登録"};
    String[] propNames =
        new String[] {
          "laboCode",
          "patientId",
          "patientName",
          "karteKanaName",
          "patientSex",
          "karteSex",
          "sampleDate",
          "numOfTestItems",
          "result"
        };
    int[] columnWidth = new int[] {50, 120, 120, 120, 50, 70, 120, 50, 80};

    tableModel = new ListTableModel<NLaboImportSummary>(columnNames, 30, propNames, null);
    view.getTable().setModel(tableModel);
    view.getTable().setRowHeight(ClientContext.getHigherRowHeight());
    view.getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    view.getTable().setTransferHandler(new NLaboTestFileTransferHandler(this));

    // カラム幅を変更する
    for (int i = 0; i < columnWidth.length; i++) {
      view.getTable().getColumnModel().getColumn(i).setPreferredWidth(columnWidth[i]);
    }

    // レンダラを設定する
    view.getTable().setDefaultRenderer(Object.class, new NLaboTestImporter.LabTestRenderer());

    // カウント値0を設定する
    updateCount();
  }
 public ListTableModel<NLaboImportSummary> getTableModel() {
   return (ListTableModel<NLaboImportSummary>) view.getTable().getModel();
 }
  /** コンポーンントにリスナを登録し接続する。 */
  private void connect() {

    // ファイル選択ボタン
    view.getFileBtn()
        .addActionListener(
            new ActionListener() {

              @Override
              public void actionPerformed(ActionEvent e) {
                // ファイル選択
                selectAndParseLabFile();
              }
            });

    // 登録ボタン
    view.getAddBtn()
        .addActionListener(
            new ActionListener() {

              @Override
              public void actionPerformed(ActionEvent e) {
                // 検査結果登録
                view.getAddBtn().setEnabled(false);
                addLabtest();
              }
            });
    view.getAddBtn().setEnabled(false);

    // クリアボタン
    view.getClearBtn()
        .addActionListener(
            new ActionListener() {

              @Override
              public void actionPerformed(ActionEvent e) {
                // 検査結果登録
                getTableModel().setDataProvider(null);
              }
            });
    view.getClearBtn().setEnabled(false);

    // 行選択
    view.getTable()
        .getSelectionModel()
        .addListSelectionListener(
            new ListSelectionListener() {

              @Override
              public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting() == false) {
                  NLaboImportSummary lab =
                      getTableModel().getObject(view.getTable().getSelectedRow());
                  if (lab != null) {
                    setSelectedLabo(lab);
                  }
                }
              }
            });

    // ダブルクリック
    view.getTable()
        .addMouseListener(
            new MouseAdapter() {

              @Override
              public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                  NLaboImportSummary lab =
                      getTableModel().getObject(view.getTable().getSelectedRow());
                  if (lab != null && lab.getPatient() != null) {
                    openKarte();
                  }
                }
              }
            });

    // コンテキストメニューリスナを設定する
    view.getTable()
        .addMouseListener(
            new MouseAdapter() {

              @Override
              public void mousePressed(MouseEvent e) {
                mabeShowPopup(e);
              }

              @Override
              public void mouseReleased(MouseEvent e) {
                mabeShowPopup(e);
              }

              private void mabeShowPopup(MouseEvent e) {

                if (e.isPopupTrigger()) {

                  final JPopupMenu contextMenu = new JPopupMenu();

                  JTable table = view.getTable();
                  int row = table.rowAtPoint(e.getPoint());
                  Object obj = (Object) getTableModel().getObject(row);
                  int selected = table.getSelectedRow();

                  if (row == selected && obj != null) {
                    String pop1 = ClientContext.getString("watingList.popup.openKarte");
                    contextMenu.add(
                        new JMenuItem(
                            new ReflectAction(pop1, NLaboTestImporter.this, "openKarte")));
                  }
                  contextMenu.show(e.getComponent(), e.getX(), e.getY());
                }
              }
            });

    // data 件数リスナ
    getTableModel()
        .addPropertyChangeListener(
            new PropertyChangeListener() {

              @Override
              public void propertyChange(PropertyChangeEvent evt) {
                List<NLaboImportSummary> list = (List<NLaboImportSummary>) evt.getNewValue();
                boolean enabled = (list != null && list.size() > 0) ? true : false;
                boolean clearOk = enabled;
                if (enabled) {
                  for (NLaboImportSummary sm : list) {
                    if (sm.getKarteId() == null) {
                      enabled = false;
                      break;
                    }
                  }
                }
                view.getAddBtn().setEnabled(enabled);
                view.getClearBtn().setEnabled(clearOk);
                updateCount();
              }
            });
  }
 /**
  * 検索結果件数を設定しステータスパネルへ表示する。
  *
  * @param cnt 件数
  */
 public void updateCount() {
   int count = getTableModel().getObjectCount();
   String text = String.valueOf(count);
   text += "件";
   view.getCountLbl().setText(text);
 }