Kxgx.com - 移动开发网

本站快讯:
搜索: 您的位置主页>参考源码>软件源码>>阅读源码:Command模式的应用:FTP界面设计

Command模式的应用:FTP界面设计

2006-04-13   来源:   作者:未知   【 】 评论:0条
演示如何在FTP界面设计中使用Command模式



/*

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[] argsthrows Exception {


    JFrame frame = new FTPGUI();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    //frame.pack();
    frame.setSize(450300);
    frame.setVisible(true);
  }

  class buttonHandler implements ActionListener {


    public void actionPerformed(ActionEvent e) {
      CommandInterface CommandObj = (CommandInterfacee.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();
      ((DefaultListModellocalList.getModel()).remove(index);

      ((DefaultListModelremoteList.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();
      ((DefaultListModelremoteList.getModel()).remove(index);



      ((DefaultListModellocalList.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) {


        ((DefaultListModellocalList.getModel()).remove(index);
      }

      index = remoteList.getSelectedIndex();
      if (index >= 0) {
        ((DefaultListModelremoteList.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
Tags:  
责任编辑:
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册)密码:匿名:
    评论总数:0 [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 帮助