// DisplayFrame -- for Lab 10 (Hashtable)

package lab10;

import java.awt.Point;

/**
 *
 * @author J.K. Daugherty
 */
public class DisplayFrame extends javax.swing.JFrame {
    private Hashtable table;
    private DisplayPanel display;

    /** Creates new form DisplayFrame */
    public DisplayFrame() {
        initComponents();
        table = new Hashtable();

        int xloc = 50;
        int yloc = getSize().height / 2 - 50;
        
        Point startPoint = new Point (xloc, yloc);
        display = new DisplayPanel(table, startPoint);
        getContentPane().add (display, java.awt.BorderLayout.CENTER);
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {//GEN-BEGIN:initComponents
        java.awt.GridBagConstraints gridBagConstraints;

        controlPanel = new javax.swing.JPanel();
        lblPutKey = new javax.swing.JLabel();
        fldPutKey = new javax.swing.JTextField();
        lblPutValue = new javax.swing.JLabel();
        fldPutValue = new javax.swing.JTextField();
        btnPut = new javax.swing.JButton();
        lblBumpedValue = new javax.swing.JLabel();
        fldBumpedValue = new javax.swing.JTextField();
        lblKey = new javax.swing.JLabel();
        fldKey = new javax.swing.JTextField();
        lblValue = new javax.swing.JLabel();
        fldValue = new javax.swing.JTextField();
        btnSearch = new javax.swing.JButton();
        btnRemove = new javax.swing.JButton();
        btnReset = new javax.swing.JButton();
        btnExit = new javax.swing.JButton();
        statusPanel = new javax.swing.JPanel();
        lblItemCount = new javax.swing.JLabel();
        fldItemCount = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Lab 10: Hashtable");
        controlPanel.setLayout(new java.awt.GridBagLayout());

        controlPanel.setBackground(new java.awt.Color(255, 255, 255));
        lblPutKey.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lblPutKey.setText("Key:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 3);
        controlPanel.add(lblPutKey, gridBagConstraints);

        fldPutKey.setColumns(5);
        fldPutKey.setPreferredSize(new java.awt.Dimension(66, 25));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        controlPanel.add(fldPutKey, gridBagConstraints);

        lblPutValue.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lblPutValue.setText("Value:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
        controlPanel.add(lblPutValue, gridBagConstraints);

        fldPutValue.setColumns(8);
        fldPutValue.setPreferredSize(new java.awt.Dimension(99, 25));
        fldPutValue.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fldPutValueActionPerformed(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        controlPanel.add(fldPutValue, gridBagConstraints);

        btnPut.setText("Put");
        btnPut.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPutActionPerformed(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 6;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        controlPanel.add(btnPut, gridBagConstraints);

        lblBumpedValue.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lblBumpedValue.setText("Bumped value:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 7;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
        controlPanel.add(lblBumpedValue, gridBagConstraints);

        fldBumpedValue.setColumns(8);
        fldBumpedValue.setEditable(false);
        fldBumpedValue.setPreferredSize(new java.awt.Dimension(99, 25));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 8;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 0);
        controlPanel.add(fldBumpedValue, gridBagConstraints);

        lblKey.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lblKey.setText("Key:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 3, 3);
        controlPanel.add(lblKey, gridBagConstraints);

        fldKey.setColumns(5);
        fldKey.setPreferredSize(new java.awt.Dimension(66, 25));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3);
        controlPanel.add(fldKey, gridBagConstraints);

        lblValue.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lblValue.setText("Value:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 4;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3);
        controlPanel.add(lblValue, gridBagConstraints);

        fldValue.setColumns(8);
        fldValue.setEditable(false);
        fldValue.setPreferredSize(new java.awt.Dimension(99, 25));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 5;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 0);
        controlPanel.add(fldValue, gridBagConstraints);

        btnSearch.setText("Search");
        btnSearch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSearchActionPerformed(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3);
        controlPanel.add(btnSearch, gridBagConstraints);

        btnRemove.setText("Remove");
        btnRemove.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRemoveActionPerformed(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 3);
        controlPanel.add(btnRemove, gridBagConstraints);

        btnReset.setText("Reset");
        btnReset.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnResetActionPerformed(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 7;
        gridBagConstraints.gridy = 1;
        controlPanel.add(btnReset, gridBagConstraints);

        btnExit.setText("Exit");
        btnExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExitActionPerformed(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 8;
        gridBagConstraints.gridy = 1;
        controlPanel.add(btnExit, gridBagConstraints);

        getContentPane().add(controlPanel, java.awt.BorderLayout.SOUTH);

        statusPanel.setBackground(new java.awt.Color(255, 255, 255));
        lblItemCount.setText("Current table size:");
        statusPanel.add(lblItemCount);

        fldItemCount.setColumns(2);
        fldItemCount.setEditable(false);
        fldItemCount.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        fldItemCount.setText("0");
        statusPanel.add(fldItemCount);

        getContentPane().add(statusPanel, java.awt.BorderLayout.NORTH);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-800)/2, (screenSize.height-700)/2, 800, 700);
    }//GEN-END:initComponents

    private void fldPutValueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fldPutValueActionPerformed
        put();
    }//GEN-LAST:event_fldPutValueActionPerformed

    private void btnExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExitActionPerformed
        setVisible(false);
        dispose();
        System.exit(0);
    }//GEN-LAST:event_btnExitActionPerformed

    private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnResetActionPerformed
        table.clear ();
        display.repaint();
        fldPutKey.setText("");
        fldPutValue.setText("");
        fldBumpedValue.setText("");
        fldKey.setText("");
        fldValue.setText("");
        fldItemCount.setText("" + table.size());
    }//GEN-LAST:event_btnResetActionPerformed

    private void btnRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemoveActionPerformed
        String response = "NOT FOUND";
        Object value = table.remove (fldKey.getText());
        if (value != null) {
            response = value.toString();
            fldItemCount.setText("" + table.size());
        }
                    
        fldValue.setText (response);
        display.repaint();         
    }//GEN-LAST:event_btnRemoveActionPerformed

    private void btnSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSearchActionPerformed
        String response = "NOT FOUND";

        Object value = table.get (fldKey.getText());
        if (value != null) {
            response = value.toString();
        }
        fldValue.setText (response);
        display.repaint();
    }//GEN-LAST:event_btnSearchActionPerformed

    private void btnPutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPutActionPerformed
        put();
    }//GEN-LAST:event_btnPutActionPerformed
    
    private void put () {
        Object bumped = table.put (fldPutKey.getText(), fldPutValue.getText());
        if (bumped == null) {
            fldBumpedValue.setText("");
        }
        else {
            fldBumpedValue.setText ("" + bumped);
        }                    
        display.repaint();
        fldItemCount.setText("" + table.size());
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DisplayFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnExit;
    private javax.swing.JButton btnPut;
    private javax.swing.JButton btnRemove;
    private javax.swing.JButton btnReset;
    private javax.swing.JButton btnSearch;
    private javax.swing.JPanel controlPanel;
    private javax.swing.JTextField fldBumpedValue;
    private javax.swing.JTextField fldItemCount;
    private javax.swing.JTextField fldKey;
    private javax.swing.JTextField fldPutKey;
    private javax.swing.JTextField fldPutValue;
    private javax.swing.JTextField fldValue;
    private javax.swing.JLabel lblBumpedValue;
    private javax.swing.JLabel lblItemCount;
    private javax.swing.JLabel lblKey;
    private javax.swing.JLabel lblPutKey;
    private javax.swing.JLabel lblPutValue;
    private javax.swing.JLabel lblValue;
    private javax.swing.JPanel statusPanel;
    // End of variables declaration//GEN-END:variables
    
}
