Java语言实现简单FTP软件------>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 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(); // 密码框请求焦点
- }
- }
整体界面如下:
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng/article/details/9672939
===================================================================================================
Java语言实现简单FTP软件------>FTP软件主界面的实现(四)的更多相关文章
- Java语言实现简单FTP软件------>源码放送(十三)
Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...
- Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)
1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...
- 一起撸个简单粗暴的Tv应用主界面的网格布局控件(上)
这一篇是真的隔了好久了~~,也终于可以喘口气来好好写博客了,这段时间实在是忙不过来了,迭代太紧.好,废话不多说,进入今天的主题. 效果 图一是Tv应用:当贝市场的主页 图二是咱自己撸的简单粗暴的 Tv ...
- Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)
介绍完FTP协议后,来看看该软件完成后的效果图 客户端的主界面如上图所示,主要是分为以下几个界面: 数据输入界面:用来让用户输入服务器的地址,用户名,密码,端口号等. 站点菜单.本地菜单.远程菜单以及 ...
- Java语言实现简单FTP软件------>FTP软件本地窗口的实现(五)
1.首先看一下本地窗口的布局效果 2.看一下本地窗口实现的代码框架 2.本地窗口的具体实现代码LocalPanel.java package com.oyp.ftp.panel.local; impo ...
- Java语言实现简单FTP软件------>FTP软件远程窗口的实现(六)
1.首先看一下远程窗口的布局效果 2.看一下本地窗口实现的代码框架 3.远程窗口主要实现代码FtpPanel.java package com.oyp.ftp.panel.ftp; import ja ...
- Java语言实现简单FTP软件------>远程文件管理模块的实现(十)
首先看一下界面: 1.远程FTP服务器端的文件列表的显示 将远程的当前目录下所有文件显示出来,并显示文件的属性包括文件名.大小.日期.通过javax.swing.JTable()来显示具体的数据.更改 ...
- 用Java语言编写的迷宫小游戏软件
可查看本项目的github 源码链接,撒娇打滚求 star 哦~~ღ( ´・ᴗ・ ` )比心 本仓库代码是经过 eclipse 编译运行过的,一般情况下将本仓库代码下载下来之后,使用 eclipse ...
- 用Java语言实现简单的词法分析器
编译原理中的词法分析算是很重要的一个部分,原理比较简单,不过网上大部分都是用C语言或者C++来编写,笔者近期在学习Java,故用Java语言实现了简单的词法分析器. 要分析的代码段如下: 输出结果如下 ...
随机推荐
- 查看电脑CPU核心数的方法
查看电脑CPU核心数的方法: 方法一: 同时按下[Ctrl+Shift+Esc]组合快捷键打开任务管理器: 点击[性能]就可以看出是几核CPU了: 方法二: 在计算机图标上面点击右键,选择“管理”: ...
- java基础入门-多线程同步浅析-以银行转账为样例
在说之前先普及一下线程是什么? 线程:说白了就是一个任务片段 进程:是一个具有独立功能的程序关于某个数据集合的一次执行活动.一个进程有一个或者多个线程 线程与进程的本质差别就是有么有数据共享空间.线程 ...
- sshd服务安装和配置管理
1.SSHD简介(介绍) SSH协议:安全外壳协议,为Secure Shell的缩写,SSH为建立在应用层和传输层基础上的安全协议. sshd服务使用SSH协议可以用来进行远程控制,或在计算机之间传送 ...
- Redis之Hash数据结构
0.前言 redis是KV型的内存数据库, 数据库存储的核心就是Hash表, 我们执行select命令选择一个存储的db之后, 所有的操作都是以hash表为基础的, 下面会分析下redis的hash数 ...
- 深入PHP中慎用双等于(==)的详解
PHP比较运算符出现的频率实在是太高了,尤其是 ==if(a == b){// do something}但是,你真的掌握了 == 了吗?细节很重要!来看下面的代码,说出你认为正确的答案var_dum ...
- MII、GMII、RMII、SGMII、XGMII、XAUI、Interlaken
MII即媒体独立接口,也叫介质无关接口.它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1).数据接口包括分别用于发送器和接收器的两条独立信道 ...
- PHP输出xls文件
PHP输出xls文件 标签: phpexcelxmlcsvborderheader 2008-11-17 09:33 2611人阅读 评论(0) 收藏 举报 分类: WebDev(9) 版权声明: ...
- redis主从备份
redis主从备份,默认是读写分离的,master用于写,slave用于读.slave的写只能用于存储一些短暂状态的变量,应为在下次同步时,会被移除. 配置主从备份原则:配从不配主,既只需修改从库配置 ...
- driver基础
驱动测试时,linux驱动常以模块方式插入内核.应包含头文件:linux/kernel.h,linux/module.h 设备驱动的一般结构:Soc(主芯片->设备控制器->外设引脚)-- ...
- github桌面工具commit不了解决
这样发现github上还是空文件, 因为要重新添加过 1. git add -A 添加所有文件 2. git commit -m "xxx" 3. git push -u ...