Java语言实现简单FTP软件 FTP软件主界面(4)

网友投稿 249 2023-05-27


Java语言实现简单FTP软件 FTP软件主界面(4)

首先看一下FTP软件的整体代码框架,具体内容如下

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 javhttp://ax.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) { lojWaoPnZ

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);

fileMhttp://enu.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(); // 密码框请求焦点

}

}

整体界面如下:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java刷视频浏览量点赞量的实现代码
下一篇:微信小程序 列表的上拉加载和下拉刷新的实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~