]> 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 a8507fb986d96023d8184f05a94ce5ba835e213b..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
@@ -90,9 +114,6 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        // Set frame instance
        this.frame = new JFrame(AddressbookApplication.printableTitle());
 
-       // Set default close operation
-       this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
        // Set client here
        this.setClient(client);
     }
@@ -103,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");
     }
 
     /**
@@ -121,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
-           //addOwnData.setEnabled(false);
+           // 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");
     }
 
     /**
@@ -137,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!");
 
@@ -167,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
      */
@@ -174,6 +212,9 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        // Debug line
        this.getLogger().trace("CALLED!");
 
+       // Set default close operation
+       this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
        // Register shutdown listener
        this.frame.addWindowListener(new WindowAdapter() {
            /**
@@ -182,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();
            }
 
            /**
@@ -192,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();
            }
        });
 
@@ -205,6 +246,20 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        // Center window in middle of screen, instead of top-left corner
        this.frame.setLocationRelativeTo(null);
 
+       // Init menu system
+       initMenuSystem();
+
+       // Init table
+       initTable();
+
+       // Init status panel
+       initStatusPanel();
+    }
+
+    /**
+     * Initializes the menu system
+     */
+    private void initMenuSystem () {
        // Init menu bar, menu and item instances
        JMenuBar menuBar = new JMenuBar();
        JMenu menu;
@@ -228,7 +283,7 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
             */
            @Override
            public void actionPerformed (final ActionEvent e) {
-               self.getClient().getApplication().doShutdown();
+               self.shutdownApplication();
            }
        });
 
@@ -238,20 +293,108 @@ public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame
        // Add menu -> menu bar
        menuBar.add(menu);
 
+       // Init some menus:
+       // 2) Addressbook menu
+       menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.addressbook.text"));
+
+       // 2.1) Add own data
+       this.addOwnItem = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.addOwnData.text"));
+       this.addOwnItem.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.addOwnData.toolTipText"));
+
+       // Add listener to exit menu
+       this.addOwnItem.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().doEnterOwnData();
+           }
+       });
+
+       // 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);
+
        // Add menu bar -> frame
        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.getBundle().getString("AddressbookFrame.statusLabel.initializing.text"));
+       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"));
+    }
 }