package open.dolphin.order; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.ResourceBundle; import java.util.concurrent.ExecutionException; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.table.TableColumn; import javax.swing.text.JTextComponent; import open.dolphin.client.AutoKanjiListener; import open.dolphin.client.ClientContext; import open.dolphin.delegater.OrcaDelegater; import open.dolphin.delegater.OrcaDelegaterFactory; import open.dolphin.infomodel.*; import open.dolphin.project.Project; import open.dolphin.table.ListTableModel; import open.dolphin.table.StripeTableCellRenderer; import open.dolphin.util.StringTool; import open.dolphin.util.ZenkakuUtils; /** * * @author Kazushi Minagawa, Digital Globe, Inc. */ public final class RpEditor extends AbstractStampEditor { private String[] COLUMN_NAMES ; private String[] METHOD_NAMES; private int[] COLUMN_WIDTH; private int ONEDAY_COLUMN; private int BUNDLE_COLUMN; private String[] SR_COLUMN_NAMES; private String[] SR_METHOD_NAMES; private int[] SR_COLUMN_WIDTH; private int SR_NUM_ROWS; private String[] ADMIN_CODE_REGEXP; private String IN_MEDICINE; private String EXT_MEDICINE; private String[] RP_CODE; private String[] BUNDLE_MEMO; // 再編集の場合に保存しておくレセ電算コード private String saveReceiptCode; private IRpView view; private ListTableModel<MasterItem> tableModel; private ListTableModel<TensuMaster> searchResultModel; private int naiGaiTon; private int inExt; ////s.oh^ 2014/07/11 スタンプエディタのフォーカス制御 // private boolean editCellStart; // private boolean editCellEnter; ////s.oh$ @Override public JPanel getView() { return (JPanel)view; } @Override public void dispose() { if (tableModel != null) { tableModel.clear(); } if (searchResultModel != null) { searchResultModel.clear(); } super.dispose(); } private ModuleModel createModuleModel() { ModuleModel retModel = new ModuleModel(); BundleMed med = new BundleMed(); retModel.setModel(med); // StampInfoを設定する ModuleInfoBean moduleInfo = retModel.getModuleInfoBean(); moduleInfo.setEntity(getEntity()); moduleInfo.setStampRole(IInfoModel.ROLE_P); // スタンプ名を設定する String stampName = view.getStampNameField().getText().trim(); if (!stampName.equals("")) { moduleInfo.setStampName(stampName); } else { moduleInfo.setStampName(getDefaultStampName()); } return retModel; } @Override public Object getValue() { ModuleModel ret = createModuleModel(); BundleMed bundle = (BundleMed) ret.getModel(); List<MasterItem> items = tableModel.getDataProvider(); // 頓用がチェックされているかどうか if (view.getTonyoChk().isSelected()) { naiGaiTon = 220; // 内容=210,頓用=220, 外用=230, 臨時=290 } else if (view.getTemporalChk().isSelected()) { naiGaiTon = 290; } else { naiGaiTon = 0; } // 院内処方 or 院外処方 inExt = view.getInRadio().isSelected() ? 1 : 2; for (MasterItem mItem : items) { switch(mItem.getClassCode()) { case ClaimConst.YAKUZAI: bundle.addClaimItem(masterToClaimItem(mItem)); if (naiGaiTon == 0) { if (mItem.getYkzKbn() != null) { // 頓用でない場合は剤型区分で内用か外用を決める String test = mItem.getYkzKbn(); if (test.equals(ClaimConst.YKZ_KBN_NAIYO)) { naiGaiTon = 210; // 内用 } else if (test.equals(ClaimConst.YKZ_KBN_GAIYO)) { naiGaiTon = 230; // 外用 } } } break; case ClaimConst.ADMIN: String target = ClientContext.getClaimBundle().getString("REG_ADMIN_MARK"); String ommit = mItem.getName().replaceAll(target, ""); bundle.setAdmin(ommit); bundle.setAdminCode(mItem.getCode()); String bNum = trimToNullIfEmpty(mItem.getBundleNumber()); if (bNum != null) { bNum = ZenkakuUtils.toHalfNumber(bNum); bundle.setBundleNumber(bNum); } break; default: bundle.addClaimItem(masterToClaimItem(mItem)); break; } } // レセ電算コード if (naiGaiTon != 0) { // 院内処方、院外処方で区分コードを確定する String rCode = String.valueOf(naiGaiTon + inExt); bundle.setClassCode(rCode); } else { // 旧スタンプの再編集で、トン用であったものがとん用以外へ変更された場合 // 旧スタンプでは剤型区分が保存されていないため } if (bundle.getClassCode() == null) { // 既存のスタンプ if (saveReceiptCode != null) { StringBuilder sb = new StringBuilder(); // 210 -> 21 sb.append(saveReceiptCode.substring(0, 2)); if (view.getInRadio().isSelected()) { // 院内処方 sb.append("1"); // 211 } else { // 院外処方 sb.append("2"); // 212 } bundle.setClassCode(sb.toString()); } else { // 保険適用外の医薬品と用法でOKとするため bundle.setClassCode(ClaimConst.RECEIPT_CODE_NAIYO); } } // 2010-10-27 バンドルのメモを構成する // 内用(院外処方)... String cd = bundle.getClassCode(); for (int i = 0; i < RP_CODE.length; i++) { if (cd.equals(RP_CODE[i])) { bundle.setMemo(BUNDLE_MEMO[i]); break; } } if (bundle.getMemo()==null) { bundle.setMemo(view.getInRadio().isSelected() ? IN_MEDICINE : EXT_MEDICINE); } bundle.setClassCodeSystem(ClaimConst.CLASS_CODE_ID); java.util.ResourceBundle resBundle = ClientContext.getClaimBundle(); bundle.setClassName(resBundle.getString(bundle.getClassCode())); return ret; } @Override public void setValue(Object value) { // 連続して編集される場合があるのでテーブル内容等をクリアする clear(); ModuleModel target = (ModuleModel) value; if (target == null) { return; } // Entityを保存する setEntity(target.getModuleInfoBean().getEntity()); // スタンプ名を表示する String stampName = target.getModuleInfoBean().getStampName(); boolean serialized = target.getModuleInfoBean().isSerialized(); ResourceBundle bdl = ClientContext.getClaimBundle(); if (!serialized && stampName.startsWith(getStampNameFromEditor())) { stampName = getDefaultStampName(); } else if (stampName.equals("")) { stampName = getDefaultStampName(); } view.getStampNameField().setText(stampName); BundleMed med = (BundleMed) target.getModel(); if (med == null) { return; } //------------------------------- // レセ電算コードを保存する //------------------------------- boolean unknownInExt = false; if (med.getClassCode() != null) { saveReceiptCode = med.getClassCode(); // コードから頓用かどうかを判定し、チェックする if (saveReceiptCode.startsWith("22")) { view.getTonyoChk().setSelected(true); } else if (saveReceiptCode.startsWith("29")) { view.getTemporalChk().setSelected(true); } // 院内処方または院外処方をチェックする if (saveReceiptCode.endsWith("1")) { view.getInRadio().setSelected(true); } else if (saveReceiptCode.endsWith("2")) { view.getOutRadio().setSelected(true); } else { unknownInExt = true; } } // ClaimItemをMasterItemへ変換してテーブルへ追加する ClaimItem[] items = med.getClaimItem(); for (ClaimItem item : items) { tableModel.addObject(claimToMasterItem(item)); } // Save Administration if (med.getAdmin() != null) { MasterItem item = new MasterItem(); item.setClassCode(ClaimConst.ADMIN); item.setCode(med.getAdminCode()); item.setName(bdl.getString("ADMIN_MARK") + med.getAdmin()); item.setDummy("X"); String bNumber = med.getBundleNumber(); bNumber = ZenkakuUtils.toHalfNumber(bNumber); item.setBundleNumber(bNumber); tableModel.addObject(item); } // Memo if (unknownInExt) { String memo = med.getMemo(); if (memo != null && memo.equals(IN_MEDICINE)) { view.getInRadio().setSelected(true); } else { view.getOutRadio().setSelected(true); } } checkValidation(); } @Override protected void search(final String text, boolean hitRettun) { boolean pass = true; pass = pass && ipOk(); final int searchType = getSearchType(text, hitRettun); pass = pass && (searchType!=TT_INVALID); pass = pass && (searchType!=TT_LIST_TECH); if (!pass) { return; } // 件数をゼロにしておく view.getCountField().setText("0"); SwingWorker worker = new SwingWorker<List<TensuMaster>, Void>() { @Override protected List<TensuMaster> doInBackground() throws Exception { OrcaDelegater dao = OrcaDelegaterFactory.create(); String d = new SimpleDateFormat("yyyyMMdd").format(new Date()); List<TensuMaster> result = null; switch (searchType) { case TT_LIST_TECH: break; case TT_TENSU_SEARCH: String ten = text.substring(3); result = dao.getTensuMasterByTen(ZenkakuUtils.toHalfNumber(ten), d); break; case TT_CODE_SEARCH: result = dao.getTensuMasterByCode(ZenkakuUtils.toHalfNumber(text), d); break; case TT_LETTER_SEARCH: result = dao.getTensuMasterByName(StringTool.hiraganaToKatakana(text), d, view.getPartialChk().isSelected()); //s.oh^ 2013/11/08 傷病名検索不具合 if(result == null || result.size() <= 0) { result = dao.getTensuMasterByName(text, d, view.getPartialChk().isSelected()); } //s.oh$ break; } return result; } @Override protected void done() { try { List<TensuMaster> result = get(); searchResultModel.setDataProvider(result); int cnt = searchResultModel.getObjectCount(); view.getCountField().setText(String.valueOf(cnt)); Rectangle r = view.getSearchResultTable().getCellRect(0, 0, true); view.getSearchResultTable().scrollRectToVisible(r); } catch (InterruptedException ex) { } catch (ExecutionException ex) { alertSearchError(ex.getMessage()); } } }; worker.execute(); } private void getUsage(final String regExp) { if (!ipOk()) { return; } // 件数をゼロにしておく view.getCountField().setText("0"); SwingWorker worker = new SwingWorker<List<TensuMaster>, Void>() { @Override protected List<TensuMaster> doInBackground() throws Exception { OrcaDelegater dao = OrcaDelegaterFactory.create(); String d = new SimpleDateFormat("yyyyMMdd").format(new Date()); List<TensuMaster> result = dao.getTensuMasterByCode(regExp, d); return result; } @Override protected void done() { try { List<TensuMaster> result = get(); searchResultModel.setDataProvider(result); int cnt = searchResultModel.getObjectCount(); view.getCountField().setText(String.valueOf(cnt)); } catch (InterruptedException ex) { } catch (ExecutionException ex) { alertSearchError(ex.getMessage()); } } }; worker.execute(); } @Override protected void checkValidation() { setIsEmpty = tableModel.getObjectCount() == 0; if (setIsEmpty) { view.getStampNameField().setText(getDefaultStampName()); } setIsValid = true; // 薬剤またはその他と用法があること int medCnt = 0; int useCnt = 0; int other = 0; List<MasterItem> itemList = tableModel.getDataProvider(); for (MasterItem item : itemList) { if (item.getClassCode() == ClaimConst.YAKUZAI) { medCnt++; } else if (item.getClassCode() == ClaimConst.ADMIN) { useCnt++; //s.oh^ 2014/08/08 スタンプ編集制御 } else { //} else if(Project.getBoolean("masteritem.all.permission")) { //s.oh$ // 2010-03-09 // 保険適用外医薬品等を許可する // ただし何かは不明 other++; } } setIsValid = setIsValid && (medCnt > 0 || other > 0); setIsValid = setIsValid && (useCnt == 1); // ButtonControl view.getClearBtn().setEnabled(!setIsEmpty); view.getOkCntBtn().setEnabled(setIsValid && getFromStampEditor() && !modifyFromStampHolder); view.getOkBtn().setEnabled(setIsValid && getFromStampEditor()); view.getMedicineCheck().setSelected((medCnt > 0)); view.getUsageCheck().setSelected((useCnt == 1)); // 通知する super.checkValidation(); } @Override protected void addSelectedTensu(TensuMaster tm) { // 項目の受け入れ試験 String test = tm.getSlot(); if (passPattern==null || (!passPattern.matcher(test).find())) { Toolkit.getDefaultToolkit().beep(); return; } // MasterItem に変換する MasterItem item = tensuToMasterItem(tm); // item が用法であった場合、テーブルのアイテムをスキャンし、外用薬があった場合は数量を1にする if (item.getClassCode()==ClaimConst.ADMIN) { List<MasterItem> list = tableModel.getDataProvider(); if (list!=null) { for (MasterItem mi : list) { if (mi.getYkzKbn()!=null && mi.getYkzKbn().equals(ClaimConst.YKZ_KBN_GAIYO)) { item.setBundleNumber("1"); break; } } } } // 医薬品名をスタンプ名の候補にする String name = view.getStampNameField().getText().trim(); if (name.equals("") || name.equals(getDefaultStampName())) { view.getStampNameField().setText(item.getName()); } // テーブルへ追加する tableModel.addObject(item); // バリデーションを実行する checkValidation(); } @Override protected void clear() { tableModel.clear(); view.getStampNameField().setText(getDefaultStampName()); //s.oh^ 2014/06/30 頓用/臨時のクリア view.getTonyoChk().setSelected(false); view.getTemporalChk().setSelected(false); //s.oh$ checkValidation(); } private final void initComponents() { // Resource Injection ResourceBundle bundle = ClientContext.getMyBundle(RpEditor.class); // セットテーブルのカラム名 String line = bundle.getString("columnNames.setTable"); COLUMN_NAMES = line.split(","); // セットテーブルのMethod名 line = bundle.getString("methods.setTable"); METHOD_NAMES = line.split(","); // カラム幅等 COLUMN_WIDTH = new int[]{50, 200, 10, 10, 10}; ONEDAY_COLUMN = 2; BUNDLE_COLUMN = 5; // マスターテーブルのカラム名 line = bundle.getString("columnNames.masterTable"); SR_COLUMN_NAMES = line.split(","); // マスターテーブルのMethod名 line = bundle.getString("methods.masterTable"); SR_METHOD_NAMES = line.split(","); // カラム幅等 SR_COLUMN_WIDTH = new int[]{10, 50, 200, 10, 10, 10}; SR_NUM_ROWS = 20; // ClaimResource ResourceBundle clb = ClientContext.getClaimBundle(); // 用法コード 正規表現 ADMIN_CODE_REGEXP = (String[])clb.getObject("ADMIN_CODE_REGEXP"); // 院内処方 IN_MEDICINE = clb.getString("PRESCRIPTION_HOSPITAL"); // 院外処方 EXT_MEDICINE = clb.getString("PRESCRIPTION_EXTERNAL"); // 処方区分 RP_CODE = (String[])clb.getObject("PRESCRIPTION_CODE"); // 処方区分名 BUNDLE_MEMO = (String[])clb.getObject("PRESCRIPTION_NAME"); // View view = editorButtonTypeIsIcon() ? new RpView() : new RpViewText(); // Info Label view.getInfoLabel().setText(this.getInfo()); view.getInfoLabel().setIcon(ClientContext.getImageIconArias("icon_info_small")); // セットテーブルを生成する tableModel = new ListTableModel<MasterItem>(COLUMN_NAMES, 0, METHOD_NAMES, null) { // 数量と回数のみ編集可能 @Override public boolean isCellEditable(int row, int col) { // 元町皮膚科 if (col == 1) { String code = (String) this.getValueAt(row, 0); return isNameEditableComment(code); } // 用法 if (col == BUNDLE_COLUMN) { String code = (String) this.getValueAt(row, 0); return (code!=null && code.startsWith(ClaimConst.ADMIN_CODE_START)); } // 数量 if (col == ONEDAY_COLUMN) { String code = (String) this.getValueAt(row, 0); boolean editableComment = isNameEditableComment(code); boolean codeIsAdmin = (code!=null && code.startsWith(ClaimConst.ADMIN_CODE_START)); boolean codeIs82Comment = (is82Comment(code)); return (code != null && !editableComment && !codeIsAdmin && !codeIs82Comment); } return false; } @Override public void setValueAt(Object o, int row, int col) { MasterItem mItem = getObject(row); if (mItem == null) { return; } String value = (String) o; if (value != null) { value = value.trim(); } // コメント編集 元町皮膚科 if (col == 1 && isNameEditableComment(mItem.getCode())) { mItem.setName(value); return; } // null if (value == null || value.equals("")) { boolean test = (col == ONEDAY_COLUMN && (mItem.getClassCode()==ClaimConst.SYUGI || mItem.getClassCode()==ClaimConst.OTHER)); if (test) { mItem.setNumber(null); mItem.setUnit(null); } checkValidation(); return; } if (col == ONEDAY_COLUMN && mItem.getClassCode()!=ClaimConst.ADMIN) { mItem.setNumber(value); checkValidation(); return; } if (col == BUNDLE_COLUMN && mItem.getClassCode()==ClaimConst.ADMIN) { mItem.setBundleNumber(value); checkValidation(); } } }; JTable setTable = view.getSetTable(); setTable.setModel(tableModel); // 数量入力: リターンキーで次のセルに移動するため setTable.setCellSelectionEnabled(true); // DnD setTable.setDragEnabled(true); setTable.setDropMode(DropMode.INSERT); // INSERT setTable.setTransferHandler(new MasterItemTransferHandler()); // TransferHandler // Selection Mode setTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 選択モード setTable.setRowSelectionAllowed(true); ListSelectionModel m = setTable.getSelectionModel(); m.addListSelectionListener((ListSelectionEvent e) -> { if (e.getValueIsAdjusting() == false) { int row = view.getSetTable().getSelectedRow(); if (tableModel.getObject(row)!= null) { view.getDeleteBtn().setEnabled(true); } else { view.getDeleteBtn().setEnabled(false); } } }); // 列幅を設定する TableColumn column; int len = COLUMN_WIDTH.length; for (int i = 0; i < len; i++) { column = setTable.getColumnModel().getColumn(i); column.setPreferredWidth(COLUMN_WIDTH[i]); } //setTable.setDefaultRenderer(Object.class, new OddEvenRowRenderer()); StripeTableCellRenderer rederer = new StripeTableCellRenderer(); rederer.setTable(setTable); rederer.setDefaultRenderer(); // Set Table の行の高さ setTable.setRowHeight(ClientContext.getMoreHigherRowHeight()); // 数量カラムにセルエディタを設定する JTextField tf = new JTextField(); //s.oh^ 2014/02/24 スタンプ内項目削除不具合 //tf.addFocusListener(AutoRomanListener.getInstance()); FocusListener flRoman = new FocusListener() { @Override public void focusGained(FocusEvent e) { Object source = e.getSource(); if (source != null && source instanceof JTextComponent) { JTextComponent tc = (JTextComponent) source; if (tc.getInputContext() != null) { tc.getInputContext().setCharacterSubsets(null); } } view.getDeleteBtn().setEnabled(false); view.getClearBtn().setEnabled(false); ////s.oh^ 2014/07/11 スタンプエディタのフォーカス制御 // editCellStart = true; ////s.oh$ } @Override public void focusLost(FocusEvent e) { if(view.getSetTable().isEditing()) { view.getSetTable().getCellEditor().stopCellEditing(); } int row = view.getSetTable().getSelectedRow(); if (tableModel.getObject(row)!= null) { view.getDeleteBtn().setEnabled(true); } else { view.getDeleteBtn().setEnabled(false); } view.getClearBtn().setEnabled(!setIsEmpty); ////s.oh^ 2014/07/11 スタンプエディタのフォーカス制御 // if(editCellStart && editCellEnter) { // view.getSearchTextField().requestFocus(); // } // editCellStart = false; // editCellEnter = false; ////s.oh$ } }; FocusListener flKanji = new FocusListener() { @Override public void focusGained(FocusEvent e) { if (ClientContext.isWin()) { Object source = e.getSource(); if (source != null && source instanceof JTextComponent) { JTextComponent tc = (JTextComponent) source; if (tc.getInputContext() != null) { tc.getInputContext().setCompositionEnabled(true); } } } view.getDeleteBtn().setEnabled(false); view.getClearBtn().setEnabled(false); ////s.oh^ 2014/07/11 スタンプエディタのフォーカス制御 // editCellStart = true; ////s.oh$ } @Override public void focusLost(FocusEvent e) { if (ClientContext.isWin()) { Object source = e.getSource(); if (source != null && source instanceof JTextComponent) { JTextComponent tc = (JTextComponent) source; if (tc.getInputContext() != null) { tc.getInputContext().setCompositionEnabled(false); } } }else{ if(view.getSetTable().isEditing()) { view.getSetTable().getCellEditor().stopCellEditing(); } } int row = view.getSetTable().getSelectedRow(); if (tableModel.getObject(row)!= null) { view.getDeleteBtn().setEnabled(true); } else { view.getDeleteBtn().setEnabled(false); } view.getClearBtn().setEnabled(!setIsEmpty); ////s.oh^ 2014/07/11 スタンプエディタのフォーカス制御 // if(editCellStart && editCellEnter) { // view.getSearchTextField().requestFocus(); // } // editCellStart = false; // editCellEnter = false; ////s.oh$ } }; tf.addFocusListener(flRoman); //s.oh$ column = setTable.getColumnModel().getColumn(ONEDAY_COLUMN); DefaultCellEditor de = new DefaultCellEditor(tf); int ccts = Project.getInt("order.table.clickCountToStart", 1); de.setClickCountToStart(ccts); column.setCellEditor(de); // 診療内容カラム(column number = 1)にセルエディタを設定する 元町皮膚科 JTextField tf2 = new JTextField(); //s.oh^ 2014/02/24 スタンプ内項目削除不具合 //tf2.addFocusListener(AutoKanjiListener.getInstance()); tf2.addFocusListener(flKanji); //s.oh$ column = setTable.getColumnModel().getColumn(1); DefaultCellEditor de2 = new DefaultCellEditor(tf2); de2.setClickCountToStart(ccts); column.setCellEditor(de2); // 日数回数カラム JTextField tf3 = new JTextField(); //s.oh^ 2014/02/24 スタンプ内項目削除不具合 //tf3.addFocusListener(AutoRomanListener.getInstance()); tf3.addFocusListener(flRoman); //s.oh$ column = setTable.getColumnModel().getColumn(BUNDLE_COLUMN); DefaultCellEditor de3 = new DefaultCellEditor(tf3); de3.setClickCountToStart(ccts); column.setCellEditor(de3); ////s.oh^ 2014/07/11 スタンプエディタのフォーカス制御 // tf.addKeyListener(new KeyListener() { // @Override // public void keyTyped(KeyEvent e) {} // @Override // public void keyPressed(KeyEvent e) { // if(e.getKeyCode() == KeyEvent.VK_ENTER && editCellStart) { // editCellEnter = true; // }else{ // editCellEnter = false; // } // } // @Override // public void keyReleased(KeyEvent e) {} // }); // tf2.addKeyListener(new KeyListener() { // @Override // public void keyTyped(KeyEvent e) {} // @Override // public void keyPressed(KeyEvent e) { // if(e.getKeyCode() == KeyEvent.VK_ENTER && editCellStart) { // editCellEnter = true; // }else{ // editCellEnter = false; // } // } // @Override // public void keyReleased(KeyEvent e) {} // }); // tf3.addKeyListener(new KeyListener() { // @Override // public void keyTyped(KeyEvent e) {} // @Override // public void keyPressed(KeyEvent e) { // if(e.getKeyCode() == KeyEvent.VK_ENTER && editCellStart) { // editCellEnter = true; // }else{ // editCellEnter = false; // } // } // @Override // public void keyReleased(KeyEvent e) {} // }); ////s.oh$ // // 検索結果テーブルを生成する // JTable searchResultTable = view.getSearchResultTable(); searchResultModel = new ListTableModel<>(SR_COLUMN_NAMES, SR_NUM_ROWS, SR_METHOD_NAMES, null); searchResultTable.setModel(searchResultModel); searchResultTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); searchResultTable.setRowSelectionAllowed(true); ListSelectionModel lm = searchResultTable.getSelectionModel(); lm.addListSelectionListener((ListSelectionEvent e) -> { if (e.getValueIsAdjusting() == false) { int row = view.getSearchResultTable().getSelectedRow(); TensuMaster o = searchResultModel.getObject(row); if (o != null) { addSelectedTensu(o); searchTextField.requestFocus(); } } }); len = SR_COLUMN_WIDTH.length; for (int i = 0; i < len; i++) { column = searchResultTable.getColumnModel().getColumn(i); column.setPreferredWidth(SR_COLUMN_WIDTH[i]); } if (Project.getBoolean("masterItemColoring", true)) { searchResultTable.setDefaultRenderer(Object.class, new TensuItemRenderer(passPattern, shinkuPattern)); } else { StripeTableCellRenderer str = new StripeTableCellRenderer(); str.setTable(searchResultTable); str.setDefaultRenderer(); } searchResultTable.setRowHeight(ClientContext.getHigherRowHeight()); // 検索フィールド DocumentListener dl = new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { //s.oh^ 2014/04/14 RT検索改善 //if (view.getRtCheck().isSelected()) { // search(view.getSearchTextField().getText().trim(),false); //} SwingUtilities.invokeLater(() -> { if (view.getRtCheck().isSelected()) { search(view.getSearchTextField().getText().trim(),false); } }); //s.oh$ } @Override public void removeUpdate(DocumentEvent e) { //s.oh^ 2014/04/14 RT検索改善 //if (view.getRtCheck().isSelected()) { // search(view.getSearchTextField().getText().trim(),false); //} SwingUtilities.invokeLater(() -> { if (view.getRtCheck().isSelected()) { search(view.getSearchTextField().getText().trim(),false); } }); //s.oh$ } @Override public void changedUpdate(DocumentEvent e) { //s.oh^ 2014/04/14 RT検索改善 //if (view.getRtCheck().isSelected()) { // search(view.getSearchTextField().getText().trim(),false); //} SwingUtilities.invokeLater(() -> { if (view.getRtCheck().isSelected()) { search(view.getSearchTextField().getText().trim(),false); } }); //s.oh$ } }; searchTextField = view.getSearchTextField(); searchTextField.getDocument().addDocumentListener(dl); searchTextField.addActionListener((ActionEvent e) -> { search(view.getSearchTextField().getText().trim(),true); }); searchTextField.addFocusListener(AutoKanjiListener.getInstance()); // マスター検索ができない場合を追加 searchTextField.setEnabled(Project.canSearchMaster()); // Real Time Search boolean rt = Project.getBoolean("masterSearch.realTime", true); view.getRtCheck().setSelected(rt); view.getRtCheck().addActionListener((ActionEvent arg0) -> { Project.setBoolean("masterSearch.realTime", view.getRtCheck().isSelected()); }); // 部分一致 boolean pmatch = Project.getBoolean("masterSearch.partialMatch", false); view.getPartialChk().setSelected(pmatch); view.getPartialChk().addActionListener((ActionEvent arg0) -> { Project.setBoolean("masterSearch.partialMatch", view.getPartialChk().isSelected()); }); // 用法検索 JComboBox usage = view.getUsageCombo(); usage.addActionListener((ActionEvent ae) -> { JComboBox cb = (JComboBox)ae.getSource(); int index = cb.getSelectedIndex(); String regExp = ADMIN_CODE_REGEXP[index]; if (!regExp.equals("")) { getUsage(regExp); } }); // usage.addItemListener(new ItemListener() { // @Override // public void itemStateChanged(ItemEvent e) { // if (e.getStateChange() == ItemEvent.SELECTED) { // int index = view.getUsageCombo().getSelectedIndex(); // String regExp = ADMIN_CODE_REGEXP[index]; // if (!regExp.equals("")) { // getUsage(regExp); // } // } // } // }); // 件数フィールド countField = view.getCountField(); // 院内、院外ボタン JRadioButton inBtn = view.getInRadio(); JRadioButton outBtn = view.getOutRadio(); ButtonGroup g = new ButtonGroup(); g.add(inBtn); g.add(outBtn); boolean bOut = Project.getBoolean(Project.RP_OUT, true); outBtn.setSelected(bOut); inBtn.setSelected(!bOut); ActionListener al = (ActionEvent e) -> { boolean b = view.getOutRadio().isSelected(); Project.setBoolean(Project.RP_OUT, b); }; inBtn.addActionListener(al); outBtn.addActionListener(al); // 頓用と臨時処方 on の場合は排他制御が必要 ActionListener al2 = (ActionEvent ae) -> { JCheckBox cb = (JCheckBox)ae.getSource(); if (cb.isSelected()) { if (cb==view.getTonyoChk()) { if (view.getTemporalChk().isSelected()) { view.getTemporalChk().setSelected(false); } } else if (cb==view.getTemporalChk()) { if (view.getTonyoChk().isSelected()) { view.getTonyoChk().setSelected(false); } } } }; view.getTonyoChk().addActionListener(al2); view.getTemporalChk().addActionListener(al2); // スタンプ名フィールド view.getStampNameField().addFocusListener(AutoKanjiListener.getInstance()); // OK & 連続ボタン view.getOkCntBtn().setEnabled(false); if(editorButtonTypeIsIcon()) { view.getOkCntBtn().setIcon(ClientContext.getImageIconArias("icon_gear_small")); } ////s.oh^ 2014/10/22 Icon表示 // view.getSearchLabel().setIcon(ClientContext.getImageIconArias("icon_search_small")); ////s.oh$ view.getOkCntBtn().addActionListener((ActionEvent e) -> { boundSupport.firePropertyChange(VALUE_PROP, null, getValue()); clear(); }); // OK ボタン view.getOkBtn().setEnabled(false); if(editorButtonTypeIsIcon()) { view.getOkBtn().setIcon(ClientContext.getImageIconArias("icon_accept_small")); } view.getOkBtn().addActionListener((ActionEvent e) -> { boundSupport.firePropertyChange(VALUE_PROP, null, getValue()); dispose(); boundSupport.firePropertyChange(EDIT_END_PROP, false, true); }); // 削除ボタン view.getDeleteBtn().setEnabled(false); if(editorButtonTypeIsIcon()) { view.getDeleteBtn().setIcon(ClientContext.getImageIconArias("icon_delete_small")); } view.getDeleteBtn().addActionListener((ActionEvent e) -> { int row = view.getSetTable().getSelectedRow(); if (tableModel.getObject(row) != null) { tableModel.deleteAt(row); checkValidation(); } }); // クリアボタン view.getClearBtn().setEnabled(false); if(editorButtonTypeIsIcon()) { view.getClearBtn().setIcon(ClientContext.getImageIconArias("icon_clear_small")); } view.getClearBtn().addActionListener((ActionEvent e) -> { clear(); }); } // public RpEditor() { // super(); // } public RpEditor(String entity) { this(entity, true); } public RpEditor(String entity, boolean mode) { super(entity, mode); initComponents(); } }