Dale Wahl
Dale Wahl

Reputation: 51

Refresh java program after submitting information to database

I created a Java address book program using MySQL Database. My program has a left panel and a right panel. The left panel writes new entries to the database and the right panel displays all the database info. I'm having trouble updating the program after I've submitted new entries to the database. I have to close my program then reopen it to display the new info.

How can I get my address book to update itself after I click the submit button?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.*;

@SuppressWarnings("serial")
public class Frame1 extends JFrame {

JLabel label1 = new JLabel("Address Book Input");
JLabel label2 = new JLabel("MySQL Address Book");

JButton submit = new JButton("Submit");

JTextField $first_name = new JTextField(20);
JTextField $last_name = new JTextField(20);
JTextField $phone = new JTextField(20);
JTextField $email = new JTextField(20);
JTextField $street = new JTextField(20);
JTextField $city = new JTextField(20);
JTextField $state = new JTextField(20);
JTextField $zip = new JTextField(20);

JLabel first_nameLabel = new JLabel("First Name: ");
JLabel last_nameLabel = new JLabel("Last Name: ");
JLabel phoneLabel = new JLabel("Phone: ");
JLabel emailLabel = new JLabel("Email: ");
JLabel streetLabel = new JLabel("Street: ");
JLabel cityLabel = new JLabel("City: ");
JLabel stateLabel = new JLabel("State: ");
JLabel zipLabel = new JLabel("Zip: ");

public Frame1() {
    super("1 Class Template");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(800, 480);
    setLocationRelativeTo(null);
    setVisible(true);
    initComponents();

}

public void initComponents() {
    JPanel panel = new JPanel(new GridLayout(0, 2));
    JPanel panelLeft = new JPanel(new GridBagLayout());
    JPanel panelRight = new JPanel(new BorderLayout());
    JScrollPane scrollPane = new JScrollPane();
    JPanel addressBook = new JPanel(new GridBagLayout());

    add(panel);
    panel.add(panelLeft);
    panel.add(panelRight);
    panelRight.add(scrollPane);
    scrollPane.setViewportView(addressBook);

    panelLeft.setBorder(BorderFactory.createLineBorder(Color.black));
    panelRight.setBorder(BorderFactory.createLineBorder(Color.black));

    GridBagConstraints gbc = new GridBagConstraints();

    label1.setFont(new Font(null, Font.PLAIN, 18));
    gbc.insets = new Insets(8, 8, 8, 8);
    gbc.gridwidth = 2;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.gridx = 0;
    gbc.gridy = 0;
    panelLeft.add(label1, gbc);

    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridwidth = 1;
    gbc.anchor = GridBagConstraints.LINE_END;
    gbc.gridx = 0;
    gbc.gridy++;
    panelLeft.add(first_nameLabel, gbc);
    gbc.gridy++;
    panelLeft.add(last_nameLabel, gbc);
    gbc.gridy++;
    panelLeft.add(phoneLabel, gbc);
    gbc.gridy++;
    panelLeft.add(emailLabel, gbc);
    gbc.gridy++;
    panelLeft.add(streetLabel, gbc);
    gbc.gridy++;
    panelLeft.add(cityLabel, gbc);
    gbc.gridy++;
    panelLeft.add(stateLabel, gbc);
    gbc.gridy++;
    panelLeft.add(zipLabel, gbc);

    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridwidth = 1;
    gbc.anchor = GridBagConstraints.LINE_START;
    gbc.gridx = 1;
    gbc.gridy = 1;
    panelLeft.add($first_name, gbc);
    gbc.gridy++;
    panelLeft.add($last_name, gbc);
    gbc.gridy++;
    panelLeft.add($phone, gbc);
    gbc.gridy++;
    panelLeft.add($email, gbc);
    gbc.gridy++;
    panelLeft.add($street, gbc);
    gbc.gridy++;
    panelLeft.add($city, gbc);
    gbc.gridy++;
    panelLeft.add($state, gbc);
    gbc.gridy++;
    panelLeft.add($zip, gbc);

    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.anchor = GridBagConstraints.LINE_END;
    gbc.gridwidth = 1;
    gbc.gridx = 1;
    gbc.gridy++;
    submit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            try {
                java.sql.Connection myConn = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/database_name",
                        "user_name", "password");

                Statement myStmt = myConn.createStatement();
                myStmt
                        .executeUpdate("INSERT INTO address_book (first_name, last_name, phone, email, street, city, state, zip) VALUES ('"
                                + $first_name.getText()
                                + "', '"
                                + $last_name.getText()
                                + "', '"
                                + $phone.getText()
                                + "', '"
                                + $email.getText()
                                + "', '"
                                + $street.getText()
                                + "', '"
                                + $city.getText()
                                + "', '"
                                + $state.getText()
                                + "', '"
                                + $zip.getText() + "') ");

                $first_name.setText("");
                $last_name.setText("");
                $phone.setText("");
                $email.setText("");
                $street.setText("");
                $city.setText("");
                $state.setText("");
                $zip.setText("");

                JOptionPane.showConfirmDialog(null,
                        "Your Data Has been Inserted", "Result",
                        JOptionPane.DEFAULT_OPTION,
                        JOptionPane.PLAIN_MESSAGE);

            }

            catch (Exception exc) {
                exc.printStackTrace();
            }
        }
    });
    panelLeft.add(submit, gbc);

    label2.setFont(new Font(null, Font.PLAIN, 18));
    gbc.insets = new Insets(8, 8, 8, 8);
    gbc.gridwidth = 2;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.gridx = 0;
    gbc.gridy = 0;
    addressBook.add(label2, gbc);

    gbc.anchor = GridBagConstraints.LINE_START;
    gbc.gridwidth = 1;
    try {
        java.sql.Connection myConn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/database_name", "user_name",
                "password");

        Statement myStmt = myConn.createStatement();

        ResultSet myRs = myStmt
                .executeQuery("SELECT * FROM address_book ORDER BY last_name, first_name");

        while (myRs.next()) {
            JLabel lab1 = new JLabel(myRs.getString("first_name") + " "
                    + myRs.getString("last_name"));
            JLabel lab2 = new JLabel(myRs.getString("phone"));
            JLabel lab3 = new JLabel(myRs.getString("email"));
            JLabel lab4 = new JLabel(myRs.getString("street"));
            JLabel lab5 = new JLabel(myRs.getString("city") + ", "
                    + myRs.getString("state") + " " + myRs.getString("zip"));

            gbc.insets = new Insets(4, 4, 4, 4);
            gbc.gridy++;
            addressBook.add(lab1, gbc);
            gbc.gridy++;
            addressBook.add(lab2, gbc);
            gbc.gridy++;
            addressBook.add(lab3, gbc);
            gbc.gridy++;
            addressBook.add(lab4, gbc);
            gbc.insets = new Insets(4, 4, 20, 4);
            gbc.gridy++;
            addressBook.add(lab5, gbc);

        }
    }

    catch (Exception exc) {
        exc.printStackTrace();
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame1();
        }
    });
}
}

Upvotes: 3

Views: 299

Answers (2)

Dale Wahl
Dale Wahl

Reputation: 51

I found the code I was looking for. This clears the addressBook panel, then I can pull my info from the database again.

    addressBook.removeAll();
    addressBook.updateUI();

Upvotes: 0

Harshit
Harshit

Reputation: 5157

After inserting data from your left panel, just call a function that will contain the code to set the updated the data with the new text like

lab1.setText($first_name);
..
..

then put $first_name to

null

Upvotes: 3

Related Questions