| /*
 
 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;
 
 public class FTPGUI extends JFrame {
 public static final String newline = "\n";
 
 public static final String UPLOAD = "Upload";
 
 public static final String DOWNLOAD = "Download";
 
 public static final String DELETE = "Delete";
 
 public static final 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);
 }
 
 }
 
 private void 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");
 
 }
 
 public static void main(String[] args) throws Exception {
 
 JFrame frame = new FTPGUI();
 frame.addWindowListener(new WindowAdapter() {
 public void windowClosing(WindowEvent e) {
 System.exit(0);
 }
 });
 
 //frame.pack();
 frame.setSize(450, 300);
 frame.setVisible(true);
 }
 
 class buttonHandler implements ActionListener {
 public void actionPerformed(ActionEvent e) {
 CommandInterface CommandObj = (CommandInterface) e.getSource();
 CommandObj.processEvent();
 }
 }
 
 interface CommandInterface {
 public void processEvent();
 }
 
 class UploadButton extends JButton implements CommandInterface {
 
 public void 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 {
 public void 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 {
 
 public void 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 {
 
 public void processEvent() {
 System.exit(1);
 }
 
 public ExitButton(String name) {
 super(name);
 }
 }
 
 }// end of class
 
 
 
 
 |