I have been studying Java for 4 months and this project is what I came up with. I know I should make more classes and methods for quality but I am still learning. Please help to me if there is any simpler and cleaner ways to achieve the same results as this.
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTable;
import javax.swing.JLabel;
import java.awt.Font;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class GUI extends JDialog {
private JTextField txtID;
private JTextField txtName;
private JTextField txtDep;
private JTextField txtGender;
private JTextField txtPosition;
private JTextField txtSalary;
private JTable table;
ResultSet rs;
Connection conn;
Statement statement;
public GUI() throws SQLException {
setBounds(100, 100, 671, 448);
getContentPane().setLayout(null);
try {
// Set System L&F
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
System.out.println(ex.getMessage());
}
table = new JTable();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 635, 205);
getContentPane().add(scrollPane);
scrollPane.setViewportView(table);
String dbURl = "jdbc:mysql://localhost:3306/employees";
try {
conn = DriverManager.getConnection(dbURl, "root", "1234");
if (conn != null) {
System.out.println("Connected");
String s1 = "SELECT * FROM employees";
statement = conn.createStatement();
rs = statement.executeQuery(s1);
table.setModel(buildTableModel(rs));
table.setBounds(10, 11, 634, 216);
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
table.getSelectionModel().addListSelectionListener((ListSelectionEvent event) -> {
try {
if (table.getSelectedRow() >= 0) {
Object employee_id = table.getValueAt(table.getSelectedRow(), 0);
Object full_name = table.getValueAt(table.getSelectedRow(), 1);
Object gender = table.getValueAt(table.getSelectedRow(), 2);
Object department = table.getValueAt(table.getSelectedRow(), 3);
Object position = table.getValueAt(table.getSelectedRow(), 4);
Object salary = table.getValueAt(table.getSelectedRow(), 5);
txtID.setText(employee_id.toString());
txtName.setText(full_name.toString());
txtGender.setText(gender.toString());
txtDep.setText(department.toString());
txtPosition.setText(position.toString());
txtSalary.setText(salary.toString());
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
});
JPanel buttonPane = new JPanel();
buttonPane.setBounds(0, 376, 655, 33);
FlowLayout fl_buttonPane = new FlowLayout(FlowLayout.LEFT);
fl_buttonPane.setHgap(10);
buttonPane.setLayout(fl_buttonPane);
getContentPane().add(buttonPane);
JButton btnAdd = new JButton("ADD");
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String sql_stmt = "INSERT INTO employees (full_name,gender,department,position,salary)";
sql_stmt += " VALUES ('" + txtName.getText() + "','" + txtGender.getText() + "','" + txtDep.getText()
+ "','" + txtPosition.getText() + "','" + txtSalary.getText() + "')";
try {
statement.executeUpdate(sql_stmt);
rs = statement.executeQuery("select * from employees");
table.setModel(buildTableModel(rs));
} catch (SQLException e) {
System.out.println(e.getMessage());
}
clearInputBoxes();
}
});
buttonPane.add(btnAdd);
JButton btnUpdate = new JButton("UPDATE");
btnUpdate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String sql_stmt3 = "UPDATE employees SET full_name = '" + txtName.getText() + "'";
sql_stmt3 += ",gender = '" + txtGender.getText() + "'";
sql_stmt3 += ",department = '" + txtDep.getText() + "'";
sql_stmt3 += ",position = '" + txtPosition.getText() + "'";
sql_stmt3 += ",salary = '" + txtSalary.getText() + "'";
sql_stmt3 += " WHERE employee_id = '" + txtID.getText() + "'";
try {
statement.executeUpdate(sql_stmt3);
rs = statement.executeQuery("select * from employees");
table.setModel(buildTableModel(rs));
} catch (SQLException e) {
System.out.println(e.getMessage());
}
clearInputBoxes();
}
});
btnUpdate.setActionCommand("OK");
buttonPane.add(btnUpdate);
getRootPane().setDefaultButton(btnUpdate);
JButton btnDel = new JButton("DELETE");
btnDel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String sql_stmt2 = "DELETE FROM employees WHERE employee_id = '" + txtID.getText() + "'";
try {
statement.executeUpdate(sql_stmt2);
rs = statement.executeQuery("select * from employees");
table.setModel(buildTableModel(rs));
} catch (SQLException e) {
System.out.println(e.getMessage());
}
clearInputBoxes();
}
});
btnDel.setActionCommand("Cancel");
buttonPane.add(btnDel);
JLabel lblID = new JLabel("ID");
lblID.setFont(new Font("Verdana", Font.BOLD, 14));
lblID.setBounds(26, 237, 79, 23);
getContentPane().add(lblID);
JLabel lblFullname = new JLabel("Fullname");
lblFullname.setFont(new Font("Verdana", Font.BOLD, 14));
lblFullname.setBounds(26, 271, 79, 23);
getContentPane().add(lblFullname);
JLabel lblGender = new JLabel("Gender");
lblGender.setFont(new Font("Verdana", Font.BOLD, 14));
lblGender.setBounds(340, 237, 79, 23);
getContentPane().add(lblGender);
JLabel lblPosition = new JLabel("Position");
lblPosition.setFont(new Font("Verdana", Font.BOLD, 14));
lblPosition.setBounds(340, 271, 79, 23);
getContentPane().add(lblPosition);
JLabel lblDep = new JLabel("DEP");
lblDep.setFont(new Font("Verdana", Font.BOLD, 14));
lblDep.setBounds(26, 305, 79, 23);
getContentPane().add(lblDep);
JLabel lblSalary = new JLabel("Salary");
lblSalary.setFont(new Font("Verdana", Font.BOLD, 14));
lblSalary.setBounds(340, 305, 79, 23);
getContentPane().add(lblSalary);
txtID = new JTextField();
txtID.setBounds(115, 240, 215, 20);
getContentPane().add(txtID);
txtID.setColumns(10);
txtName = new JTextField();
txtName.setColumns(10);
txtName.setBounds(115, 274, 215, 20);
getContentPane().add(txtName);
txtDep = new JTextField();
txtDep.setColumns(10);
txtDep.setBounds(115, 308, 215, 20);
getContentPane().add(txtDep);
txtGender = new JTextField();
txtGender.setColumns(10);
txtGender.setBounds(429, 240, 107, 20);
getContentPane().add(txtGender);
txtPosition = new JTextField();
txtPosition.setColumns(10);
txtPosition.setBounds(429, 274, 215, 20);
getContentPane().add(txtPosition);
txtSalary = new JTextField();
txtSalary.setColumns(10);
txtSalary.setBounds(429, 308, 215, 20);
getContentPane().add(txtSalary);
}
public static DefaultTableModel buildTableModel(ResultSet rs) throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
}
private void clearInputBoxes() {
txtID.setText("");
txtName.setText("");
txtGender.setText("");
txtDep.setText("");
txtPosition.setText("");
txtSalary.setText("");
}
public static void main(String[] args) throws Exception {
GUI g = new GUI();
g.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
g.setVisible(true);
}
}