Untitled
unknown
java
4 years ago
16 kB
10
Indexable
package gui;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import dao.ConnectionUtils;
import models.donhang;
import models.donhangModel;
import models.khachhang;
import models.khachhangModel;
import models.laptop;
import models.laptopModel;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.sql.Date;
import java.util.List;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
public class JFrm_ThongTinDonHang extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField txtSoDH;
private JTextField txtKH;
private JTextField txtDiaChi;
private JTextField txtDienThoai;
private JFormattedTextField txtNgay;
private JTable table;
static DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
private JButton btnThoat = new JButton("Thoát");
private JButton btnSua = new JButton("Sửa");
private JButton btnXoa = new JButton("Xóa");
private JButton btnThem = new JButton("Thêm");
private JButton btnTim = new JButton("Tìm");
private JComboBox<String> cmbKH = new JComboBox<String>();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrm_ThongTinDonHang frame = new JFrm_ThongTinDonHang();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*
* @throws SQLException
* @throws ClassNotFoundException
*/
public JFrm_ThongTinDonHang() throws ClassNotFoundException, SQLException {
setTitle("Thông tin Đơn hàng");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 760, 585);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel panel_input = new JPanel();
panel_input.setLayout(null);
panel_input.setBounds(10, 11, 724, 122);
contentPane.add(panel_input);
JLabel lblSnHng = new JLabel("Số đơn hàng:");
lblSnHng.setFont(new Font("Tahoma", Font.BOLD, 14));
lblSnHng.setBounds(10, 11, 110, 19);
panel_input.add(lblSnHng);
JLabel lblHngSnXut = new JLabel("Khách Hàng:");
lblHngSnXut.setFont(new Font("Tahoma", Font.BOLD, 14));
lblHngSnXut.setBounds(10, 36, 110, 19);
panel_input.add(lblHngSnXut);
JLabel lblMT = new JLabel("Địa chỉ:");
lblMT.setFont(new Font("Tahoma", Font.BOLD, 14));
lblMT.setBounds(10, 61, 188, 19);
panel_input.add(lblMT);
txtSoDH = new JTextField();
txtSoDH.setColumns(10);
txtSoDH.setBounds(130, 12, 182, 20);
panel_input.add(txtSoDH);
txtKH = new JTextField();
txtKH.setEditable(false);
txtKH.setColumns(10);
txtKH.setBounds(322, 37, 392, 20);
panel_input.add(txtKH);
txtDiaChi = new JTextField();
txtDiaChi.setColumns(10);
txtDiaChi.setBounds(130, 62, 584, 20);
panel_input.add(txtDiaChi);
JLabel lblNewLabel_2_1_1 = new JLabel("Điện thoại:");
lblNewLabel_2_1_1.setFont(new Font("Tahoma", Font.BOLD, 14));
lblNewLabel_2_1_1.setBounds(10, 91, 110, 19);
panel_input.add(lblNewLabel_2_1_1);
txtDienThoai = new JTextField();
txtDienThoai.setColumns(10);
txtDienThoai.setBounds(130, 91, 182, 20);
panel_input.add(txtDienThoai);
JLabel lblSnHng_1 = new JLabel("Ngày:");
lblSnHng_1.setFont(new Font("Tahoma", Font.BOLD, 14));
lblSnHng_1.setBounds(475, 11, 47, 19);
panel_input.add(lblSnHng_1);
txtNgay = new JFormattedTextField(format);
txtNgay.setColumns(10);
txtNgay.setBounds(532, 12, 182, 20);
txtNgay.setText(format.format(new java.util.Date()));
panel_input.add(txtNgay);
cmbKH.setBounds(130, 36, 182, 22);
panel_input.add(cmbKH);
load_data_cmbKH(cmbKH);
cmbKH.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
String maKH = String.valueOf(cmbKH.getSelectedItem());
Connection conn;
try {
conn = ConnectionUtils.getConnection();
khachhang kh = khachhangModel.load_khachhang_by_maKH(conn, maKH);
bind_data_KH(kh);
} catch (ClassNotFoundException | SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 144, 724, 333);
contentPane.add(scrollPane);
table = new JTable();
table.setCellSelectionEnabled(true);
initTableData();
scrollPane.setViewportView(table);
JPanel panel_button = new JPanel();
panel_button.setLayout(null);
panel_button.setBounds(10, 488, 724, 47);
contentPane.add(panel_button);
btnThoat.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
btnThoat.setBounds(625, 11, 89, 23);
panel_button.add(btnThoat);
btnSua.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (btnSua.getText() == "Sửa") {
// Bật edit
txtNgay.setEditable(true);
txtDiaChi.setEditable(true);
txtDienThoai.setEditable(true);
cmbKH.setEnabled(true);
table.setEnabled(true);
// Đổi chức năng btnSua
btnSua.setText("Lưu");
} else {
// Lưu lại
try {
String soDH = txtSoDH.getText();
String maKH = cmbKH.getSelectedItem().toString();
String diaChi = txtDiaChi.getText();
String dienThoai = txtDienThoai.getText();
Date ngayMua = new Date(format.parse(txtNgay.getText()).getTime());
donhang dh = new donhang(soDH, maKH, diaChi, dienThoai, ngayMua);
Connection conn = ConnectionUtils.getConnection();
// delete chitiet_donhang
// Vì không có ràng buộc unique(SoDH, maSoLaptop) trong bảng chitiet_donhang
// Nên thay update bằng cách xóa và insert lại
donhangModel.delete_chitiet_donhang(conn, soDH);
// Update donhang
donhangModel.update_donhang(conn, dh);
// Insert chitiet_donhang
for (int iRow = 0; iRow < table.getRowCount() - 1; iRow++) {
String maSo = table.getValueAt(iRow, 1).toString();
float donGia = Float.parseFloat(table.getValueAt(iRow, 2).toString());
int soLuong = Integer.parseInt(table.getValueAt(iRow, 3).toString());
float thanhTien = Float.parseFloat(table.getValueAt(iRow, 4).toString());
donhangModel.insert_chitiet_donhang(conn, soDH, maSo, donGia, soLuong, thanhTien);
}
JOptionPane.showMessageDialog(null, "Lưu đơn hàng '" + soDH + "' thành công!");
resetText();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
});
btnSua.setBounds(526, 11, 89, 23);
panel_button.add(btnSua);
btnXoa.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String soDH = txtSoDH.getText();
int opt = JOptionPane.showConfirmDialog(null, "Bạn thật sự muốn xóa Đơn hàng: '" + soDH + "' ?");
if (opt == 0) {
try {
Connection conn = ConnectionUtils.getConnection();
donhangModel.delete_donhang(conn, soDH);
JOptionPane.showMessageDialog(null, "Xóa thành công đơn hàng '" + soDH + "'");
resetText();
} catch (ClassNotFoundException | SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
btnXoa.setBounds(427, 11, 89, 23);
panel_button.add(btnXoa);
btnThem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (btnThem.getText() == "Thêm") {
if (isValidInput()) {
try {
String soDH = txtSoDH.getText();
String maKH = cmbKH.getSelectedItem().toString();
String diaChi = txtDiaChi.getText();
String dienThoai = txtDienThoai.getText();
Date ngayMua = new Date(format.parse(txtNgay.getText()).getTime());
donhang dh = new donhang(soDH, maKH, diaChi, dienThoai, ngayMua);
Connection conn = ConnectionUtils.getConnection();
if (donhangModel.insert_donhang(conn, dh)) {
for (int iRow = 0; iRow < table.getRowCount() - 1; iRow++) {
String maSo = table.getValueAt(iRow, 1).toString();
float donGia = Float.parseFloat(table.getValueAt(iRow, 2).toString());
int soLuong = Integer.parseInt(table.getValueAt(iRow, 3).toString());
float thanhTien = Float.parseFloat(table.getValueAt(iRow, 4).toString());
donhangModel.insert_chitiet_donhang(conn, soDH, maSo, donGia, soLuong, thanhTien);
}
JOptionPane.showMessageDialog(null, "Thêm đơn hàng '" + soDH + "' thành công!");
resetText();
}
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
} else {
JOptionPane.showMessageDialog(null, "Dữ liệu nhập vào không hợp lệ!");
}
} else {
try {
resetText();
} catch (ClassNotFoundException | SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
btnThem.setBounds(328, 11, 89, 23);
panel_button.add(btnThem);
btnTim.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String soDH = txtSoDH.getText();
if (soDH.isBlank() || soDH.isEmpty())
JOptionPane.showMessageDialog(null, "Vui lòng nhập số đơn hàng trước!");
else {
try {
Connection conn = ConnectionUtils.getConnection();
donhang dh = donhangModel.load_donhang_by_soDH(conn, soDH);
if (dh == null) {
JOptionPane.showMessageDialog(null, "Không tìm thấy đơn hàng '" + soDH + "'");
resetText();
} else {
Object[][] chitiet_donhangData = donhangModel.load_chitiet_donhang_by_soDH(conn, soDH);
initTableData(chitiet_donhangData);
// Đổi chức năng button
btnThem.setText("Tạo mới");
}
} catch (ClassNotFoundException | SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
btnTim.setBounds(229, 11, 89, 23);
panel_button.add(btnTim);
}
private void initTableData() throws ClassNotFoundException, SQLException {
Object[][] data = null;
initTableData(data);
}
private void initTableData(Object[][] data) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
String[] colNameStrings = new String[] { "STT", "Hàng hóa", "Đơn giá", "Số lượng", "Thành tiền" };
DefaultTableModel dfModel;
if (data == null) { // load data
dfModel = new DefaultTableModel(new Object[][] {}, colNameStrings);
Object[] newRow = new Object[] { 1, "", "", "", "" };
dfModel.addRow(newRow);
// Đặt trạng thái các button
btnSua.setEnabled(false);
// Cho sửa đơn hàng khi load
txtSoDH.setEditable(true);
txtNgay.setEditable(true);
txtDiaChi.setEditable(true);
txtDienThoai.setEditable(true);
cmbKH.setEnabled(true);
table.setEnabled(true);
// Đổi chức năng button
btnThem.setText("Thêm");
} else { // search
dfModel = new DefaultTableModel(data, colNameStrings);
// Đặt trạng thái các button
btnSua.setEnabled(true);
// Không cho sửa đơn hàng khi tìm thấy
txtSoDH.setEditable(false);
txtNgay.setEditable(false);
txtDiaChi.setEditable(false);
txtDienThoai.setEditable(false);
cmbKH.setEnabled(false);
table.setEnabled(false);
}
table.setModel(dfModel);
// Cột hàng hóa
TableColumn HangHoaCol = table.getColumnModel().getColumn(1);
JComboBox<String> cmbHH = new JComboBox<>();
load_data_cmbHH(cmbHH);
HangHoaCol.setCellEditor(new DefaultCellEditor(cmbHH));
table.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
try {
// Thay đổi giá hoặc số lượng thì update thành tiền
if (e.getColumn() == 2 || e.getColumn() == 3) {
int row = e.getFirstRow();
float giaBan = Float.valueOf((String) table.getValueAt(row, 2));
int soLuong = Integer.valueOf((String) table.getValueAt(row, 3));
if (giaBan >= 0 && soLuong >= 0) {
float thanhtien = giaBan * soLuong;
table.setValueAt(String.format("%.0f", thanhtien), row, 4);
}
} else if (e.getColumn() == 1) {
// Thay đổi mã hàng hóa thì update đơn giá
int row = e.getFirstRow();
int col = e.getColumn();
String maLT = (String) table.getValueAt(row, col);
Connection conn;
try {
conn = ConnectionUtils.getConnection();
float gia = laptopModel.load_laptop_by_maLT(conn, maLT).getGiaBan();
table.setValueAt(String.format("%.0f", gia), row, 2);
} catch (ClassNotFoundException | SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// Nếu thay đổi hàng cuối thì tự thêm hàng mới
if (e.getFirstRow() == table.getRowCount() - 1)
dfModel.addRow(new Object[] { table.getRowCount() + 1, "", "", "", "" });
}
} catch (Exception e2) {
// TODO: handle exception
}
}
});
// Set text mặc định các button
btnSua.setText("Sửa");
btnThem.setText("Thêm");
btnThoat.setText("Thoát");
btnTim.setText("Tìm");
btnXoa.setText("Xóa");
}
private void bind_data_KH(khachhang kh) {
txtKH.setText(kh.getTenKH());
txtDiaChi.setText(kh.getDiaChi());
txtDienThoai.setText(kh.getDienthoai());
}
private void load_data_cmbKH(JComboBox<String> cmb) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
Connection conn = ConnectionUtils.getConnection();
List<khachhang> listKH = khachhangModel.load_khachhang(conn);
for (khachhang kh : listKH) {
cmb.addItem(kh.getMaKH());
}
bind_data_KH(listKH.get(0));
}
private void load_data_cmbHH(JComboBox<String> cmb) throws ClassNotFoundException, SQLException {
// TODO )Auto-generated method stub
Connection conn = ConnectionUtils.getConnection();
List<laptop> listHH = laptopModel.load_laptop(conn);
for (laptop hh : listHH) {
cmb.addItem(hh.getMaLT());
}
}
private boolean isValidInput() {
if (txtSoDH.getText().isBlank() || txtSoDH.getText().isEmpty())
return false;
else if (txtDiaChi.getText().isBlank() || txtDiaChi.getText().isEmpty())
return false;
else if (txtDienThoai.getText().isBlank() || txtDienThoai.getText().isEmpty())
return false;
return true;
}
private void resetText() throws ClassNotFoundException, SQLException {
initTableData();
txtSoDH.setText("");
txtSoDH.grabFocus();
}
}
Editor is loading...