博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java语言实现简单FTP软件------>FTP软件主界面的实现(四)
阅读量:6118 次
发布时间:2019-06-21

本文共 17695 字,大约阅读时间需要 58 分钟。

首先看一下该软件的整体代码框架

                      

1、首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格

package com.oyp.ftp;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.UIManager;import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;public class FTPMain {	/**	 * 本应用的程序入口	 */	public static void main(String args[]) {		//导致 runnable 的 run 方法在 EventQueue 的指派线程上被调用。		java.awt.EventQueue.invokeLater(new Runnable() {			public void run() {				try {					//使用 LookAndFeel 对象设置当前的默认外观。 					UIManager.setLookAndFeel(new NimbusLookAndFeel());//设置一个非常漂亮的外观//					UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());					FTPClientFrame client_Frame = new FTPClientFrame();					client_Frame.setVisible(true);				} catch (Exception ex) {					Logger.getLogger(FTPClientFrame.class.getName()).log(							Level.SEVERE, null, ex);				}			}		});	}}

2、介绍界面的主程序代码FTPClientFrame.java

package com.oyp.ftp;import java.awt.AWTException;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import javax.swing.ImageIcon;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.JPanel;import javax.swing.JPasswordField;import javax.swing.JSeparator;import javax.swing.JSplitPane;import javax.swing.JTabbedPane;import javax.swing.JTextField;import javax.swing.JToggleButton;import javax.swing.JToolBar;import javax.swing.UIManager;import com.oyp.ftp.panel.ftp.FtpPanel;import com.oyp.ftp.panel.local.LocalPanel;import com.oyp.ftp.panel.manager.FtpSiteDialog;import com.oyp.ftp.panel.queue.DownloadPanel;import com.oyp.ftp.panel.queue.QueuePanel;import com.oyp.ftp.panel.queue.UploadPanel;import com.oyp.ftp.utils.FtpClient;import com.oyp.ftp.utils.SiteInfoBean;import com.sun.java.swing.plaf.nimbus.*;public class FTPClientFrame extends javax.swing.JFrame {	FtpClient ftpClient;	private JPasswordField PassField;	private JButton cutLinkButton;	FtpPanel ftpPanel;	LocalPanel localPanel;	private JTextField portTextField;	private JTextField serverTextField;	private JTextField userTextField;	private QueuePanel queuePanel;	private UploadPanel uploadPanel;	private DownloadPanel downloadPanel;	private JSplitPane jSplitPane1;	private JButton linkButton;	private final LinkToAction LINK_TO_ACTION; // 连接到 按钮的动作处理器	private final CutLinkAction CUT_LINK_ACTION; // 断开 按钮的动作处理器	private SystemTray systemTray;	private JToggleButton shutdownButton;	private final ImageIcon icon = new ImageIcon(getClass().getResource(			"/com/oyp/ftp/res/trayIcon.png"));	public FTPClientFrame() {		LINK_TO_ACTION = new LinkToAction(this, "连接到", null);		CUT_LINK_ACTION = new CutLinkAction(this, "断开", null);		initComponents();		initSystemTray();	}	/**	 * 初始化系统托盘的方法	 */	private void initSystemTray() {		if (SystemTray.isSupported())			systemTray = SystemTray.getSystemTray();		TrayIcon trayIcon = new TrayIcon(icon.getImage());		PopupMenu popupMenu = new PopupMenu("托盘菜单");		// 创建显示主窗体菜单项		MenuItem showMenuItem = new MenuItem("显示主窗体");		showMenuItem.addActionListener(new ActionListener() {			@Override			public void actionPerformed(ActionEvent e) {				FTPClientFrame.this.setExtendedState(JFrame.NORMAL);				FTPClientFrame.this.setVisible(true);			}		});		// 创建退出菜单项		MenuItem exitMenuItem = new MenuItem("退出");		exitMenuItem.addActionListener(new ActionListener() {			@Override			public void actionPerformed(ActionEvent e) {				System.exit(0);			}		});		popupMenu.add(showMenuItem);		popupMenu.addSeparator();		popupMenu.add(exitMenuItem);		trayIcon.setPopupMenu(popupMenu);		try {			systemTray.add(trayIcon);		} catch (AWTException e) {			e.printStackTrace();		}	}	/**	 * 初始化程序界面的方法	 */	private void initComponents() {		setIconImage(icon.getImage());		java.awt.GridBagConstraints gridBagConstraints;		JPanel jPanel1 = new JPanel();		JToolBar jToolBar1 = new JToolBar();		JButton linkTo = new JButton();		cutLinkButton = new JButton();		JPanel jPanel4 = new JPanel();		JLabel jLabel1 = new JLabel();		serverTextField = new JTextField();		JLabel jLabel2 = new JLabel();		userTextField = new JTextField();		JLabel jLabel3 = new JLabel();		PassField = new JPasswordField();		JLabel jLabel6 = new JLabel();		portTextField = new JTextField();		linkButton = new JButton();		JSplitPane jSplitPane2 = new JSplitPane();		jSplitPane1 = new JSplitPane();		ftpPanel = new FtpPanel(this); // 初始化FTP远程资源面板		localPanel = new LocalPanel(this); // 初始化本地资源管理面板		uploadPanel = new UploadPanel(); // 初始化上传队列面板		downloadPanel = new DownloadPanel(); // 初始化下载队列面板		queuePanel = new QueuePanel(this); // 初始化队列面板		JTabbedPane jTabbedPane1 = new JTabbedPane();		JMenuBar MenuBar = new JMenuBar();		JMenu fileMenu = new JMenu();		JMenuItem ftpManageMenuItem = new JMenuItem();		JSeparator jSeparator1 = new JSeparator();		JMenuItem linkToMenuItem = new javax.swing.JMenuItem();		JMenuItem cutMenuItem = new javax.swing.JMenuItem();		JSeparator jSeparator2 = new javax.swing.JSeparator();		JMenuItem exitMenuItem = new javax.swing.JMenuItem();		JMenuItem uploadMenuItem = new javax.swing.JMenuItem();		JSeparator jSeparator3 = new javax.swing.JSeparator();		JMenuItem createFolderMenuItem = new javax.swing.JMenuItem();		JMenuItem renameMenuItem = new javax.swing.JMenuItem();		JMenuItem delMenuItem = new javax.swing.JMenuItem();		JMenu ftpMenu = new javax.swing.JMenu();		JMenuItem downMenuItem = new javax.swing.JMenuItem();		JSeparator jSeparator6 = new javax.swing.JSeparator();		JMenuItem ftpDelMenuItem = new javax.swing.JMenuItem();		JMenuItem ftpRenameMenuItem = new javax.swing.JMenuItem();		JMenuItem newFolderMenuItem = new javax.swing.JMenuItem();		JMenu helpMenu = new javax.swing.JMenu();		JMenuItem aboutMenuItem = new javax.swing.JMenuItem();		JMenuItem bugMenuItem = new javax.swing.JMenuItem();//		setTitle("基于Socket的FTP软件Java实现");		setTitle("Java语言实现简单FTP软件__欧阳鹏设计");		addWindowListener(new java.awt.event.WindowAdapter() {			public void windowOpened(java.awt.event.WindowEvent evt) {				formWindowOpened(evt);			}			public void windowIconified(final WindowEvent e) {				setVisible(false);			}		});		addComponentListener(new java.awt.event.ComponentAdapter() {			public void componentResized(java.awt.event.ComponentEvent evt) {				formComponentResized(evt);			}		});		getContentPane().setLayout(new java.awt.GridBagLayout());		jPanel1.setLayout(new java.awt.GridLayout(0, 1));		jToolBar1.setRollover(true);		jToolBar1.setFloatable(false);		linkTo.setText("连接到");		linkTo.setFocusable(false);		linkTo.setAction(LINK_TO_ACTION);		jToolBar1.add(linkTo);		cutLinkButton.setText("断开");		cutLinkButton.setEnabled(false);		cutLinkButton.setFocusable(false);		cutLinkButton.setAction(CUT_LINK_ACTION);		jToolBar1.add(cutLinkButton);		jPanel1.add(jToolBar1);				shutdownButton = new JToggleButton();		shutdownButton.setText("自动关机");		shutdownButton.setToolTipText("队列完成后,自动关闭计算机");		shutdownButton.setFocusable(false);		jToolBar1.add(shutdownButton);		jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());		jPanel4.setLayout(new javax.swing.BoxLayout(jPanel4,				javax.swing.BoxLayout.LINE_AXIS));		jLabel1.setText("主机地址:");		jPanel4.add(jLabel1);		serverTextField.setText("192.168.1.100");		serverTextField.addKeyListener(new java.awt.event.KeyAdapter() {			public void keyPressed(java.awt.event.KeyEvent evt) {				LinkFTPKeyPressed(evt);			}		});		jPanel4.add(serverTextField);		jLabel2.setText("用户名:");		jPanel4.add(jLabel2);		userTextField.setText("oyp");		userTextField.setMaximumSize(new java.awt.Dimension(200, 2147483647));		userTextField.setPreferredSize(new java.awt.Dimension(100, 21));		userTextField.addKeyListener(new java.awt.event.KeyAdapter() {			public void keyPressed(java.awt.event.KeyEvent evt) {				LinkFTPKeyPressed(evt);			}		});		jPanel4.add(userTextField);		jLabel3.setText("密码:");		jPanel4.add(jLabel3);		PassField.setText("oyp");		PassField.setMaximumSize(new java.awt.Dimension(200, 2147483647));		PassField.setPreferredSize(new java.awt.Dimension(100, 21));		PassField.addKeyListener(new java.awt.event.KeyAdapter() {			public void keyPressed(java.awt.event.KeyEvent evt) {				LinkFTPKeyPressed(evt);			}		});		jPanel4.add(PassField);		jLabel6.setText("端口:");		jPanel4.add(jLabel6);		portTextField.setText("21");		portTextField.setMaximumSize(new java.awt.Dimension(100, 2147483647));		portTextField.setPreferredSize(new java.awt.Dimension(50, 21));		portTextField.addKeyListener(new java.awt.event.KeyAdapter() {			public void keyPressed(java.awt.event.KeyEvent evt) {				LinkFTPKeyPressed(evt);			}		});		jPanel4.add(portTextField);		linkButton.setText("连接");		linkButton.setFocusable(false);		linkButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);		linkButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);		linkButton.addActionListener(new java.awt.event.ActionListener() {			public void actionPerformed(java.awt.event.ActionEvent evt) {				linkButtonActionPerformed(evt);			}		});		jPanel4.add(linkButton);		jPanel1.add(jPanel4);		gridBagConstraints = new java.awt.GridBagConstraints();		gridBagConstraints.gridx = 0;	//指定包含组件的显示区域开始边的单元格,其中行的第一个单元格为 gridx=0。		gridBagConstraints.gridy = 0;	//指定位于组件显示区域的顶部的单元格,其中最上边的单元格为 gridy=0。		//当组件的显示区域大于它所请求的显示区域的大小时使用此字段。		gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;   //在水平方向而不是垂直方向上调整组件大小。		gridBagConstraints.weightx = 1.0;	//指定如何分布额外的水平空间。		getContentPane().add(jPanel1, gridBagConstraints);		jSplitPane2.setBorder(null);		jSplitPane2.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);		jSplitPane2.setResizeWeight(1.0);		jSplitPane2.setContinuousLayout(true);		jSplitPane1.setDividerLocation(400);		jSplitPane1.setDividerSize(10);		jSplitPane1.setOneTouchExpandable(true);		jSplitPane1.setRightComponent(ftpPanel);		jSplitPane1.setLeftComponent(localPanel);		jSplitPane2.setLeftComponent(jSplitPane1);		jTabbedPane1.setMinimumSize(new java.awt.Dimension(40, 170));		jTabbedPane1.addTab("队列", queuePanel);// 添加队列面板		jTabbedPane1.addTab("上传队列", uploadPanel);// 添加上传面板		jTabbedPane1.addTab("下载队列", downloadPanel);// 添加下载面板		jSplitPane2.setBottomComponent(jTabbedPane1);		gridBagConstraints = new java.awt.GridBagConstraints();		gridBagConstraints.gridx = 0;		gridBagConstraints.gridy = 1;		gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;	//在水平方向和垂直方向上同时调整组件大小。		gridBagConstraints.weightx = 1.0;	//指定如何分布额外的水平空间。		gridBagConstraints.weighty = 1.0;	//指定如何分布额外的垂直空间。		getContentPane().add(jSplitPane2, gridBagConstraints);		fileMenu.setMnemonic('f');		fileMenu.setText("站点(F)");		ftpManageMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(				java.awt.event.KeyEvent.VK_S,				java.awt.event.InputEvent.CTRL_MASK));		ftpManageMenuItem.setText("FTP站点管理(S)");		ftpManageMenuItem.addActionListener(new ActionListener() {			@Override			public void actionPerformed(ActionEvent e) {//				System.out.println("action");				FtpSiteDialog dialog = new FtpSiteDialog(FTPClientFrame.this);				dialog.setVisible(true);			}		});		fileMenu.add(ftpManageMenuItem);		fileMenu.add(jSeparator1);		linkToMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(				java.awt.event.KeyEvent.VK_C,				java.awt.event.InputEvent.CTRL_MASK));		linkToMenuItem.setText("连接到...(C)");		linkToMenuItem.setAction(LINK_TO_ACTION);		fileMenu.add(linkToMenuItem);		cutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(				java.awt.event.KeyEvent.VK_Z,				java.awt.event.InputEvent.CTRL_MASK));		cutMenuItem.setText("断开(Z)");		cutMenuItem.setAction(CUT_LINK_ACTION);		fileMenu.add(cutMenuItem);		fileMenu.add(jSeparator2);		exitMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(				java.awt.event.KeyEvent.VK_X,				java.awt.event.InputEvent.CTRL_MASK));		exitMenuItem.setText("退出(X)");		exitMenuItem.addActionListener(new ActionListener() {			@Override			public void actionPerformed(ActionEvent e) {				System.exit(0);			}		});		fileMenu.add(exitMenuItem);		MenuBar.add(fileMenu);		JMenu localMenu = new JMenu();		localMenu.setMnemonic('l');		localMenu.setText("本地(L)");		uploadMenuItem.setMnemonic('U');		uploadMenuItem.setText("上传(U)");		uploadMenuItem.setAction(localPanel.getActionMap().get("uploadAction"));		localMenu.add(uploadMenuItem);		localMenu.add(jSeparator3);		createFolderMenuItem.setMnemonic('C');		createFolderMenuItem.setText("新建文件夹(C)");		createFolderMenuItem.setAction(localPanel.getActionMap().get(				"createFolderAction"));		localMenu.add(createFolderMenuItem);		renameMenuItem.setMnemonic('R');		renameMenuItem.setText("重命名(R)");		renameMenuItem.setAction(localPanel.getActionMap().get("renameAction"));		localMenu.add(renameMenuItem);		delMenuItem.setMnemonic('D');		delMenuItem.setText("删除(D)");		delMenuItem.setAction(localPanel.getActionMap().get("delAction"));		localMenu.add(delMenuItem);		JMenuItem localrefreshMenuItem = new JMenuItem();		localrefreshMenuItem.setMnemonic('R');		localrefreshMenuItem.setText("刷新(R)");		localrefreshMenuItem.setAction(localPanel.getActionMap().get(				"refreshAction"));		localMenu.add(localrefreshMenuItem);		MenuBar.add(localMenu);		ftpMenu.setMnemonic('r');		ftpMenu.setText("远程(R)");		downMenuItem.setMnemonic('U');		downMenuItem.setText("下载(U)");		downMenuItem.setAction(ftpPanel.getActionMap().get("downAction"));		ftpMenu.add(downMenuItem);		ftpMenu.add(jSeparator6);		ftpDelMenuItem.setMnemonic('D');		ftpDelMenuItem.setText("删除(D)");		ftpDelMenuItem.setAction(ftpPanel.getActionMap().get("delAction"));		ftpMenu.add(ftpDelMenuItem);		ftpRenameMenuItem.setMnemonic('R');		ftpRenameMenuItem.setText("重命名(R)");		ftpRenameMenuItem				.setAction(ftpPanel.getActionMap().get("renameAction"));		ftpMenu.add(ftpRenameMenuItem);		newFolderMenuItem.setMnemonic('C');		newFolderMenuItem.setText("新建文件夹(C)");		newFolderMenuItem.setAction(ftpPanel.getActionMap().get(				"createFolderAction"));		ftpMenu.add(newFolderMenuItem);		JMenuItem refreshMenuItem = new JMenuItem();		refreshMenuItem.setMnemonic('R');		refreshMenuItem.setText("刷新(R)");		refreshMenuItem.setAction(ftpPanel.getActionMap().get("refreshAction"));		ftpMenu.add(refreshMenuItem);		MenuBar.add(ftpMenu);		helpMenu.setText("帮助(H)");		aboutMenuItem.setMnemonic('a');		aboutMenuItem.setText("关于(A)");		aboutMenuItem.addActionListener(new AboutItemAction(this));		helpMenu.add(aboutMenuItem);		bugMenuItem.setMnemonic('u');		bugMenuItem.setText("错误报告(U)");		bugMenuItem.addActionListener(new BugItemAction());		helpMenu.add(bugMenuItem);		MenuBar.add(helpMenu);		setJMenuBar(MenuBar);		java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit()				.getScreenSize();		setBounds((screenSize.width - 800) / 2, (screenSize.height - 600) / 2,				800, 700);	}	public JToggleButton getShutdownButton() {		return shutdownButton;	}	/**	 * 窗体装载的事件处理方法	 */	private void formWindowOpened(java.awt.event.WindowEvent evt) {		jSplitPane1.setDividerLocation(0.50);		localPanel.getLocalDiskComboBox().setSelectedIndex(1);		localPanel.getLocalDiskComboBox().setSelectedIndex(0);	}	/**	 * 窗体大小调整的事件处理方法	 */	private void formComponentResized(java.awt.event.ComponentEvent evt) {		jSplitPane1.setDividerLocation(0.50);	}	/**	 * 连接按钮的事件处理方法	 */	private void linkButtonActionPerformed(java.awt.event.ActionEvent evt) {		try {			String server = serverTextField.getText(); // 获取服务器地址			if (server == null) {				return;			}			String portStr = portTextField.getText(); // 获取端口号			if (portStr == null) {				portStr = "21";			}			int port = Integer.parseInt(portStr.trim());			String userStr = userTextField.getText(); // 获取用户名			userStr = userStr == null ? "" : userStr.trim();			String passStr = PassField.getText(); // 获取密码			passStr = passStr == null ? "" : passStr.trim();			cutLinkButton.doClick();			ftpClient = new FtpClient();			ftpClient.openServer(server.trim(), port); // 连接服务器			ftpClient.login(userStr, passStr); // 登录服务器			ftpClient.binary(); // 使用二进制传输模式			if (ftpClient.serverIsOpen()) { // 如果连接成功				CUT_LINK_ACTION.setEnabled(true); // 设置断开按钮可用			} else { // 否则				CUT_LINK_ACTION.setEnabled(false); // 设置断开按钮不可用				return; // 并结束事件处理			}			// 设置本地资源管理面板的FTP连接信息			localPanel.setFtpClient(server, port, userStr, passStr);			// 设置上传按钮可用			localPanel.getActionMap().get("uploadAction").setEnabled(true);			ftpPanel.setFtpClient(ftpClient);// 设置FTP资源管理面板的FTP连接信息			// 设置下载按钮可用			ftpPanel.getActionMap().get("downAction").setEnabled(true);			ftpPanel.refreshCurrentFolder();// 刷新FTP资源管理面板的当前文件夹			queuePanel.startQueue(); // 启动任务队列线程		} catch (Exception ex) {			ex.printStackTrace();		}	}	/**	 * 连接FTP相关的文本框 和密码框的回车事件	 */	private void LinkFTPKeyPressed(java.awt.event.KeyEvent evt) {		if (evt.getKeyChar() == '\n') {			linkButton.doClick();		}	}	public LocalPanel getLocalPanel() {		return localPanel;	}	public FtpPanel getFtpPanel() {		return ftpPanel;	}	public QueuePanel getQueuePanel() {		return queuePanel;	}	public UploadPanel getUploadPanel() {		return uploadPanel;	}	public DownloadPanel getDownloadPanel() {		return downloadPanel;	}	public FtpClient getFtpClient() {		return ftpClient;	}	/**	 * 设置FTP连接信息的方法,由FTP站点管理器调用	 */	public void setLinkInfo(SiteInfoBean bean) {		serverTextField.setText(bean.getServer()); // 设置主机地址		portTextField.setText(bean.getPort() + ""); // 设置端口号		userTextField.setText(bean.getUserName()); // 设置用户名		PassField.setText(""); // 密码清空		PassField.requestFocus(); // 密码框请求焦点	}}

整体界面如下:

==================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址

===================================================================================================

转载于:https://www.cnblogs.com/ouyangpeng/p/8538336.html

你可能感兴趣的文章
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>