Command Pattern - Example: FTP GUI

/* Software Architecture Design Patterns in Java by Partha Kuchana Auerbach Publications */import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; publicclass FTPGUI extends JFrame { publicstaticfinal String newline = "\n"; publicstaticfinal String UPLOAD = "Upload"; publicstaticfinal String DOWNLOAD = "Download"; publicstaticfinal String DELETE = "Delete"; publicstaticfinal String EXIT = "Exit"; private JPanel pnlFTPUI; private JList localList; private JList remoteList; private DefaultListModel defLocalList, defRemoteList; private UploadButton btnUpload; private DownloadButton btnDownload; private DeleteButton btnDelete; public FTPGUI() throws Exception { super("Command Pattern - Example"); // Create controls defLocalList = new DefaultListModel(); defRemoteList = new DefaultListModel(); localList = new JList(defLocalList); remoteList = new JList(defRemoteList); pnlFTPUI = new JPanel(); localList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); localList.setSelectedIndex(-1); JScrollPane spLocalList = new JScrollPane(localList); remoteList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); remoteList.setSelectedIndex(-1); JScrollPane spRemoteList = new JScrollPane(remoteList); //Create Labels JLabel lblLocalList = new JLabel("Local List:"); JLabel lblRemoteList = new JLabel("Remote List:"); JLabel lblSpacer = new JLabel(" "); //Create buttons btnUpload = new UploadButton(FTPGUI.UPLOAD); btnUpload.setMnemonic(KeyEvent.VK_U); btnDownload = new DownloadButton(FTPGUI.DOWNLOAD); btnDownload.setMnemonic(KeyEvent.VK_N); btnDelete = new DeleteButton(FTPGUI.DELETE); btnDelete.setMnemonic(KeyEvent.VK_D); ExitButton btnExit = new ExitButton(FTPGUI.EXIT); btnExit.setMnemonic(KeyEvent.VK_X); buttonHandler vf = new buttonHandler(); btnUpload.addActionListener(vf); btnDownload.addActionListener(vf); btnDelete.addActionListener(vf); btnExit.addActionListener(vf); JPanel lstPanel = new JPanel(); GridBagLayout gridbag2 = new GridBagLayout(); lstPanel.setLayout(gridbag2); GridBagConstraints gbc2 = new GridBagConstraints(); lstPanel.add(lblLocalList); lstPanel.add(lblRemoteList); lstPanel.add(spLocalList); lstPanel.add(spRemoteList); lstPanel.add(lblSpacer); gbc2.gridx = 0; gbc2.gridy = 0; gridbag2.setConstraints(lblLocalList, gbc2); gbc2.gridx = 1; gbc2.gridy = 0; gridbag2.setConstraints(lblSpacer, gbc2); gbc2.gridx = 5; gbc2.gridy = 0; gridbag2.setConstraints(lblRemoteList, gbc2); gbc2.gridx = 0; gbc2.gridy = 1; gridbag2.setConstraints(spLocalList, gbc2); gbc2.gridx = 5; gbc2.gridy = 1; gridbag2.setConstraints(spRemoteList, gbc2); //----------------------------------- //For layout purposes, put the buttons in a separate panel JPanel buttonPanel = new JPanel(); //---------------------------------------------- GridBagLayout gridbag = new GridBagLayout(); buttonPanel.setLayout(gridbag); GridBagConstraints gbc = new GridBagConstraints(); buttonPanel.add(lstPanel); buttonPanel.add(btnUpload); buttonPanel.add(btnDownload); buttonPanel.add(btnDelete); buttonPanel.add(btnExit); gbc.insets.top = 5; gbc.insets.bottom = 5; gbc.insets.left = 5; gbc.insets.right = 5; gbc.anchor = GridBagConstraints.WEST; gbc.gridx = 1; gbc.gridy = 0; gridbag.setConstraints(btnUpload, gbc); gbc.gridx = 2; gbc.gridy = 0; gridbag.setConstraints(btnDownload, gbc); gbc.gridx = 3; gbc.gridy = 0; gridbag.setConstraints(btnDelete, gbc); gbc.gridx = 4; gbc.gridy = 0; gridbag.setConstraints(btnExit, gbc); gbc.gridx = 0; gbc.gridy = 1; gridbag.setConstraints(lstPanel, gbc); gbc.anchor = GridBagConstraints.EAST; gbc.insets.left = 2; gbc.insets.right = 2; gbc.insets.top = 40; //**************************************************** //Add the buttons and the log to the frame Container contentPane = getContentPane(); contentPane.add(lstPanel, BorderLayout.CENTER); contentPane.add(buttonPanel, BorderLayout.SOUTH); initialize(); try { UIManager.setLookAndFeel(new WindowsLookAndFeel()); SwingUtilities.updateComponentTreeUI(FTPGUI.this); } catch (Exception ex) { System.out.println(ex); } } privatevoid initialize() { // fill some test data here into the listbox. defLocalList.addElement("first.html"); defLocalList.addElement("second.html"); defLocalList.addElement("third.html"); defLocalList.addElement("fourth.html"); defLocalList.addElement("fifth.html"); defLocalList.addElement("Design Patterns 1.html"); defRemoteList.addElement("sixth.html"); defRemoteList.addElement("seventh.html"); defRemoteList.addElement("eighth.html"); defRemoteList.addElement("ninth.html"); defRemoteList.addElement("Design Patterns 2.html"); } publicstaticvoid main(String[] args) throws Exception { JFrame frame = new FTPGUI(); frame.addWindowListener(new WindowAdapter() { publicvoid windowClosing(WindowEvent e) { System.exit(0); } }); //frame.pack(); frame.setSize(450, 300); frame.setVisible(true); } class buttonHandler implements ActionListener { publicvoid actionPerformed(ActionEvent e) { CommandInterface CommandObj = (CommandInterface) e.getSource(); CommandObj.processEvent(); } } interface CommandInterface { publicvoid processEvent(); } class UploadButton extends JButton implements CommandInterface { publicvoid processEvent() { int index = localList.getSelectedIndex(); String selectedItem = localList.getSelectedValue().toString(); ((DefaultListModel) localList.getModel()).remove(index); ((DefaultListModel) remoteList.getModel()).addElement(selectedItem); } public UploadButton(String name) { super(name); } } class DownloadButton extends JButton implements CommandInterface { publicvoid processEvent() { int index = remoteList.getSelectedIndex(); String selectedItem = remoteList.getSelectedValue().toString(); ((DefaultListModel) remoteList.getModel()).remove(index); ((DefaultListModel) localList.getModel()).addElement(selectedItem); } public DownloadButton(String name) { super(name); } } class DeleteButton extends JButton implements CommandInterface { publicvoid processEvent() { int index = localList.getSelectedIndex(); if (index >= 0) { ((DefaultListModel) localList.getModel()).remove(index); } index = remoteList.getSelectedIndex(); if (index >= 0) { ((DefaultListModel) remoteList.getModel()).remove(index); } } public DeleteButton(String name) { super(name); } } class ExitButton extends JButton implements CommandInterface { publicvoid processEvent() { System.exit(1); } public ExitButton(String name) { super(name); } } }// end of class
Related examples in the same category