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;
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;
/**
*
// 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
// 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);
}
@Override
public void doShutdown () {
// First only show shutdown status
- this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel.shutdown.text"));
+ this.updateStatus("shutdown");
}
/**
// 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");
}
/**
* 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!");
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
*/
// 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() {
/**
@Override
public void windowClosed(final WindowEvent e) {
// Shutdown application cleanly
- self.getClient().getApplication().doShutdown();
+ self.shutdownApplication();
}
/**
@Override
public void windowClosing(final WindowEvent e) {
// Also shutdown cleanly here
- self.getClient().getApplication().doShutdown();
+ self.shutdownApplication();
}
});
// Center window in middle of screen, instead of top-left corner
this.frame.setLocationRelativeTo(null);
- // Init menu bar in north
+ // 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;
+ JMenuItem item;
// Init some menus:
// 1) File menu
- JMenu menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.file.text"));
+ menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.file.text"));
// Add menu items:
// 1.x) Exit program (should be last)
- JMenuItem item = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.text"));
+ item = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.text"));
item.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.toolTipText"));
// Add listener to exit menu
*/
@Override
public void actionPerformed (final ActionEvent e) {
- self.getClient().getApplication().doShutdown();
+ self.shutdownApplication();
}
});
// 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 statusPanel = new JPanel();
- statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.X_AXIS));
- statusPanel.add(this.statusLabel);
- statusPanel.setBorder(BorderFactory.createEtchedBorder());
-
+ 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(statusPanel, BorderLayout.SOUTH);
+ 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"));
+ }
}