📄 frmzycf.java
字号:
package myprojects.FrmZYCF;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.events.*;
import java.util.*;
import java.sql.*;
import myprojects.FrmMenu.FrmMenu;
import myprojects.FrmZYCFDb.FrmZYCFDb;;
/**
* <p>该类用于住院处方窗体的显示和事件处理</p>
* @author 邓余林
* @version 1.0
* @see java.sql.*
* @see db.FrmZYCFDb
* @see org.eclipse.swt.*;
*/
public class FrmZYCF{
private Shell shell;
private Display display;
private FrmZYCFDb db; //数据库操作实例
private MessageBox msgBox; //错误消息框
private String strSQL; //数据库操作的SQL语句
private String strZFBL; //药品信息Group中的自费比例
private String strYPDJ; //药品信息Group中的药品单价
private String strGG; //药品信息Group中的药品规格
private String strCD; //药品信息Group中的药品产地
private String strCJ; //药品信息Group中的药品厂家
private String strJJDW; //药品信息Group中的计价单位
private String strZYH; //用户登录处方的住院号
private String strXMFL; //分类代码
private String strBLH;
private ArrayList astYPNM; //用于存放药品内码
//和收费项目输入用内码的动态数组
private static int tblItemIndex_YP; //中间表格药品信息行索引值
private static int tblItemIndex_YLFW;//中间表格医疗服务行索引值
private boolean isYPRadioSelected; //用来判断当前录入状态的flag
private boolean isInfGrpChanged; //用来判断下面信息输入Group是否有输入
private boolean isCurrentJFMX;
private boolean isCurrentFYMX;
private float fJE;
private float fZFJE;
private float fYFSum;
private float fQZZF1Sum;
private float fYLFWSum;
private float fQZZF2Sum;
private GridLayout grdLtTop; //顶部控件布局
private GridLayout grdLtZDXX; //诊断Group布局
private GridLayout grdLtYPXX; //药品Group布局
private GridLayout grdLtCmpUp; //上部按键Composite布局
private GridLayout grdLtCmpDown; //下部按键Composite布局
private GridData grdData; //GridData
private Group grpZDXX; //诊断信息Group
private Group grpYPXX; //药品信息Group
private Table tblMiddle; //中间表格
private TableColumn[] colYPXX; //中间表格的列
private TableItem item;
private String[][] saYPXXData;
private String[][] saYLFWData;
private Table tblICDInfo; //输出疾病代码后弹出的ICD信息表格
private TableColumn colICDNO; //ICD信息表格的ICD编号列
private TableColumn colICDName; //ICD信息表的疾病名称列
private TableItem itemICD; //ICD信息表的行
private Composite comGrpLeft; //grpZDXX左边的组件组合
private Composite comGrpRight; //grpZDXX右边的组件组合
private Composite comBtnGrpUp; //上面的"确定""放弃"按键组合
private Composite comBtnGrpDown; //下面的"保存""重输""返回"按键组合
private Button btnYP; //"药"
private Button btnYLFW; //"医疗服务"
private Button btnOK; //"确定"
private Button btnCancel; //"放弃"
private Button btnSave; //"保存"
private Button btnReInput; //"重输"
private Button btnBack; //"返回"
private Label lblNone; //空内容标签,用于布局
private Label lblGG; //药品规格标签
private Label lblCD; //药品产地标签
private Label lblCJ; //药品厂家标签
private Label lblYPDM; //药品代码标签
private Text txtZYH; //"住院号"
private Text txtCFYS; //"处方医师"
private Text txtCFRQ; //"处方日期"
private Text txtBRXM; //"病人姓名"
private Text txtCSRQ; //"出生日期"
private Text txtBLH; //"病历号"
private Text txtYF; //"药费"
private Text txtQZZF1; //"其中自费"
private Text txtYLFWF; //"医疗服务费"
private Text txtQZZF2; //"其中自费"
private Text txtJBDM; //"疾病代码"
private Text txtBM; //"病名"
private Text txtZD; //"诊断"
private Combo cmbYPDM; //"药品代码"
private Text txtDJ; //"单价"
private Text txtJJDW; //"计价单位"
private Text txtSL; //"数量"
private Text txtJE; //"金额"
private Text txtZFBL; //"自费比例"
private Text txtZFJE; //"自费金额"
private Text txtGG; //"规格"
private Text txtCD; //"产地"
private Text txtCJ; //"厂家"
private Text txtJFHJ; //"缴费合计"
private Text txtFYHJ; //"费用合计"
private Text txtKS; //"科室"
private Label lblMsg; //提示信息
private Font font; //表格字体
private Font itemFont; //表格行字体
private Color colRed; //红色
//Create VerifyListener
/**
* 输入验证监听器,当用户在文本框中输入文本但控件还未
* 获得该文本时调用,该监听器只允许用户输入数字和退格键
* 住院号和药品代码文本框使用此监听器
* @see createTop()#txtZYH,createGroupDown()#cmbYPDM
*/
VerifyListener lsnVrfy = new VerifyListener(){
public void verifyText(VerifyEvent event){
//Assume don't allow it
event.doit = false;
//Get the Charater typed
char myChar = event.character;
//Allow '0-9'
if(Character.isDigit(myChar)) event.doit = true;
//Allow Baskspace
if(myChar == '\b') event.doit = true;
if(myChar == SWT.DEL) event.doit = true;
}
};
/**
* 疾病代码输入框验证监听器,当用户在文本框中输入文本但控件还未
* 获得该文本时调用,该监听器只允许用户输入数字,'.'和退格键
* @see createGroupUp()#txtJBDM
*/
VerifyListener lsnVrfyJBDM = new VerifyListener(){
public void verifyText(VerifyEvent event){
//Assume don't allow it
event.doit = false;
//Get the Charater typed
char myChar = event.character;
//Allow '0-9'
if(Character.isDigit(myChar)) event.doit = true;
//Allow Baskspace
if(myChar == '\b') event.doit = true;
if(myChar == SWT.DEL) event.doit = true;
//Allow '.'
if(myChar == '.') event.doit = true;
}
};
/**
* 数量输入框验证监听器,当用户在文本框中输入文本但控件还未
* 获得该文本时调用,该监听器只允许用户输入数字,'-'和退格键
* @see createGroupDown()#txtSL
*/
VerifyListener lsnVrfySL = new VerifyListener(){
public void verifyText(VerifyEvent event){
//Assume don't allow it
event.doit = false;
//Get the Charater typed
char myChar = event.character;
//Allow '0-9'
if(Character.isDigit(myChar)) event.doit = true;
//Allow Baskspace
if(myChar == '\b') event.doit = true;
if(myChar == SWT.DEL) event.doit = true;
//Allow '-'
if(myChar == '-') event.doit = true;
}
};
/**
* 收费项目输入用代码验证监听器,当用户在文本框中输入文本
* 但控件还未获得该文本时调用,
* 该监听器只允许用户输入字母和退格键
* @see createGroupDown()#cmbYPDM
*/
VerifyListener lsnVrfySFSR = new VerifyListener(){
public void verifyText(VerifyEvent event){
//Assume don't allow it
event.doit = false;
//Get the Charater typed
char myChar = event.character;
//Allow Characters 'A-Z'
if(Character.isLetter(myChar)) event.doit = true;
//Allow Baskspace
if(myChar == '\b') event.doit = true;
if(myChar == SWT.DEL) event.doit = true;
}
};
/**
* name:main
* author:pizi
* function:application entry point
* parameters in:String[] args
* parameters out:none
* note:
*/
public static void main(){
Display display = new Display();
FrmZYCF Item=new FrmZYCF();
Item.createshell();
Item.initWidgets();
while(!Item.shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
Item.colRed.dispose();
Item.font.dispose();
Item.db.closeDB();
display.dispose();
}
/**
*name:createshell
*author:pizi
*function:create application shell and composites to display
*parameters in:none
*parameters out:none
*note:use GridLayout
**/
public void createshell(){
shell = new Shell(display,SWT.BORDER | SWT.CLOSE | SWT.MIN);
shell.setSize(764,600);
shell.setText("住院部处方");
//Create font
font = new Font(display, "Helvetica", 8, SWT.BOLD);
itemFont = new Font(display, "Arial", 10, SWT.NORMAL);
//Create Color
colRed = new Color(display,255,0,0);
//Define the Top's Layout,GridLayout with 6 columns
grdLtTop = new GridLayout(6,false);
grdLtTop.horizontalSpacing = 25;
grdLtTop.marginWidth = 16;
grdLtTop.marginHeight = 10;
shell.setLayout(grdLtTop);
//Create widgets
createTop();
createGroupUp();
createTable();
createGroupDown();
createBottom();
shell.open();
//Connection Database
db = new FrmZYCFDb();
if(db.getConnection()){
//If Database Connection failed,
//dispose shell and exit
shwErrMsgBox_Connect();
shell.getDisplay().dispose();
shell.dispose();
FrmMenu.main();
return;
}
}
/**
* name:createTop
* author:pizi
* function:create top widgets
*/
private void createTop(){
//住院号
Label lblZYH = new Label(shell,SWT.NONE);
lblZYH.setText("住院号");
//设置Label宽62
grdData = new GridData();
grdData.widthHint = 62;
lblZYH.setLayoutData(grdData);
grdData = new GridData();
txtZYH = new Text(shell,SWT.BORDER);
//设置Text宽112
grdData.widthHint=112;
txtZYH.setLayoutData(grdData);
txtZYH.setTextLimit(12);
txtZYH.setToolTipText("请输入住院号\n住院号由12位数字组成");
//住院号文本框获取焦点监听器,当文本框获得焦点时调用
txtZYH.addListener(SWT.FocusIn,new Listener(){
public void handleEvent(Event event){
if(txtZYH.getEditable()){
//添加输入验证监听器,只允许输入数字
txtZYH.addVerifyListener(lsnVrfy);
lblMsg.setText("请输入住院号\n住院号由12位数字组成");
}
}
});
// Add a handler to detect key presses for txtZYH
txtZYH.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
// End the editing and enable controls if the user presses Enter
// End the editing and throw away the text if the user presses Escape
switch (event.keyCode) {
case SWT.KEYPAD_CR:
case SWT.CR:
//移除住院号文本框的输入验证监听器
txtZYH.removeVerifyListener(lsnVrfy);
strZYH = txtZYH.getText().trim();
strSQL = "SELECT BLH FROM RCYJL WHERE ZYH='"+strZYH+"'";
//User entered right ZYH
if( db.executeQuery(strSQL) ){
//显示 病历号
try{
//住院号正确输入
if(db.rs.next()){
strBLH = db.rs.getString("BLH");
}
//住院号不存在
else{
lblMsg.setText("该住院号不存在!\n请重新输入");
txtZYH.selectAll();
txtZYH.addVerifyListener(lsnVrfy);
return;
}
}catch(SQLException se){}
//Disable txtZYH
txtZYH.setEditable(false);
txtBLH.setText(strBLH);
strSQL = "SELECT * FROM BRXX WHERE BLH='"+strBLH+"'";
if( db.executeQuery(strSQL) ){
try{
while(db.rs.next()){
//显示 病人姓名
txtBRXM.setText( db.rs.getString("BRXM") );
//显示 出生年月
txtCSRQ.setText( db.rs.getString("CSNY") );
}
}catch(SQLException se){}
}
else shwErrMsgBox_Query();
//显示 缴费合计
strSQL = "SELECT JE FROM [JFJL] WHERE JZRQ IS NULL AND ZYH='"+strZYH+"'";
float fJFHJ = 0;
if( db.executeQuery(strSQL)){
try{
while(db.rs.next()){
fJFHJ += db.rs.getFloat("JE");
}
txtJFHJ.setText( String.valueOf(fJFHJ) );
}catch(SQLException se){}
}
else shwErrMsgBox_Query();
//显示 费用合计
strSQL = "SELECT DJ,SL,ZFBL FROM View_WJZFY WHERE ZYH='"+strZYH+"'";
float fFYHJ = 0;
if( db.executeQuery(strSQL) ){
try{
while(db.rs.next()){
fFYHJ += db.rs.getFloat("DJ")*
db.rs.getInt("SL")*db.rs.getInt("ZFBL")/100;
}
}catch(SQLException se){}
txtFYHJ.setText( String.valueOf(fFYHJ) );
}
else shwErrMsgBox_Query();
//Enable controls to proceed
//重输按键设置为可用
btnReInput.setEnabled(true);
btnYP.setEnabled(true);
btnYLFW.setEnabled(true);
txtJBDM.setEditable(true);
btnCancel.setEnabled(true);
cmbYPDM.setEnabled(true);
//Set focus to cmbYPDM
cmbYPDM.setFocus();
}
else shwErrMsgBox_Query();
//Set txtKS with RCYJL.ZYKS
strSQL = "SELECT ZYKS FROM [RCYJL] WHERE ZYH='"+strZYH+"'";
if(db.executeQuery(strSQL)){
try{
if(db.rs.next()){
txtKS.setText(db.rs.getString("ZYKS"));
}
}catch(SQLException se){}
}
else shwErrMsgBox_Query();
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -