?? xiaoshoudan.java
字號:
package internalFrame;
import internalFrame.guanli.Item;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
import model.TbKhinfo;
import model.TbKucun;
import model.TbSellDetail;
import model.TbSellMain;
import model.TbSpinfo;
import model.TbUserlist;
import com.lzw.dao.Dao;
import com.lzw.login.Login;
public class XiaoShouDan extends JInternalFrame {
private final JTable table;
private TbUserlist user = Login.getUser(); // 登錄用戶信息
private final JTextField jhsj = new JTextField(); // 進貨時間
private final JTextField jsr = new JTextField(); // 經手人
private final JComboBox jsfs = new JComboBox(); // 計算方式
private final JTextField lian = new JTextField(); // 聯系人
private final JComboBox kehu = new JComboBox(); // 客戶
private final JTextField piaoHao = new JTextField(); // 票號
private final JTextField pzs = new JTextField("0"); // 品種數量
private final JTextField hpzs = new JTextField("0"); // 貨品總數
private final JTextField hjje = new JTextField("0"); // 合計金額
private final JTextField ysjl = new JTextField(); // 驗收結論
private final JTextField czy = new JTextField(user.getName());// 操作員
private Date jhsjDate;
private JComboBox sp;
public XiaoShouDan() {
super();
setMaximizable(true);
setIconifiable(true);
setClosable(true);
getContentPane().setLayout(new GridBagLayout());
setTitle("銷售單");
setBounds(50, 50, 700, 400);
setupComponet(new JLabel("銷售票號:"), 0, 0, 1, 0, false);
piaoHao.setFocusable(false);
setupComponet(piaoHao, 1, 0, 1, 140, true);
setupComponet(new JLabel("客戶:"), 2, 0, 1, 0, false);
kehu.setPreferredSize(new Dimension(160, 21));
// 供應商下拉選擇框的選擇事件
kehu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
doKhSelectAction();
}
});
setupComponet(kehu, 3, 0, 1, 1, true);
setupComponet(new JLabel("聯系人:"), 4, 0, 1, 0, false);
lian.setFocusable(false);
lian.setPreferredSize(new Dimension(80, 21));
setupComponet(lian, 5, 0, 1, 0, true);
setupComponet(new JLabel("結算方式:"), 0, 1, 1, 0, false);
jsfs.addItem("現金");
jsfs.addItem("支票");
jsfs.setEditable(true);
setupComponet(jsfs, 1, 1, 1, 1, true);
setupComponet(new JLabel("銷售時間:"), 2, 1, 1, 0, false);
jhsj.setFocusable(false);
setupComponet(jhsj, 3, 1, 1, 1, true);
setupComponet(new JLabel("經手人:"), 4, 1, 1, 0, false);
setupComponet(jsr, 5, 1, 1, 1, true);
sp = new JComboBox();
sp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TbSpinfo info = (TbSpinfo) sp.getSelectedItem();
// 如果選擇有效就更新表格
if (info != null && info.getId() != null) {
updateTable();
}
}
});
table = new JTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
initTable();
// 添加事件完成品種數量、貨品總數、合計金額的計算
table.addContainerListener(new computeInfo());
JScrollPane scrollPanel = new JScrollPane(table);
scrollPanel.setPreferredSize(new Dimension(380, 200));
setupComponet(scrollPanel, 0, 2, 6, 1, true);
setupComponet(new JLabel("品種數量:"), 0, 3, 1, 0, false);
pzs.setFocusable(false);
setupComponet(pzs, 1, 3, 1, 1, true);
setupComponet(new JLabel("貨品總數:"), 2, 3, 1, 0, false);
hpzs.setFocusable(false);
setupComponet(hpzs, 3, 3, 1, 1, true);
setupComponet(new JLabel("合計金額:"), 4, 3, 1, 0, false);
hjje.setFocusable(false);
setupComponet(hjje, 5, 3, 1, 1, true);
setupComponet(new JLabel("驗收結論:"), 0, 4, 1, 0, false);
setupComponet(ysjl, 1, 4, 1, 1, true);
setupComponet(new JLabel("操作人員:"), 2, 4, 1, 0, false);
czy.setFocusable(false);
setupComponet(czy, 3, 4, 1, 1, true);
// 單擊添加按鈕在表格中添加新的一行
JButton tjButton = new JButton("添加");
tjButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 初始化票號
initPiaoHao();
// 結束表格中沒有編寫的單元
stopTableCellEditing();
// 如果表格中還包含空行,就再添加新行
for (int i = 0; i < table.getRowCount(); i++) {
TbSpinfo info = (TbSpinfo) table.getValueAt(i, 0);
if (table.getValueAt(i, 0) == null)
return;
}
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(new Vector());
}
});
setupComponet(tjButton, 4, 4, 1, 1, false);
// 單擊銷售按鈕保存進貨信息
JButton sellButton = new JButton("銷售");
sellButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopTableCellEditing(); // 結束表格中沒有編寫的單元
clearEmptyRow(); // 清除空行
String hpzsStr = hpzs.getText(); // 貨品總數
String pzsStr = pzs.getText(); // 品種數
String jeStr = hjje.getText(); // 合計金額
String jsfsStr = jsfs.getSelectedItem().toString(); // 結算方式
String jsrStr = jsr.getText().trim(); // 經手人
String czyStr = czy.getText(); // 操作員
String rkDate = jhsjDate.toLocaleString(); // 銷售時間
String ysjlStr = ysjl.getText().trim(); // 驗收結論
String id = piaoHao.getText(); // 票號
String kehuName = kehu.getSelectedItem().toString();// 供應商名字
if (jsrStr == null || jsrStr.isEmpty()) {
JOptionPane.showMessageDialog(XiaoShouDan.this, "請填寫經手人");
return;
}
if (ysjlStr == null || ysjlStr.isEmpty()) {
JOptionPane.showMessageDialog(XiaoShouDan.this, "填寫驗收結論");
return;
}
if (table.getRowCount() <= 0) {
JOptionPane.showMessageDialog(XiaoShouDan.this, "填加銷售商品");
return;
}
TbSellMain sellMain = new TbSellMain(id, pzsStr, jeStr,
ysjlStr, kehuName, rkDate, czyStr, jsrStr, jsfsStr);
Set<TbSellDetail> set = sellMain.getTbSellDetails();
int rows = table.getRowCount();
for (int i = 0; i < rows; i++) {
TbSpinfo spinfo = (TbSpinfo) table.getValueAt(i, 0);
String djStr = (String) table.getValueAt(i, 6);
String slStr = (String) table.getValueAt(i, 7);
Double dj = Double.valueOf(djStr);
Integer sl = Integer.valueOf(slStr);
TbSellDetail detail = new TbSellDetail();
detail.setSpid(spinfo.getId());
detail.setTbSellMain(sellMain.getSellId());
detail.setDj(dj);
detail.setSl(sl);
set.add(detail);
}
boolean rs = Dao.insertSellInfo(sellMain);
if (rs) {
JOptionPane.showMessageDialog(XiaoShouDan.this, "銷售完成");
DefaultTableModel dftm = new DefaultTableModel();
table.setModel(dftm);
initTable();
pzs.setText("0");
hpzs.setText("0");
hjje.setText("0");
}
}
});
setupComponet(sellButton, 5, 4, 1, 1, false);
// 添加窗體監聽器,完成初始化
addInternalFrameListener(new initTasks());
}
// 初始化表格
private void initTable() {
String[] columnNames = {"商品名稱", "商品編號", "供應商", "產地", "單位", "規格", "單價",
"數量", "包裝", "批號", "批準文號"};
((DefaultTableModel) table.getModel())
.setColumnIdentifiers(columnNames);
TableColumn column = table.getColumnModel().getColumn(0);
final DefaultCellEditor editor = new DefaultCellEditor(sp);
editor.setClickCountToStart(2);
column.setCellEditor(editor);
}
// 初始化商品下拉選擇框
private void initSpBox() {
List list = new ArrayList();
ResultSet set = Dao.query(" select * from tb_spinfo"
+ " where id in (select id from tb_kucun where kcsl>0)");
sp.removeAllItems();
sp.addItem(new TbSpinfo());
for (int i = 0; table != null && i < table.getRowCount(); i++) {
TbSpinfo tmpInfo = (TbSpinfo) table.getValueAt(i, 0);
if (tmpInfo != null && tmpInfo.getId() != null)
list.add(tmpInfo.getId());
}
try {
while (set.next()) {
TbSpinfo spinfo = new TbSpinfo();
spinfo.setId(set.getString("id").trim());
// 如果表格中以存在同樣商品,商品下拉框中就不再包含該商品
if (list.contains(spinfo.getId()))
continue;
spinfo.setSpname(set.getString("spname").trim());
spinfo.setCd(set.getString("cd").trim());
spinfo.setJc(set.getString("jc").trim());
spinfo.setDw(set.getString("dw").trim());
spinfo.setGg(set.getString("gg").trim());
spinfo.setBz(set.getString("bz").trim());
spinfo.setPh(set.getString("ph").trim());
spinfo.setPzwh(set.getString("pzwh").trim());
spinfo.setMemo(set.getString("memo").trim());
spinfo.setGysname(set.getString("gysname").trim());
sp.addItem(spinfo);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 設置組件位置并添加到容器中
private void setupComponet(JComponent component, int gridx, int gridy,
int gridwidth, int ipadx, boolean fill) {
final GridBagConstraints gridBagConstrains = new GridBagConstraints();
gridBagConstrains.gridx = gridx;
gridBagConstrains.gridy = gridy;
if (gridwidth > 1)
gridBagConstrains.gridwidth = gridwidth;
if (ipadx > 0)
gridBagConstrains.ipadx = ipadx;
gridBagConstrains.insets = new Insets(5, 1, 3, 1);
if (fill)
gridBagConstrains.fill = GridBagConstraints.HORIZONTAL;
getContentPane().add(component, gridBagConstrains);
}
// 供應商選擇時更新聯系人字段
private void doKhSelectAction() {
Item item = (Item) kehu.getSelectedItem();
TbKhinfo khInfo = Dao.getKhInfo(item);
lian.setText(khInfo.getLian());
}
// 在事件中計算品種數量、貨品總數、合計金額
private final class computeInfo implements ContainerListener {
public void componentRemoved(ContainerEvent e) {
// 清除空行
clearEmptyRow();
// 計算代碼
int rows = table.getRowCount();
int count = 0;
double money = 0.0;
// 計算品種數量
TbSpinfo column = null;
if (rows > 0)
column = (TbSpinfo) table.getValueAt(rows - 1, 0);
if (rows > 0 && (column == null || column.getId().isEmpty()))
rows--;
// 計算貨品總數和金額
for (int i = 0; i < rows; i++) {
String column7 = (String) table.getValueAt(i, 7);
String column6 = (String) table.getValueAt(i, 6);
int c7 = (column7 == null || column7.isEmpty()) ? 0 : Integer
.valueOf(column7);
Double c6 = (column6 == null || column6.isEmpty()) ? 0 : Double
.valueOf(column6);
count += c7;
money += c6 * c7;
}
pzs.setText(rows + "");
hpzs.setText(count + "");
hjje.setText(money + "");
// /////////////////////////////////////////////////////////////////
}
public void componentAdded(ContainerEvent e) {
}
}
// 窗體的初始化任務
private final class initTasks extends InternalFrameAdapter {
public void internalFrameActivated(InternalFrameEvent e) {
super.internalFrameActivated(e);
initTimeField();
initKehuField();
initPiaoHao();
initSpBox();
}
private void initKehuField() {// 初始化客戶字段
List gysInfos = Dao.getKhInfos();
for (Iterator iter = gysInfos.iterator(); iter.hasNext();) {
List list = (List) iter.next();
Item item = new Item();
item.setId(list.get(0).toString().trim());
item.setName(list.get(1).toString().trim());
kehu.addItem(item);
}
doKhSelectAction();
}
private void initTimeField() {// 啟動進貨時間線程
new Thread(new Runnable() {
public void run() {
try {
while (true) {
jhsjDate = new Date();
jhsj.setText(jhsjDate.toLocaleString());
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
private void initPiaoHao() {
java.sql.Date date = new java.sql.Date(jhsjDate.getTime());
String maxId = Dao.getSellMainMaxId(date);
piaoHao.setText(maxId);
}
// 根據商品下拉框的選擇,更新表格當前行的內容
private synchronized void updateTable() {
TbSpinfo spinfo = (TbSpinfo) sp.getSelectedItem();
Item item = new Item();
item.setId(spinfo.getId());
TbKucun kucun = Dao.getKucun(item);
int row = table.getSelectedRow();
if (row >= 0 && spinfo != null) {
table.setValueAt(spinfo.getId(), row, 1);
table.setValueAt(spinfo.getGysname(), row, 2);
table.setValueAt(spinfo.getCd(), row, 3);
table.setValueAt(spinfo.getDw(), row, 4);
table.setValueAt(spinfo.getGg(), row, 5);
table.setValueAt(kucun.getDj() + "", row, 6);
table.setValueAt(kucun.getKcsl() + "", row, 7);
table.setValueAt(spinfo.getBz(), row, 8);
table.setValueAt(spinfo.getPh(), row, 9);
table.setValueAt(spinfo.getPzwh(), row, 10);
table.editCellAt(row, 7);
}
}
// 清除空行
private synchronized void clearEmptyRow() {
DefaultTableModel dftm = (DefaultTableModel) table.getModel();
for (int i = 0; i < table.getRowCount(); i++) {
TbSpinfo info2 = (TbSpinfo) table.getValueAt(i, 0);
if (info2 == null || info2.getId() == null
|| info2.getId().isEmpty()) {
dftm.removeRow(i);
}
}
}
// 停止表格單元的編輯
private void stopTableCellEditing() {
TableCellEditor cellEditor = table.getCellEditor();
if (cellEditor != null)
cellEditor.stopCellEditing();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -