« スタンプ箱順番入替のインターフェース | トップページ | JBoss の server.log »

2009年2月 2日 (月)

疑い病名の入力インターフェース

スタンプ箱から病名をカルテに入力する時に,ALT キーを押しながらドロップすると「疑い病名」で入力されるようにする。TransferHandler を登録した後に,DropTarget として設定して,ドラッグしてきた病名が diagTable 上に来たときに,ALT キーが押されているかどうかを検出して action として保存し,action の値で動作を変えるしくみ。

 

client/DiagnosisDocument.java の編集

////↓
  // 病名修飾語リスト
  private static String[] DIAGNOSIS_PREP = {"右","左","両"};
  private static String[] DIAGNOSIS_PREP_CODE = {"2056","2049","2057"};
  private static String[] DIAGNOSIS_POST = {"の急性増悪","の二次感染","の再発","の術後","の治療後"};
  private static String[] DIAGNOSIS_POST_CODE = {"8061","8069","8065","8048","8075"};
  // 最終受診日=今日受診している場合は今日,していないばあいは最後の受診日
  private int lastVisit_year;
  private int lastVisit_month;
  private int lastVisit_day;
  // Stamp から drop を受け取る場合のアクション
  private int action; // 通常は MOVE で,ALT が押されていたら COPY になる
////↑
 ・
 ・
private JPanel createDignosisPanel() {
 ・
 ・
  //
  // TransferHandler を設定する
  //
  diagTable.setTransferHandler(new DiagnosisTransferHandler(this));
  diagTable.setDragEnabled(true);
        
////↓ insertStamp() でALT キーで疑い病名に変換する機能をつけるため,action を記録する
  // ALT 押した場合が COPY になり,押してないと MOVE
  DropTarget dt = new DropTarget(diagTable, new DropTargetAdapter() {

    @Override
    public void dragEnter(DropTargetDragEvent dtde) {
      action = dtde.getDropAction();
    }

    @Override
      public void dropActionChanged(DropTargetDragEvent dtde) {
        action = dtde.getDropAction();
    }

    public void drop(DropTargetDropEvent dtde) {
      diagTable.getTransferHandler().importData(diagTable, dtde.getTransferable());
      dtde.dropComplete(true); // これをしないとドラッグしてきたアイコンが逃げる
    }
  });
  dt.setActive(true);
////↑
  // Layout
 ・
 ・
 ・
private void insertStamp(StampModel sm, int row) {

  if (sm != null) {
    RegisteredDiagnosisModel module = (RegisteredDiagnosisModel) BeanUtils.xmlDecode(sm.getStampBytes());

    // 今日の日付を疾患開始日として設定する
////↓ 疾患開始日を lastVisit に設定
    //GregorianCalendar gc = new GregorianCalendar();
    GregorianCalendar gc = new GregorianCalendar(lastVisit_year, lastVisit_month, lastVisit_day);
////↑
    String today = MMLDate.getDate(gc);
    module.setStartDate(today);

////↓ デフォルトのカテゴリーをセットする
    module.setCategory(open.dolphin.infomodel.IInfoModel.DEFAULT_DIAGNOSIS_CATEGORY);
    module.setCategoryDesc(open.dolphin.infomodel.IInfoModel.DEFAULT_DIAGNOSIS_CATEGORY_DESC);
    module.setCategoryCodeSys(open.dolphin.infomodel.IInfoModel.DEFAULT_DIAGNOSIS_CATEGORY_CODESYS);
    // diagnosis に「疑い」が入っていたら,疑いにセットする
    String diag = module.getDiagnosis();
    if (diag.endsWith("の疑い")) {
      String diagCode = module.getDiagnosisCode();
      module.setDiagnosis(diag.replace("の疑い", ""));
      module.setDiagnosisCode(diagCode.replace(".8002", ""));
      module.setCategory("suspectedDiagnosis");
      module.setCategoryDesc("疑い病名");
      module.setCategoryCodeSys("MML0015");
    }
    // ALT キーが押されていたら,疑いにセットする
    if (action == java.awt.dnd.DnDConstants.ACTION_COPY) {
      module.setCategory("suspectedDiagnosis");
      module.setCategoryDesc("疑い病名");
      module.setCategoryCodeSys("MML0015");
    }
////↑
 ・
 ・

« スタンプ箱順番入替のインターフェース | トップページ | JBoss の server.log »

OpenDolphin」カテゴリの記事