?? tipwizardframe.java
字號:
package com.mwq.frame;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
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.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import com.mwq.dao.Dao;
import com.mwq.frame.check_out.DayDialog;
import com.mwq.frame.check_out.MonthDialog;
import com.mwq.frame.check_out.YearDialog;
import com.mwq.frame.manage.DeskNumDialog;
import com.mwq.frame.manage.MenuDialog;
import com.mwq.frame.manage.SortDialog;
import com.mwq.frame.user.UpdatePasswordDialog;
import com.mwq.frame.user.UserManagerDialog;
import com.mwq.mwing.MButton;
import com.mwq.mwing.MTable;
import com.mwq.tool.Today;
import com.mwq.tool.Validate;
public class TipWizardFrame extends JFrame {
private JLabel timeLabel;
private JTextField amountTextField;
private JTextField unitTextField;
private JTextField nameTextField;
private JTextField codeTextField;
private JComboBox numComboBox;
private JTextField changeTextField;
private JTextField realWagesTextField;
private JTextField expenditureTextField;
private ButtonGroup buttonGroup = new ButtonGroup();
private MTable rightTable;
private Vector<String> rightTableColumnV;
private Vector<Vector<Object>> rightTableValueV;
private DefaultTableModel rightTableModel;
private MTable leftTable;
private Vector<String> leftTableColumnV;
private Vector<Vector<Object>> leftTableValueV;
private DefaultTableModel leftTableModel;
private Vector<Vector<Vector<Object>>> menuOfDeskV;
private Dimension screenSize;
private final Dao dao = Dao.getInstance();
/**
* Launch the application
*
* @param args
*/
public static void main(String args[]) {
try {
TipWizardFrame frame = new TipWizardFrame(null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public TipWizardFrame(final Vector user) {
super();
setTitle(" T 科技");
setResizable(false);
setBounds(0, 0, 1024, 768);
setExtendedState(TipWizardFrame.MAXIMIZED_BOTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
final JLabel topLabel = new JLabel();
topLabel.setPreferredSize(new Dimension(0, 100));
topLabel.setHorizontalAlignment(SwingConstants.CENTER);
URL topUrl = this.getClass().getResource("/img/top.jpg");
ImageIcon topIcon = new ImageIcon(topUrl);
topLabel.setIcon(topIcon);
getContentPane().add(topLabel, BorderLayout.NORTH);
final JSplitPane splitPane = new JSplitPane();// 創建分割面版對象
splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);// 設置為水平分割
splitPane.setDividerLocation(755);// 設置面版默認的分割位置
splitPane.setDividerSize(10);// 設置分割條的寬度
splitPane.setOneTouchExpandable(true);// 設置為支持快速展開/折疊分割條
splitPane.setBorder(new TitledBorder(null, "",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, null, null));// 設置面版的邊框
getContentPane().add(splitPane, BorderLayout.CENTER);// 將分割面版添加到上級容器中
final JPanel leftPanel = new JPanel();// 創建放于分割面版左側的普通面版對象
leftPanel.setLayout(new BorderLayout());// 設置面板的布局管理器
splitPane.setLeftComponent(leftPanel);// 將普通面版對象添加到分割面版的左側
final JLabel leftTitleLabel = new JLabel();
leftTitleLabel.setFont(new Font("", Font.BOLD, 14));
leftTitleLabel.setPreferredSize(new Dimension(0, 25));
leftTitleLabel.setText(" 簽單列表:");
leftPanel.add(leftTitleLabel, BorderLayout.NORTH);
final JScrollPane leftScrollPane = new JScrollPane();
leftPanel.add(leftScrollPane);
menuOfDeskV = new Vector<Vector<Vector<Object>>>();
leftTableColumnV = new Vector<String>();
String leftTableColumns[] = { " ", "序 號", "商品編號", "商品名稱", "單 位",
"數 量", "單 價", "金 額" };
for (int i = 0; i < leftTableColumns.length; i++) {
leftTableColumnV.add(leftTableColumns[i]);
}
leftTableValueV = new Vector<Vector<Object>>();
leftTableModel = new DefaultTableModel(leftTableValueV,
leftTableColumnV);
leftTableModel.addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {// 通過表格模型監聽器實現自動結賬
int rowCount = leftTable.getRowCount();// 獲得簽單列表中的行數
float expenditure = 0.0f;// 默認消費 0 元
for (int row = 0; row < rowCount; row++) {// 通過循環計算消費金額
expenditure += Float.valueOf(leftTable.getValueAt(row, 7)
.toString());// 累加消費金額
}
expenditureTextField.setText(expenditure + "0");// 更新“消費金額”文本框
}
});
leftTable = new MTable(leftTableModel);
leftScrollPane.setViewportView(leftTable);
final JPanel rightPanel = new JPanel();// 創建放于分割面版右側的普通面版對象
rightPanel.setLayout(new BorderLayout());
splitPane.setRightComponent(rightPanel);// 將普通面版對象添加到分割面版的右側
final JLabel rightTitleLabel = new JLabel();
rightTitleLabel.setFont(new Font("", Font.BOLD, 14));
rightTitleLabel.setPreferredSize(new Dimension(0, 25));
rightTitleLabel.setText(" 開臺列表:");
rightPanel.add(rightTitleLabel, BorderLayout.NORTH);
final JScrollPane rightScrollPane = new JScrollPane();
rightPanel.add(rightScrollPane);
rightTableColumnV = new Vector<String>();
rightTableColumnV.add("序 號");
rightTableColumnV.add("臺 號");
rightTableColumnV.add("開臺時間");
rightTableValueV = new Vector<Vector<Object>>();
rightTableModel = new DefaultTableModel(rightTableValueV,
rightTableColumnV);
rightTable = new MTable(rightTableModel);
rightTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int rSelectedRow = rightTable.getSelectedRow();// 獲得“開臺列表”中的選中行
leftTableValueV.removeAllElements();// 清空“簽單列表”中的所有行
leftTableValueV.addAll(menuOfDeskV.get(rSelectedRow));// 將選中臺號的簽單列表添加到“簽單列表”中
leftTableModel.setDataVector(leftTableValueV, leftTableColumnV);// 刷新“簽單列表”
leftTable.setRowSelectionInterval(0);// 選中“簽單列表”中的第一行
numComboBox.setSelectedItem(rightTable.getValueAt(rSelectedRow,
1));// 同步選中“臺號”下拉菜單中的相應臺號
}
});
rightScrollPane.setViewportView(rightTable);
final JPanel bottomPanel = new JPanel();
bottomPanel.setPreferredSize(new Dimension(0, 230));
bottomPanel.setLayout(new BorderLayout());
getContentPane().add(bottomPanel, BorderLayout.SOUTH);
final JPanel orderDishesPanel = new JPanel();
orderDishesPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
bottomPanel.add(orderDishesPanel, BorderLayout.NORTH);
final JLabel numLabel = new JLabel();
numLabel.setFont(new Font("", Font.BOLD, 12));
numLabel.setText("臺號:");
orderDishesPanel.add(numLabel);
numComboBox = new JComboBox();
numComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int rowCount = rightTable.getRowCount();// 獲得開臺列表中的行數,即已開臺數
if (rowCount > 0) {// 已經有開臺
String selectedDeskNum = numComboBox.getSelectedItem()
.toString();// 獲得“臺號”下拉菜單中選中的臺號
int needSelectedRow = -1;// 默認選中的臺號未開臺
opened: for (int row = 0; row < rowCount; row++) {// 通過循環查看選中的臺號是否已經開臺
String openedDeskNum = rightTable.getValueAt(row, 1)
.toString();// 獲得已開臺的臺號
if (selectedDeskNum.equals(openedDeskNum)) {// 查看選中的臺號是否已經開臺
needSelectedRow = row;// 選中的臺號已經開臺
break opened;// 跳出循環
}
}
if (needSelectedRow == -1) {// 選中的臺號尚未開臺,即新開臺
rightTable.clearSelection();// 取消選擇“開臺列表”中的選中行
leftTableValueV.removeAllElements();// 清空“簽單列表”中的所有行
leftTableModel.setDataVector(leftTableValueV,
leftTableColumnV);// 刷新“簽單列表”
} else {// 選中的臺號已經開臺,即添加菜品
if (needSelectedRow != rightTable.getSelectedRow()) {
// “臺號”下拉菜單中選中的臺號在“開臺列表”中未被選中
rightTable.setRowSelectionInterval(needSelectedRow);// 在“開臺列表”中選中該臺號
leftTableValueV.removeAllElements();// 清空“簽單列表”中的所有行
leftTableValueV.addAll(menuOfDeskV
.get(needSelectedRow));// 將選中臺號的簽單列表添加到“簽單列表”中
leftTableModel.setDataVector(leftTableValueV,
leftTableColumnV);// 刷新“簽單列表”
leftTable.setRowSelectionInterval(0);// 選中“簽單列表”中的第一行
}
}
}
}
});
initNumComboBox();
orderDishesPanel.add(numComboBox);
final JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
orderDishesPanel.add(panel);
final JLabel codeALabel = new JLabel();
codeALabel.setFont(new Font("", Font.BOLD, 12));
codeALabel.setText(" 商品(");
final GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridy = 0;
gridBagConstraints.gridx = 0;
panel.add(codeALabel, gridBagConstraints);
final JRadioButton numRadioButton = new JRadioButton();
numRadioButton.setFont(new Font("", Font.BOLD, 12));
buttonGroup.add(numRadioButton);
numRadioButton.setText("編號");
final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();
gridBagConstraints_1.gridy = 0;
gridBagConstraints_1.gridx = 1;
panel.add(numRadioButton, gridBagConstraints_1);
final JLabel codeBLabel = new JLabel();
codeBLabel.setFont(new Font("", Font.BOLD, 12));
codeBLabel.setText("/");
final GridBagConstraints gridBagConstraints_2 = new GridBagConstraints();
gridBagConstraints_2.gridy = 0;
gridBagConstraints_2.gridx = 2;
panel.add(codeBLabel, gridBagConstraints_2);
final JRadioButton codeRadioButton = new JRadioButton();
codeRadioButton.setFont(new Font("", Font.BOLD, 12));
buttonGroup.add(codeRadioButton);
codeRadioButton.setSelected(true);
codeRadioButton.setText("助記碼");
final GridBagConstraints gridBagConstraints_3 = new GridBagConstraints();
gridBagConstraints_3.gridy = 0;
gridBagConstraints_3.gridx = 3;
panel.add(codeRadioButton, gridBagConstraints_3);
final JLabel codeCLabel = new JLabel();
codeCLabel.setText("):");
final GridBagConstraints gridBagConstraints_4 = new GridBagConstraints();
gridBagConstraints_4.gridy = 0;
gridBagConstraints_4.gridx = 4;
panel.add(codeCLabel, gridBagConstraints_4);
codeTextField = new JTextField();
codeTextField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == ' ')// 判斷用戶輸入的是否為空格
e.consume();// 如果是空格則銷毀此次按鍵事件
}
public void keyReleased(KeyEvent e) {// 通過鍵盤監聽器實現智能獲取菜品
if (e.getKeyCode() == KeyEvent.VK_ENTER) {// 按下回車鍵
makeOutAnInvoice();// 開單
} else {
String input = codeTextField.getText().trim();// 獲得輸入內容
Vector vector = null;// 符合條件的菜品集合
if (input.length() > 0) {// 輸入內容不為空
if (codeRadioButton.isSelected()) {// 按助記碼查詢
vector = dao.sMenuByCode(input);// 查詢符合條件的菜品
if (vector.size() > 0)// 存在符合條件的菜品
vector = (Vector) vector.get(0);// 獲得第一個符合條件的菜品
else
// 不存在符合條件的菜品
vector = null;
} else {// 按編號查詢
vector = dao.sMenuById(input);// 查詢符合條件的菜品
if (vector.size() > 0)// 存在符合條件的菜品
vector = (Vector) vector.get(0);// 獲得第一個符合條件的菜品
else
// 不存在符合條件的菜品
vector = null;
}
}
if (vector == null) {// 不存在符合條件的菜品
nameTextField.setText(null);// 設置“商品名稱”文本框為空
unitTextField.setText(null);// 設置“單位”文本框為空
} else {// 存在符合條件的菜品
nameTextField.setText(vector.get(3).toString());// 設置“商品名稱”文本框為符合條件的菜品名稱
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -