]> git.mxchange.org Git - addressbook-lib.git/blobdiff - Addressbook/src/org/mxchange/addressbook/client/gui/AddressbookFrame.java
Introduced initTable()
[addressbook-lib.git] / Addressbook / src / org / mxchange / addressbook / client / gui / AddressbookFrame.java
index 0cd0a3fc48eb6dc3b99e1a531454ad1747e2c961..b403bf745dad36d6a09a342143a84101210a031f 100644 (file)
@@ -19,6 +19,8 @@ package org.mxchange.addressbook.client.gui;
 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.text.MessageFormat;
@@ -30,10 +32,13 @@ import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.table.TableModel;
 import org.mxchange.addressbook.BaseFrameworkSystem;
-import org.mxchange.addressbook.FrameAlreadyInitializedException;
 import org.mxchange.addressbook.application.AddressbookApplication;
 import org.mxchange.addressbook.client.Client;
+import org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException;
+import org.mxchange.addressbook.model.address.AddressTableModel;
 
 /**
  *
@@ -62,6 +67,25 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        // Return instance
        return self;
     }
+    /**
+     * Frame instance for "add own data"
+     */
+    private JMenuItem addOwnItem;
+
+    /**
+     * Instance to table model
+     */
+    private TableModel dataModel;
+
+    /**
+     * Table instance
+     */
+    private JTable dataTable;
+
+    /**
+     * Frame instance for "edit own data"
+     */
+    private JMenuItem editOwnItem;
 
     /**
      * Frame instance
@@ -78,11 +102,6 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
      */
     private JLabel statusLabel;
 
-    /**
-     * Frame instance
-     */
-    private JMenuItem addOwnItem;
-
     /**
      * Creates an instance of this frame with a client instance
      * 
@@ -105,7 +124,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
     @Override
     public void doShutdown () {
        // First only show shutdown status
-       this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel.shutdown.text"));
+       this.updateStatus("shutdown");
     }
 
     /**
@@ -123,15 +142,18 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
            // Debug message
            this.getLogger().debug("Disabling menus: isOwnContactAdded()=false");
 
-           // Not entered yet, so enable menu
+           // Not entered yet, so disable "add" menu
            this.addOwnItem.setEnabled(false);
+       } else {
+           // Disable "edit"
+           this.editOwnItem.setEnabled(false);
        }
 
        // Make the frame visible
        this.frame.setVisible(true);
 
        // All done here
-       this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel.done.text"));
+       this.updateStatus("done");
     }
 
     /**
@@ -139,10 +161,10 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
      * accessible) means that any other object can initialize components which
      * you may not want.
      * 
-     * @throws org.mxchange.addressbook.FrameAlreadyInitializedException If this method has been called twice
+     * @throws org.mxchange.addressbook.exceptions.FrameAlreadyInitializedException If this method has been called twice
      */
     @Override
-    public void initFrame () throws FrameAlreadyInitializedException {
+    public void init () throws FrameAlreadyInitializedException {
        // Debug line
        this.getLogger().trace("CALLED!");
 
@@ -169,6 +191,20 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        return this.isInitialized;
     }
 
+    /**
+     * Shuts down the application.
+     */
+    @Override
+    public void shutdownApplication () {
+       // To do this, the frame must be initialized
+       if (!this.isInitialized()) {
+           // Not initalized, so bad call
+           this.getLogger().fatal("Bad call of shutdownApplication(). Please report this.");
+           return;
+       }
+       this.getClient().getApplication().doShutdown();
+    }
+
     /**
      * Initialize components
      */
@@ -187,7 +223,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
            @Override
            public void windowClosed(final WindowEvent e) {
                // Shutdown application cleanly
-               self.getClient().getApplication().doShutdown();
+               self.shutdownApplication();
            }
 
            /**
@@ -197,7 +233,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
            @Override
            public void windowClosing(final WindowEvent e) {
                // Also shutdown cleanly here
-               self.getClient().getApplication().doShutdown();
+               self.shutdownApplication();
            }
        });
 
@@ -213,17 +249,11 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        // Init menu system
        initMenuSystem();
 
-       // Init status label (which needs to be updated
-       this.statusLabel = new JLabel(this.getBundle().getString("AddressbookFrame.statusLabel.initializing.text"));
+       // Init table
+       initTable();
 
-       // Init status bar in south
-       JPanel panel = new JPanel();
-       panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
-       panel.add(this.statusLabel);
-       panel.setBorder(BorderFactory.createEtchedBorder());
-
-       // Add panel to frame
-       this.frame.add(panel, BorderLayout.SOUTH);
+       // Init status panel
+       initStatusPanel();
     }
 
     /**
@@ -253,7 +283,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
             */
            @Override
            public void actionPerformed (final ActionEvent e) {
-               self.getClient().getApplication().doShutdown();
+               self.shutdownApplication();
            }
        });
 
@@ -287,6 +317,26 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        // Add item -> menu
        menu.add(this.addOwnItem);
 
+       // 2.2) Edit own data
+       this.editOwnItem = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.editOwnData.text"));
+       this.editOwnItem.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.editOwnData.toolTipText"));
+
+       // Add listener to exit menu
+       this.editOwnItem.addActionListener(new ActionListener() {
+           /**
+            * If the user has performed this action
+            *
+            * @param e An instance of an ActionEvent class
+            */
+           @Override
+           public void actionPerformed (final ActionEvent e) {
+               self.getClient().getContactManager().doChangeOwnData();
+           }
+       });
+
+       // Add item -> menu
+       menu.add(this.editOwnItem);
+
        // Add menu -> menu bar
        menuBar.add(menu);
 
@@ -294,4 +344,57 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        this.frame.add(menuBar, BorderLayout.NORTH);
     }
 
+    /**
+     * Initializes status panel
+     */
+    private void initStatusPanel () {
+       // Init status label (which needs to be updated
+       this.statusLabel = new JLabel();
+       this.updateStatus("initializing");
+
+       // Init status bar in south
+       JPanel panel = new JPanel();
+       panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
+       panel.add(this.statusLabel);
+       panel.setBorder(BorderFactory.createEtchedBorder());
+       
+       // Add panel to frame
+       this.frame.add(panel, BorderLayout.SOUTH);
+    }
+
+    /**
+     * Initializes the table which will show all contacts
+     */
+    private void initTable () {
+       // Instance table model
+       this.dataModel = new AddressTableModel(this.getClient());
+
+       // Instance table
+       this.dataTable = new JTable(this.dataModel);
+
+       // Add mouse listener
+       this.dataTable.addMouseListener(new MouseAdapter() {
+           /**
+            * If the user peformed a click on a cell
+            * 
+            * @param e Mouse event instance
+            */
+           @Override
+           public void mouseClicked(final MouseEvent e) {
+           }
+       });
+
+       // Add table to frame
+       this.frame.add(this.dataTable);
+    }
+
+    /**
+     * Updates status to given type
+     * 
+     * @param type Status type
+     */
+    private void updateStatus (final String type) {
+       // Set status message
+       this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel." + type + ".text"));
+    }
 }