激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

2020-09-04 15:32歐陽(yáng)鵬 Java教程

這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP上傳下載隊(duì)列窗口的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家介紹了ftp上傳下載隊(duì)列窗口的實(shí)現(xiàn)方法,供大家參考,具體內(nèi)容如下

1、首先看一下隊(duì)列窗口的界面

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

2、看一下上傳隊(duì)列窗口的界面

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

3、看一下下載隊(duì)列窗口的界面

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

package com.oyp.ftp.panel.queue; 
 
import static java.awt.borderlayout.center; 
import static java.awt.borderlayout.east; 
import static javax.swing.listselectionmodel.single_selection; 
 
import java.awt.borderlayout; 
import java.awt.event.actionevent; 
import java.awt.event.actionlistener; 
import java.io.file; 
import java.io.ioexception; 
import java.util.linkedlist; 
 
import javax.swing.boxlayout; 
import javax.swing.jbutton; 
import javax.swing.jpanel; 
import javax.swing.jscrollpane; 
import javax.swing.jtable; 
import javax.swing.jtogglebutton; 
import javax.swing.jtoolbar; 
import javax.swing.listselectionmodel; 
import javax.swing.timer; 
import javax.swing.table.defaulttablemodel; 
 
import com.oyp.ftp.ftpclientframe; 
import com.oyp.ftp.utils.ftpclient; 
import com.oyp.ftp.utils.ftpfile; 
 
/** 
 * 任務(wù)隊(duì)列控制面板 
 */ 
public class queuepanel extends jpanel implements actionlistener { 
 private jtable queuetable = new jtable(); // 顯示任務(wù)隊(duì)列的表格組件 
 private jscrollpane scrollpane = new jscrollpane(); 
 private ftpclientframe frame; // 主窗體的引用對(duì)象 
 private string[] columns; 
 private ftpclient ftpclient; // ftp協(xié)議的控制類 
 private timer queuetimer;  // 隊(duì)列的定時(shí)器 
 private linkedlist<object[]> localqueue; // 本地面板的上傳隊(duì)列 
 private linkedlist<object[]> ftpqueue;  // ftp面板的下載隊(duì)列 
 private jtogglebutton stopbutton; 
 private boolean stop = false; // 隊(duì)列的控制變量 
 
 /** 
  * 默認(rèn)的構(gòu)造方法 
  */ 
 public queuepanel() { 
  initcomponent(); 
 } 
 
 /** 
  * 自定義的構(gòu)造方法 
  * 
  * @param frame 
  *   主窗體 
  */ 
 public queuepanel(ftpclientframe frame) { 
  this.frame = frame; 
  // 從主窗體獲取本地面板的上傳隊(duì)列 
  localqueue = (linkedlist<object[]>) frame.getlocalpanel().getqueue(); 
  // 從主窗體獲取ftp面板的下載隊(duì)列 
  ftpqueue = (linkedlist<object[]>) frame.getftppanel().getqueue(); 
  initcomponent(); // 初始化窗體界面 
  // 創(chuàng)建定時(shí)器,每間隔1秒執(zhí)行隊(duì)列刷新任務(wù) 
  queuetimer = new timer(1000, new actionlistener() { 
   /** 
    * 定時(shí)器的事件處理方法 
    */ 
   @override 
   public void actionperformed(actionevent e) { 
    if (localqueue.size() + ftpqueue.size() == queuetable 
      .getrowcount()) // 如果隊(duì)列大小沒有改變 
     return; // 結(jié)束本方法,不做任何操作 
    refreshqueue(); // 否則刷新顯示隊(duì)列信息的表格數(shù)據(jù) 
   } 
  }); 
 } 
 
 private void initcomponent() { 
  borderlayout cardlayout = new borderlayout(); 
  setlayout(cardlayout); 
  columns = new string[] { "任務(wù)名稱", "方向", "主機(jī)", "執(zhí)行狀態(tài)" }; 
  queuetable.setmodel(new defaulttablemodel(new object[][] {}, columns)); 
  queuetable.gettableheader().setreorderingallowed(false); 
  scrollpane.setviewportview(queuetable); 
  cardlayout.layoutcontainer(scrollpane); 
  add(scrollpane, center); 
 
  jtoolbar controltool = new jtoolbar(jtoolbar.vertical); 
  controltool.setrollover(true); 
  controltool.setfloatable(false); 
  jbutton upbutton = new jbutton("上移"); 
  upbutton.setactioncommand("up"); 
  upbutton.addactionlistener(this); 
  jbutton downbutton = new jbutton("下移"); 
  downbutton.setactioncommand("down"); 
  downbutton.addactionlistener(this); 
  stopbutton = new jtogglebutton("暫停"); 
  stopbutton.setactioncommand("stop&start"); 
  stopbutton.addactionlistener(this); 
  jbutton delbutton = new jbutton("刪除"); 
  delbutton.setactioncommand("del"); 
  delbutton.addactionlistener(this); 
  jbutton clearbutton = new jbutton("清空"); 
  clearbutton.setactioncommand("clear"); 
  clearbutton.addactionlistener(this); 
  controltool.setlayout(new boxlayout(controltool, boxlayout.y_axis)); 
  controltool.add(upbutton); 
  controltool.add(downbutton); 
  controltool.add(stopbutton); 
  controltool.add(delbutton); 
  controltool.add(clearbutton); 
  add(controltool, east); 
 } 
 
 public void startqueue() { 
  ftpclient = frame.getftpclient(); 
  queuetimer.start(); 
 } 
 
 /** 
  * 界面上按鈕的事件處理方法 
  */ 
 @override 
 public void actionperformed(actionevent e) { 
  final string command = e.getactioncommand(); 
  if (command.equals("stop&start")) {// 處理暫停按鈕事件 
   if (stopbutton.isselected()) { 
    stop = true; 
    stopbutton.settext("繼續(xù)"); 
   } else { 
    stop = false; 
    stopbutton.settext("暫停"); 
   } 
  } 
  // 處理上移和下移按鈕事件 
  if (command.equals("up") || command.equals("down")) { 
   up_down_action(command); // 調(diào)用處理上移和下移動(dòng)作的方法 
  } 
  if (command.equals("del")) {// 處理刪除按鈕的事件 
   int row = queuetable.getselectedrow(); // 獲取顯示隊(duì)列的表格的當(dāng)前選擇行 
   if (row < 0) 
    return; 
   // 獲取選擇行的第一個(gè)表格單元值 
   object valueat = queuetable.getvalueat(row, 0); 
   // 如果選擇內(nèi)容是file類的對(duì)象 
   if (valueat instanceof file) { 
    file file = (file) valueat; 
    int size = localqueue.size(); // 獲取上傳隊(duì)列大小 
    for (int i = 0; i < size; i++) { // 遍歷上傳隊(duì)列 
     if (localqueue.get(i)[0].equals(file)) { 
      localqueue.remove(i); // 從上傳隊(duì)列中刪除文件對(duì)象 
     } 
    } 
   } else if (valueat instanceof string) { // 如果選擇的是字符串對(duì)象 
    string filestr = (string) valueat; 
    int size = ftpqueue.size(); // 獲取上傳隊(duì)列的大小 
    for (int i = 0; i < size; i++) { // 遍歷上傳隊(duì)列 
     // 獲取上傳隊(duì)列中的文件對(duì)象 
     ftpfile ftpfile = (ftpfile) ftpqueue.get(i)[0]; 
     if (ftpfile.getabsolutepath().equals(filestr)) { 
      ftpqueue.remove(i); // 從上傳隊(duì)列中刪除該文件對(duì)象 
     } 
    } 
   } 
   refreshqueue(); // 刷新隊(duì)列列表 
  } 
  if (command.equals("clear")) { // 處理清空按鈕的事件 
   localqueue.clear(); // 調(diào)用本地面板的隊(duì)列的clear()方法 
   ftpqueue.clear(); // 調(diào)用ftp面板的隊(duì)列的clear()方法 
  } 
 } 
 
 /** 
  * 隊(duì)列任務(wù)的上移和下移動(dòng)作處理方法 
  * 
  * @param command 
  *   上移或下移命令 
  */ 
 private void up_down_action(final string command) { 
  int row = queuetable.getselectedrow(); // 獲取隊(duì)列表格的當(dāng)前選擇行號(hào) 
  if (row < 0) 
   return; 
  // 獲取當(dāng)前選擇行的第一個(gè)單元值 
  object valueat = queuetable.getvalueat(row, 0); 
  // 獲取當(dāng)前選擇行的第二個(gè)單元值作為判斷上傳或下載方向的依據(jù) 
  string orientation = (string) queuetable.getvalueat(row, 1); 
  if (orientation.equals("上傳")) { // 如果是上傳任務(wù) 
   string value = ((file) valueat).getabsolutepath(); 
   int size = localqueue.size(); 
   for (int i = 0; i < size; i++) { // 遍歷上傳隊(duì)列 
    object[] que = localqueue.get(i); 
    file file = (file) que[0]; 
    // 從隊(duì)列中,遍歷到選擇的上傳任務(wù)的文件對(duì)象 
    if (file.getabsolutepath().equals(value)) { 
     listselectionmodel selmodel = queuetable 
       .getselectionmodel(); // 獲取表格的選擇模型 
     selmodel // 設(shè)置選擇模型的單選模式 
       .setselectionmode(listselectionmodel.single_selection); 
     int dsize = localqueue.size(); // 獲取本地上傳隊(duì)列的大小 
     int drow = queuetable.getselectedrow();// 獲取隊(duì)列表格的當(dāng)前選擇行號(hào) 
     int queueval = localqueue.size() - dsize; 
 
     int next = -1; 
     int selindex = -1; 
     if (command.equals("up")) { 
      if (i < 1) // 限制選擇范圍 
       return; 
      selindex = drow - queueval - 1; 
      next = i - 1; 
     } else { 
      if (i >= size - 1) // 限制選擇范圍 
       return; 
      selindex = drow - queueval + 1; 
      next = i + 1; 
     } 
     // 交換連個(gè)隊(duì)列位置的任務(wù) 
     object[] temp = localqueue.get(next); 
     localqueue.set(next, que); 
     localqueue.set(i, temp); 
     refreshqueue(); // 刷新隊(duì)列表格的列表 
     // 設(shè)置表格選擇第一行 
     selmodel.setselectioninterval(0, selindex); 
     break; 
    } 
   } 
  } else if (orientation.equals("下載")) { // 如果是下載任務(wù) 
   string value = (string) valueat; 
   int size = ftpqueue.size(); // 獲取ftp下載隊(duì)列的大小 
   for (int i = 0; i < size; i++) { // 遍歷下載隊(duì)列 
    object[] que = ftpqueue.get(i); 
    ftpfile file = (ftpfile) que[0]; // 獲取每個(gè)下載任務(wù)的ftp文件對(duì)象 
    if (file.getabsolutepath().equals(value)) {// 
     listselectionmodel selmodel = queuetable 
       .getselectionmodel(); // 獲取任務(wù)隊(duì)列表格的選擇模型 
     // 設(shè)置模型使用單選模式 
     selmodel.setselectionmode(single_selection); 
     int dsize = ftpqueue.size(); 
     int drow = queuetable.getselectedrow(); 
     int queueval = ftpqueue.size() - dsize; 
 
     int next = -1; 
     int selindex = -1; 
     if (command.equals("up")) { 
      if (i < 1) // 限制選擇范圍 
       return; 
      selindex = drow - queueval - 1; 
      next = i - 1; 
     } else { 
      if (i >= size - 1) // 限制選擇范圍 
       return; 
      selindex = drow - queueval + 1; 
      next = i + 1; 
     } 
     // 交換連個(gè)隊(duì)列位置的任務(wù)內(nèi)容 
     object[] temp = ftpqueue.get(next); 
     ftpqueue.set(next, que); 
     ftpqueue.set(i, temp); 
     refreshqueue(); // 刷新任務(wù)隊(duì)列的表格列表 
     // 選擇表格的第一行 
     selmodel.setselectioninterval(0, selindex); 
     break; 
    } 
   } 
  } 
 } 
 
 /** 
  * 刷新隊(duì)列的方法 
  */ 
 private synchronized void refreshqueue() { 
  // 如果自動(dòng)關(guān)機(jī)按鈕被按下并且上傳和下載的隊(duì)列都有任務(wù) 
  if (frame.getshutdownbutton().isselected() && localqueue.isempty() 
    && ftpqueue.isempty()) { 
   try { 
    // 執(zhí)行系統(tǒng)關(guān)機(jī)命令,延遲30秒鐘 
    runtime.getruntime().exec("shutdown -s -t 30"); 
   } catch (ioexception e) { 
    e.printstacktrace(); 
   } 
  } 
  // 創(chuàng)建表格的數(shù)據(jù)模型對(duì)象 
  defaulttablemodel model = new defaulttablemodel(columns, 0); 
  // 獲取本地上傳隊(duì)列中的任務(wù) 
  object[] localqueuearray = localqueue.toarray(); 
  // 遍歷本地上傳任務(wù) 
  for (int i = 0; i < localqueuearray.length; i++) { 
   object[] queuevalue = (object[]) localqueuearray[i]; 
   if (queuevalue == null) 
    continue; 
   file localfile = (file) queuevalue[0]; 
   // 把上傳隊(duì)列的任務(wù)添加到表格組件的數(shù)據(jù)模型中 
   model.addrow(new object[] { localfile.getabsolutefile(), "上傳", 
     ftpclient.getserver(), i == 0 ? "正在上傳" : "等待上傳" }); 
  } 
  // 獲取下載隊(duì)列的任務(wù) 
  object[] ftpqueuearray = ftpqueue.toarray(); 
  // 遍歷下載隊(duì)列 
  for (int i = 0; i < ftpqueuearray.length; i++) { 
   object[] queuevalue = (object[]) ftpqueuearray[i]; 
   if (queuevalue == null) 
    continue; 
   ftpfile ftpfile = (ftpfile) queuevalue[0]; 
   // 把下載隊(duì)列的任務(wù)添加到表格組件的數(shù)據(jù)模型中 
   model.addrow(new object[] { ftpfile.getabsolutepath(), "下載", 
     ftpclient.getserver(), i == 0 ? "正在下載" : "等待下載" }); 
  } 
  queuetable.setmodel(model); // 設(shè)置表格使用本方法的表格數(shù)據(jù)模型 
 } 
 
 public boolean isstop() { 
  return stop; 
 } 
} 

5.上傳隊(duì)列窗口的實(shí)現(xiàn)

package com.oyp.ftp.panel.queue; 
 
import java.awt.cardlayout; 
 
import javax.swing.jpanel; 
import javax.swing.jscrollpane; 
import javax.swing.jtable; 
import javax.swing.swingutilities; 
import javax.swing.table.defaulttablemodel; 
import javax.swing.table.tablecolumn; 
 
import com.oyp.ftp.panel.queuetablecellranderer; 
import com.oyp.ftp.utils.progressarg; 
 
public class uploadpanel extends jpanel { 
 private jtable uploadtable = new jtable(); // 表格組件 
 private jscrollpane scrollpane = new jscrollpane(); 
 private defaulttablemodel model; // 表格的數(shù)據(jù)模型 
 
 /** 
  * 構(gòu)造方法,用于初始化程序界面 
  */ 
 public uploadpanel() { 
  cardlayout cardlayout = new cardlayout(); 
  setlayout(cardlayout); 
  progressarg progressarg = new progressarg(-1, -1, -1); 
  model = new defaulttablemodel(new object[][] { new object[] { "", "", 
    "", "", progressarg } }, new string[] { "文件名", "大小", "遠(yuǎn)程文件名", 
    "主機(jī)", "狀態(tài)" }); 
  uploadtable.setmodel(model); 
  uploadtable.gettableheader().setreorderingallowed(false); 
  uploadtable.setrowselectionallowed(false); 
  tablecolumn column = uploadtable.getcolumn("狀態(tài)"); 
  column.setcellrenderer(new queuetablecellranderer()); 
  scrollpane.setviewportview(uploadtable); 
  cardlayout.layoutcontainer(scrollpane); 
  add(scrollpane, "queue"); 
 } 
 
 /** 
  * 向上傳隊(duì)列的表格組件添加新任務(wù)的方法 
  * 
  * @param values 
  *   - 添加到表格的一行數(shù)據(jù)的數(shù)組對(duì)象 
  */ 
 public void addrow(final object[] values) { 
  runnable runnable = new runnable() { 
   public void run() { 
    model.insertrow(0, values); // 向表格的數(shù)據(jù)模型添加數(shù)據(jù) 
   } 
  }; 
  if (swingutilities.iseventdispatchthread()) 
   runnable.run(); // 在事件隊(duì)列執(zhí)行 
  else 
   swingutilities.invokelater(runnable); // 或有事件隊(duì)列調(diào)用 
 } 
}

6.下載隊(duì)列窗口的實(shí)現(xiàn)

package com.oyp.ftp.panel.queue; 
 
import java.awt.cardlayout; 
 
import javax.swing.jpanel; 
import javax.swing.jscrollpane; 
import javax.swing.jtable; 
import javax.swing.swingutilities; 
import javax.swing.table.defaulttablemodel; 
import javax.swing.table.tablecolumn; 
 
import com.oyp.ftp.panel.queuetablecellranderer; 
import com.oyp.ftp.utils.progressarg; 
 
public class downloadpanel extends jpanel { 
 private jtable downloadtable = new jtable(); 
 private jscrollpane scrollpane = new jscrollpane(); 
 private defaulttablemodel model; 
 
 public downloadpanel() { 
  cardlayout cardlayout = new cardlayout(); 
  setlayout(cardlayout); 
  progressarg progressarg = new progressarg(-1, -1, -1); 
  model = new defaulttablemodel(new object[][] { new object[] { "", "", 
    "", "", progressarg } }, new string[] { "文件名", "大小", "本地文件名", 
    "主機(jī)", "狀態(tài)" }); 
  downloadtable.setmodel(model); 
  downloadtable.gettableheader().setreorderingallowed(false); 
  downloadtable.setrowselectionallowed(false); 
  tablecolumn column = downloadtable.getcolumn("狀態(tài)"); 
  column.setcellrenderer(new queuetablecellranderer()); 
  scrollpane.setviewportview(downloadtable); 
  cardlayout.layoutcontainer(scrollpane); 
  add(scrollpane, "queue"); 
 } 
 
 public void addrow(final object[] values) { 
  runnable runnable = new runnable() { 
   public void run() { 
    model.insertrow(0, values); 
   } 
  }; 
  if (swingutilities.iseventdispatchthread()) 
   runnable.run(); 
  else 
   swingutilities.invokelater(runnable); 
 } 
} 

下面窗口具體的上傳下載后的變化

1.上傳任務(wù)的添加

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

2.上傳任務(wù)的完成

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

3.下載任務(wù)的添加

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

4.下載任務(wù)的完成

Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載隊(duì)列窗口實(shí)現(xiàn)(7)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/ouyang_peng/article/details/9770325

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲特黄妇女高潮 | 一级黄色在线观看 | 亚洲精品tv久久久久久久久久 | 女18一级大黄毛片免费女人 | 成人毛片免费在线 | 国产精品久久久久久久久久电影 | 最新影院 | 国产精品午夜一区 | 国产免费v片 | 国产免费www | 最新日本中文字幕在线观看 | 日韩黄色免费电影 | 经典三级在线视频 | 日本成人在线免费 | 久久视频精品 | 久色一区| 国产精品视频免费看 | 欧美一级高潮 | 在线播放黄色网址 | 爱爱视频天天干 | 亚洲射逼 | 亚洲小视频网站 | 九九热免费在线观看 | 欧美成人精品不卡视频在线观看 | av在线免费看网站 | 国产精品九九久久一区hh | 久久久无码精品亚洲日韩按摩 | 欧美成人性生活 | 亚洲一区二区在线视频 | 97zyz成人免费视频 | 国产系列 视频二区 | 99精品视频在线观看免费播放 | 黄视频免费在线 | 中午字幕无线码一区2020 | 欧美一区黄色 | 国产美女白浆 | 国产欧美精品一区二区三区四区 | 色综合网在线观看 | h色在线观看 | 久久人添人人爽人人爽人人片av | 一级成人欧美一区在线观看 |