📄 historyquerypanel.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.Vector;
import javax.swing.ImageIcon;
import javax.swing.JButton;
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.servicefactory.OneRecordServiceFactory;
/**
*
* @author JingweiGroup
*
*/
public class HistoryQueryPanel extends JPanel implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JLabel title = new JLabel("鞍山仲景中医院");
JLabel subTitle = new JLabel("化验报告单");
JTextField number = new JTextField();
JTextField name = new JTextField();
JTextField sex = new JTextField();
JTextField age = new JTextField();
JTextField sample = new JTextField();
JTextField doctor = new JTextField();
JTextField purpose = new JTextField();
JTextField clinic = new JTextField();
JTextField provider = new JTextField();
JTextField date = new JTextField();
JButton queryRecord = new JButton("查找");//现在暂时定位按钮的形式,一会改成键盘事件Enter
private Vector<Vector> tableDataList = new Vector<Vector>();
private int countRows = 0;
public final String[] COLUMN_NAMES = { "参数名", "参数值", "参考值" };//字符串的个数决定生成表格的列数
JLabel jl;// 用于生成所标签
JTextField line;// 用于生成线条
private TableDataModal tableModel;
private JTable table;
private JScrollPane scrollPane = new JScrollPane();
public HistoryQueryPanel() {
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);
this.add(number);
jl = new JLabel("姓名:");// 第三行,线上一行
jl.setBounds(30, 70, 40, 20);
this.add(jl);
name.setBounds(90, 70, 70, 20);
name.setEnabled(false);
this.add(name);
jl = new JLabel("性别:");
jl.setBounds(220, 70, 40, 20);
this.add(jl);
sex.setBounds(260, 70, 40, 20);
sex.setEnabled(false);
this.add(sex);
jl = new JLabel("年龄:");
jl.setBounds(360, 70, 40, 20);
this.add(jl);
age.setBounds(400, 70, 40, 20);
age.setEnabled(false);
this.add(age);
jl = new JLabel("送检标本:");
jl.setBounds(480, 70, 80, 20);
this.add(jl);
sample.setBounds(550, 70, 40, 20);
sample.setEnabled(false);
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);
doctor.setEnabled(false);
this.add(doctor);
jl = new JLabel("检验目的:");
jl.setBounds(220, 98, 65, 20);
this.add(jl);
purpose.setBounds(280, 98, 80, 20);
purpose.setEnabled(false);
this.add(purpose);
jl = new JLabel("临床诊断:");
jl.setBounds(445, 98, 65, 20);
this.add(jl);
clinic.setBounds(510, 98, 80, 20);
clinic.setEnabled(false);
this.add(clinic);
line = new JTextField();// 第二条线
line.setBounds(20, 118, 750, 2);
line.setEditable(false);
line.setBorder(LineBorder.createBlackLineBorder());
this.add(line);
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.setEnabled(false);//设置不可编辑,选中
table.setCellSelectionEnabled(false);//防止选中的行程蓝色背景
scrollPane.setViewportView(table);
scrollPane.setBounds(100, 122, 600, 128);
this.add(scrollPane);
queryRecord.setBounds(100, 370, 60, 25);
queryRecord.addActionListener(this);
this.add(queryRecord);
jl = new JLabel("检验者:");// 第三条线上边
jl.setBounds(500, 350, 60, 20);
this.add(jl);
provider.setBounds(570, 350, 80, 20);
provider.setEnabled(false);
this.add(provider);
jl = new JLabel("报告日期:");
jl.setBounds(500, 370, 65, 20);
this.add(jl);
date.setBounds(570, 370, 80, 20);
date.setEnabled(false);
this.add(date);
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 actionPerformed(ActionEvent e) {//就一个组件上加了事件,不用判断是谁了就
// TODO Auto-generated method stub
OneRecord or = OneRecordServiceFactory.getService().execQuery(
number.getText());
if (or != null) {
name.setText(or.getName());
sex.setText(or.getSex());
age.setText(or.getAge() + "");
sample.setText(or.getSample());
doctor.setText(or.getDoctor());
purpose.setText(or.getPurpose());
clinic.setText(or.getClinic());
provider.setText(or.getProvider());
date.setText(or.getDate());
Vector<Vector> pvrList = or.getPVList();
table.editCellAt(-1, -1); //这里也用,否则会出现焦点处数据的遗留
tableModel.delAllRows();//清空上次生成的表
// System.out.println(pvrList.size());//test
tableModel.insertRows(pvrList.size());
tableModel.displayPVR(pvrList);
} else {
JOptionPane.showMessageDialog(this, "您所输入的编号不存在或非13位数字编号!");
}
}
private class TableDataModal extends AbstractTableModel {// 内部类
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 获得表格的总列数
*/
public int getColumnCount() {
return COLUMN_NAMES.length;
}
/**
* 获得表格的总行数
*/
public int getRowCount() {
return countRows;
}
/**
* 获得可编辑的单元格
*
* @param row
* 行
* @param column
* 列
*/
public boolean isCellEditable(int row, int column) {
return column == 1;// 设定只对第二列能编辑,但是其他列仍能被选定(如果table设置了setEnable(false)那么这个函数就没有用了)
}
/**
* 获得表格指定单元格的值
*
* @param row
* 行
* @param column
* 列
*/
public Object getValueAt(int row, int column) {// 此函数用于把值显示出来,如果没有的话,即使有值也不会显示
Object value = null;
// 如果指定单元格非空
if (!tableDataList.isEmpty()) {
value = tableDataList.elementAt(row).elementAt(column);
}
return value;
}
/**
* 获得指定列的列名
*
* @param column
* 指定的列
*/
public String getColumnName(int column) {
return COLUMN_NAMES[column];
}
@SuppressWarnings("unchecked")
public void setValueAt(Object value, int row, int column) {// 由此函数,输入的值不会被自动清空
tableDataList.elementAt(row).setElementAt(value, column);
fireTableDataChanged();
}
/**
* 生成制定行数的表,用于录入数据
*/
public void insertRows(int rows) {
for (int i = 0; i < rows; i++) {
Vector<Object> data = new Vector<Object>();
data.add("");// 定默认值为空
data.add("");
data.add("");
tableDataList.add(data);// 先出数据
fireTableRowsInserted(i, i);// 再出表格
countRows++;
}
table.revalidate();
}
/**
* 删除所有行
*/
public void delAllRows() {
if (countRows > 0) {
tableDataList.clear();
fireTableRowsDeleted(0, countRows - 1);
countRows = 0;
}
}
/**
* 显示查出的数据
* @param pvrList
*/
@SuppressWarnings("unchecked")
public void displayPVR(Vector<Vector> pvrList) {
for (int i = 0; i < pvrList.size(); i++) {
tableDataList.elementAt(i).set(0,
pvrList.elementAt(i).elementAt(0));
tableDataList.elementAt(i).set(1,
pvrList.elementAt(i).elementAt(1));
tableDataList.elementAt(i).set(2,
pvrList.elementAt(i).elementAt(2));
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -