📄 datarecordpanel.java
字号:
package com.asnk120.EMH.view;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
import javax.swing.table.AbstractTableModel;
import com.asnk120.EMH.model.entity.OneRecord;
import com.asnk120.EMH.model.entity.PR;
import com.asnk120.EMH.model.servicefactory.OneRecordServiceFactory;
import com.asnk120.EMH.model.servicefactory.PRServiceFactory;
import com.asnk120.EMH.model.servicefactory.ProServiceFactory;
/**
*
* @author JingweiGroup
*
*/
public class DataRecordPanel extends JPanel implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel title = new JLabel("鞍山仲景中医院");
private JLabel subTitle = new JLabel("化验报告单");
private JTextField number = new JTextField();
private JTextField name = new JTextField();
private JComboBox sex = new JComboBox(new String[] { "男", "女" });
private JTextField age = new JTextField();
private JTextField sample = new JTextField();
private JComboBox doctor = new JComboBox(new String[] { "任秀荣", "张丽梅" });
private JTextField purpose = new JTextField();
private JTextField clinic = new JTextField();
private JTextField provider = new JTextField();
private JComboBox proNameList;// 值从数据库中得到
private JComboBox year = new JComboBox();
private JComboBox month = new JComboBox();
private JComboBox day = new JComboBox();
private List<Object> dayList = new LinkedList<Object>();
private JButton recordData = new JButton("录入");
public final String[] COLUMN_NAMES = { "参数名", "参数值", "参考值" };// 字符串的个数决定生成表格的列数
public final int YEAR_START = 2008;// 规定开始和结束的可选日期,用于规定combobox中的日期
public final int YEAR_END = 2050;
private Vector<Vector> tableDataList = new Vector<Vector>();
String[] allProNames;
private JScrollPane scrollPane = new JScrollPane();
private int countRows = 0;
private TableDataModal tableModel;
private JLabel jl;// 用于生成所标签
private JTextField line;// 用于生成线条
private JTable table;
public DataRecordPanel() {
setLayout(null);
jl = new JLabel(new ImageIcon("flag.JPG"));// 图标
jl.setBounds(110, 5, 50, 50);
this.add(jl);
title.setFont(new Font("楷体", Font.BOLD, 30));// 第一行主标题
title.setBounds(220, 5, 1000, 30);
this.add(title);
subTitle.setFont(new Font("楷体", Font.BOLD, 20));// 第二行副标题
subTitle.setBounds(270, 35, 200, 25);
this.add(subTitle);
jl = new JLabel("编号:");
jl.setFont(new Font(null, Font.PLAIN, 18));
jl.setBounds(550, 35, 200, 25);
this.add(jl);
number.setBounds(610, 35, 100, 20);
number.setEnabled(false);
// number.setText("100200010");//测试,即使是设置了不可编辑或是不可用也是可以在程序中设置值的,只不过在界面中无法操作了
// setNumber();//这行存在会导致236行的错误,是应为在这之前allProNames中还没有东西,为空值,所以这条语句只能用在170行后;但是后来才发现这条语句根本就是多余的,没有它朱初始化的时候照样能生成编号
this.add(number);
jl = new JLabel("姓名:");// 第三行,线上一行
jl.setBounds(30, 70, 40, 20);
this.add(jl);
name.setBounds(90, 70, 70, 20);
this.add(name);
jl = new JLabel("性别:");
jl.setBounds(220, 70, 40, 20);
this.add(jl);
sex.setBounds(260, 70, 45, 20);
this.add(sex);
jl = new JLabel("年龄:");
jl.setBounds(360, 70, 40, 20);
this.add(jl);
age.setBounds(400, 70, 40, 20);
this.add(age);
jl = new JLabel("送检标本:");
jl.setBounds(480, 70, 80, 20);
this.add(jl);
sample.setBounds(550, 70, 40, 20);
this.add(sample);
line = new JTextField();// 第一条线
line.setBounds(20, 90, 750, 2);
line.setEditable(false);
line.setBorder(LineBorder.createBlackLineBorder());
this.add(line);
jl = new JLabel("送检医生:");// 第四行,两线之间的部分
jl.setBounds(30, 98, 65, 20);
this.add(jl);
doctor.setBounds(90, 98, 70, 20);
this.add(doctor);
jl = new JLabel("检验目的:");
jl.setBounds(220, 98, 65, 20);
this.add(jl);
purpose.setBounds(280, 98, 80, 20);
this.add(purpose);
jl = new JLabel("临床诊断:");
jl.setBounds(445, 98, 65, 20);
this.add(jl);
clinic.setBounds(510, 98, 80, 20);
this.add(clinic);
line = new JTextField();// 第二条线
line.setBounds(20, 118, 750, 2);
line.setEditable(false);
line.setBorder(LineBorder.createBlackLineBorder());
this.add(line);
// System.out.println(allProNames);//测试
allProNames = ProServiceFactory.getService().findAllProNames();// 从数据库中读取所有的项目名
// System.out.println(allProNames);//测试
if (allProNames != null) {
proNameList = new JComboBox(allProNames);
} else {
proNameList = new JComboBox();
}
proNameList.addActionListener(this);// 可以监测到值改变事件
proNameList.setBounds(25, 122, 60, 20);// 项目名
this.add(proNameList);
tableModel = new TableDataModal();// 表
table = new JTable(tableModel);
table.setBounds(100, 122, 600, 125);
Dimension size = table.getTableHeader().getPreferredSize();// 设置表头的高度
size.height = 25;
table.getTableHeader().setPreferredSize(size);
table.setRowHeight(25);
// table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);//没搞明白什么意义
tableModel.createDefaultRowsTable();// 生成默认大小的表,默认为项目列表中第一个项目对应的行数
table.setCellSelectionEnabled(false);// 防止选中的行程蓝色背景
scrollPane.setViewportView(table);
scrollPane.setBounds(100, 122, 600, 128);
this.add(scrollPane);
recordData.setBounds(100, 370, 60, 25);// 创建按钮
recordData.addActionListener(this);
this.add(recordData);
jl = new JLabel("检验者:");// 第三条线上边
jl.setBounds(500, 350, 60, 20);
this.add(jl);
provider.setBounds(570, 350, 80, 20);
this.add(provider);
jl = new JLabel("报告日期:");
jl.setBounds(500, 370, 65, 20);
setDefaultDate();
setNumber();// 这步必须有,否则初始化时不出现编号值
this.add(jl);
year.setBounds(570, 370, 60, 20);
year.addActionListener(this);
this.add(year);
month.setBounds(640, 370, 60, 20);
month.addActionListener(this);
this.add(month);
day.setBounds(710, 370, 60, 20);
day.addActionListener(this);
this.add(day);
line = new JTextField();// 第三条线
line.setBounds(20, 400, 750, 2);
line.setEditable(false);
line.setBorder(LineBorder.createBlackLineBorder());
this.add(line);
jl = new JLabel(" 注:此结果仅对此标本负责,供医生参考,如有异议请在48小时内复核");// 第三条线下边
jl.setBounds(300, 405, 500, 20);
this.add(jl);
setBounds(200, 200, 800, 500);
}
public void setNumber() {
String str = "";// 存放生成的编号,前八位为从界面中获得,后四位为根据从数据库中查找的数据成
String proName;
if (allProNames != null) {
proName = (String) proNameList.getSelectedItem();
String str1, str2, str3, str4, str5;// 编号由5部分组成年、月、日、项目号、应该到的记录号
str1 = (String) year.getSelectedItem();
str2 = (String) month.getSelectedItem();
str3 = (String) day.getSelectedItem();
str4 = dataFormat(2, ProServiceFactory.getService().findProId(
(String) proNameList.getSelectedItem()));// 在初始化的时候既不能用proNmaeList.getItemAt(0),也不能用proNameList.getSelectedItem()否则会报异常java.lang.NullpointerException
str5 = dataFormat(3, ProServiceFactory.getService().getLast3Number(
proName));
str = str1 + str2 + str3 + str4 + str5;
number.setText(str);
// System.out.println(str);//测试
}
}
public String dataFormat(int length, int aNumber) {// 可以做成连个参数的,另一个int类型,指定生成字串的位数,少的部分补零
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -