import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.SoftBevelBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class AdminGUIWebService implements ActionListener {
private JButton quitButton, searchButton, resetSearch;
private JTextField searchText;
private JPopupMenu tableMenu;
private static JMenuBar menuBar;
private JMenu menu;
private JMenuItem menuItemInsert, menuItemDelete, menuItemShelf,
menuItemWarehouse, menuPopulate;
private JMenuItem tablemenuItemInsert, tablemenuItemDelete,
tablemenuItemShelf, tablemenuItemWarehouse, tablemenuItemPopulate;
private StatusBar statusBar;
static JFrame frame;
private static String INSERT_CMD = "Insert Rows";
private static String DELETE_CMD = "Delete Rows";
private static String MOVE_TO_SHELF_CMD = "Move items to shelf";
private static String MOVE_TO_WAREHOUSE_CMD = "Move items to warehouse";
private static String POPULATE_CMD = "Populate database";
ItemTableModelWebService myData = new ItemTableModelWebService();
JTable table;
ListSelectionModel listSelectionModel;
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(myData);
private JPanel createContentPane() {
JPanel gui = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
MouseListener popupListener = new PopupListener();
tableMenu = new JPopupMenu();
tablemenuItemInsert = new JMenuItem(INSERT_CMD);
tablemenuItemInsert.setMnemonic(KeyEvent.VK_I);
tablemenuItemInsert.getAccessibleContext().setAccessibleDescription(
"Insert a new row in the database");
tablemenuItemInsert.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_I, ActionEvent.CTRL_MASK));
tablemenuItemInsert.addActionListener(this);
tableMenu.add(tablemenuItemInsert);
tablemenuItemDelete = new JMenuItem(DELETE_CMD);
tablemenuItemDelete.setMnemonic(KeyEvent.VK_D);
tablemenuItemDelete.getAccessibleContext().setAccessibleDescription(
"Delete the selected row(s) from the database!");
tablemenuItemDelete.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_D, ActionEvent.CTRL_MASK));
tablemenuItemDelete.addActionListener(this);
tableMenu.add(tablemenuItemDelete);
tableMenu.add(new JSeparator());
tablemenuItemShelf = new JMenuItem(MOVE_TO_SHELF_CMD);
tablemenuItemShelf.setMnemonic(KeyEvent.VK_S);
tablemenuItemShelf.getAccessibleContext().setAccessibleDescription(
"Change the location to shelf for the selected items.");
tablemenuItemShelf.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
ActionEvent.CTRL_MASK));
tablemenuItemShelf.addActionListener(this);
tableMenu.add(tablemenuItemShelf);
tablemenuItemWarehouse = new JMenuItem(MOVE_TO_WAREHOUSE_CMD);
tablemenuItemWarehouse.setMnemonic(KeyEvent.VK_W);
tablemenuItemWarehouse.getAccessibleContext().setAccessibleDescription(
"Change the location to warehouse for the selected items.");
tablemenuItemWarehouse.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
ActionEvent.CTRL_MASK));
tablemenuItemWarehouse.addActionListener(this);
tableMenu.add(tablemenuItemWarehouse);
tablemenuItemPopulate = new JMenuItem(POPULATE_CMD);
tablemenuItemPopulate.setMnemonic(KeyEvent.VK_P);
tablemenuItemPopulate.getAccessibleContext().setAccessibleDescription(
"Populate the database for tests... Yum,yum!");
tablemenuItemPopulate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
ActionEvent.CTRL_MASK));
tablemenuItemPopulate.addActionListener(this);
tableMenu.add(tablemenuItemPopulate);
menuItemInsert = new JMenuItem(INSERT_CMD);
menuItemInsert.setMnemonic(KeyEvent.VK_I);
menuItemInsert.getAccessibleContext().setAccessibleDescription(
"Insert a new row in the database");
menuItemInsert.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,
ActionEvent.CTRL_MASK));
menuItemInsert.addActionListener(this);
//tableMenu.add(menuItemInsert);
menuItemDelete = new JMenuItem(DELETE_CMD);
menuItemDelete.setMnemonic(KeyEvent.VK_D);
menuItemDelete.getAccessibleContext().setAccessibleDescription(
"Delete the selected row(s) from the database!");
menuItemDelete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
ActionEvent.CTRL_MASK));
menuItemDelete.addActionListener(this);
//tableMenu.add(menuItemDelete);
//tableMenu.add(new JSeparator());
menuItemShelf = new JMenuItem(MOVE_TO_SHELF_CMD);
menuItemShelf.setMnemonic(KeyEvent.VK_S);
menuItemShelf.getAccessibleContext().setAccessibleDescription(
"Change the location to shelf for the selected items.");
menuItemShelf.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
ActionEvent.CTRL_MASK));
menuItemShelf.addActionListener(this);
//tableMenu.add(menuItemShelf);
menuItemWarehouse = new JMenuItem(MOVE_TO_WAREHOUSE_CMD);
menuItemWarehouse.setMnemonic(KeyEvent.VK_W);
menuItemWarehouse.getAccessibleContext().setAccessibleDescription(
"Change the location to warehouse for the selected items.");
menuItemWarehouse.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
ActionEvent.CTRL_MASK));
menuItemWarehouse.addActionListener(this);
//tableMenu.add(menuItemWarehouse);
menuPopulate = new JMenuItem(POPULATE_CMD);
menuPopulate.setMnemonic(KeyEvent.VK_P);
menuPopulate.getAccessibleContext().setAccessibleDescription(
"Populate the database for tests... Yum,yum!");
menuPopulate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
ActionEvent.CTRL_MASK));
menuPopulate.addActionListener(this);
//tableMenu.add(menuPopulate);
Insets insets = new Insets(5, 5, 5, 5);
c.insets = insets;
JLabel item = new JLabel("Search Item:");
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.NONE;
gui.add(item, c);
searchText = new JTextField();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
c.gridx = 1;
c.gridy = 0;
searchText.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
statusBar
.setMessage("Type an ID :) , description ,price or location to search.");
}
@Override
public void focusLost(FocusEvent e) {
// statusBar.setMessage("");
}
});
gui.add(searchText, c);
searchButton = new JButton("Search");
searchButton.setMnemonic('s');
searchButton.addActionListener(this);
c.weightx = 0.0;
c.gridx = 2;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
gui.add(searchButton, c);
resetSearch = new JButton("Reset");
resetSearch.setMnemonic('r');
resetSearch.addActionListener(this);
c.weightx = 0.0;
c.gridx = 3;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
gui.add(resetSearch, c);
table = new JTable(myData);
JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
table.setRowSorter(sorter);
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
c.weighty = 1;
c.gridx = 0;
c.gridy = 1;
table.setBorder(new EtchedBorder(2));
table.add(tableMenu);
table.addMouseListener(popupListener);
listSelectionModel = table.getSelectionModel();
listSelectionModel
.addListSelectionListener(new SharedListSelectionHandler());
table.setSelectionModel(listSelectionModel);
// table.addFocusListener(new FocusListener() {
//
// @Override
// public void focusGained(FocusEvent e) {
// }
//
// @Override
// public void focusLost(FocusEvent e) {
// System.out.println(e.getSource());
// if (e.getSource() != tableMenu)
// table.getSelectionModel().clearSelection();
// }
// });
gui.add(scrollPane, c);
quitButton = new JButton("Quit");
quitButton.setMnemonic('q');
quitButton.addActionListener(this);
c.weighty = 0;
// c.anchor = GridBagConstraints.PAGE_END;
c.fill = GridBagConstraints.NONE;
c.gridwidth = GridBagConstraints.REMAINDER;
c.weightx = 0;
c.gridwidth = 1;
c.ipady = 0;
c.gridx = 3;
c.gridy = 3;
gui.add(quitButton, c);
statusBar = new StatusBar();
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 3;
c.fill = GridBagConstraints.HORIZONTAL;
statusBar.setMessage("Total nr. of Items: " + myData.getRowCount());
statusBar.setBorder(new EtchedBorder());
gui.add(statusBar, c);
gui.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
menuBar = new JMenuBar();
menu = new JMenu("Operations");
menu.setMnemonic(KeyEvent.VK_O);
menu.getAccessibleContext().setAccessibleDescription(
"Available operations for items");
menu.add(menu);
menu.add(menuItemInsert);
menu.add(menuItemDelete);
menu.add(menuItemShelf);
menu.add(menuItemWarehouse);
menu.add(menuPopulate);
menuBar.add(menu);
return gui;
}
private void centerFrame(JFrame frame) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
}
private static void createAndShowGUI() {
frame = new JFrame("AdminGUI");
JFrame.setDefaultLookAndFeelDecorated(true);
frame.setSize(640, 480);
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
AdminGUIWebService ag = new AdminGUIWebService();
frame.setContentPane(ag.createContentPane());
// Center window
ag.centerFrame(frame);
// activate
frame.setJMenuBar(menuBar);
frame.validate();
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == quitButton) {
statusBar.setMessage("Bye! ");
frame.dispose();
}
if (e.getSource() == searchButton) {
String text = searchText.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
sorter.setRowFilter(RowFilter.regexFilter(text));
statusBar
.setMessage("Items containing " + searchText.getText());
}
}
if (e.getSource() == resetSearch) {
searchText.setText("");
sorter.setRowFilter(null);
statusBar.setMessage("Total nr. of Items: " + myData.getRowCount());
}
if (e.getSource() == menuItemInsert ||e.getSource() == tablemenuItemInsert) {
table.setAutoCreateColumnsFromModel(false);
myData.insertRow();
statusBar.setMessage("Total nr. of Items: " + myData.getRowCount());
table.setAutoCreateColumnsFromModel(true);
}
if (e.getSource() == menuItemDelete||e.getSource() == tablemenuItemDelete) {
if (table.getSelectedRow() != -1) {
askRemove("Are you sure you want to delete the items?");
}
table.clearSelection();
}
if (e.getSource() == menuPopulate||e.getSource() == tablemenuItemPopulate) {
// int n = 0;
String s = JOptionPane.showInputDialog("How many items? ");
try {
final int n = Integer.parseInt(s);
if (n > 0) {
statusBar.setMessage("Populating database...");
table.setAutoCreateColumnsFromModel(false);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
myData.populateDatabase(n);
}
});
table.setAutoCreateColumnsFromModel(true);
statusBar.setMessage(n + " items created.");
}
} catch (NumberFormatException nfe) {
statusBar.setMessage("You don't know how a number looks like?");
nfe.printStackTrace();
}
}
if (e.getSource() == menuItemShelf||e.getSource() == tablemenuItemShelf) {
if (table.getSelectedRow() != -1) {
int n = JOptionPane.showConfirmDialog(null,
"Are you sure you want to move the items?",
"Move items to shelf", JOptionPane.YES_NO_OPTION);
// the user has clicked the cross
if (n == -1) {
return;
}
// the user has clicked cancel
if (n == 2) {
return;
}
// yes
if (n == 0) {
int[] rows = table.getSelectedRows();
// table.setAutoCreateColumnsFromModel(false);
for (int row : rows) {
myData.moveToLocation("shelf", row);
}
// table.clearSelection();
statusBar.setMessage("Location changed for " + rows.length
+ " items.");
// table.setAutoCreateColumnsFromModel(true);
}
}
table.clearSelection();
}
if (e.getSource() == menuItemWarehouse||e.getSource() == tablemenuItemWarehouse) {
if (table.getSelectedRow() != -1) {
int n = JOptionPane.showConfirmDialog(null,
"Are you sure you want to move the items?",
"Move items to warehouse", JOptionPane.YES_NO_OPTION);
// the user has clicked the cross
if (n == -1) {
return;
}
// the user has clicked cancel
if (n == 2) {
return;
}
// yes
if (n == 0) {
int[] rows = table.getSelectedRows();
// table.setAutoCreateColumnsFromModel(false);
for (int row : rows) {
myData.moveToLocation("warehouse", row);
}
// table.clearSelection();
statusBar.setMessage("Location changed for " + rows.length
+ " items.");
// table.setAutoCreateColumnsFromModel(true);
}
}
table.clearSelection();
}
// }
}
public void askRemove(String message) {
int n = JOptionPane.showConfirmDialog(null, message, "Delete",
JOptionPane.YES_NO_OPTION);
// the user has clicked the cross
if (n == -1) {
return;
}
// the user has clicked cancel
if (n == 2) {
return;
}
// yes
if (n == 0) {
int[] rows = table.getSelectedRows();
table.setAutoCreateColumnsFromModel(false);
for (int row : rows) {
myData.deleteRow(row);
}
myData.updateModel();
table.clearSelection();
statusBar.setMessage(rows.length + " items were deleted. "
+ rows.length);
table.setAutoCreateColumnsFromModel(true);
}
// no
if (n == 1) {
return;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
class PopupListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
showPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
showPopup(e);
}
private void showPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
if (table.getSelectedRows().length > 0) {
menuItemDelete.setEnabled(true);
menuItemShelf.setEnabled(true);
menuItemWarehouse.setEnabled(true);
tablemenuItemDelete.setEnabled(true);
tablemenuItemShelf.setEnabled(true);
tablemenuItemWarehouse.setEnabled(true);
} else {
menuItemDelete.setEnabled(false);
menuItemShelf.setEnabled(false);
menuItemWarehouse.setEnabled(false);
tablemenuItemDelete.setEnabled(false);
tablemenuItemShelf.setEnabled(false);
tablemenuItemWarehouse.setEnabled(false);
}
tableMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
@SuppressWarnings("serial")
class StatusBar extends JLabel {
public StatusBar() {
super();
super.setPreferredSize(new Dimension(100, 16));
setMessage("Ready");
}
public void setMessage(String message) {
setText(" " + message);
}
}
class SharedListSelectionHandler implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (!lsm.isSelectionEmpty())
statusBar.setMessage(table.getSelectedRowCount()
+ " items selected.");
}
}
}