Untitled
unknown
java
3 years ago
16 kB
5
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...