📄 downloadpanel.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
import net.jxta.discovery.DiscoveryService;
import net.jxta.peergroup.PeerGroup;
import net.jxta.share.*;
import net.jxta.share.client.*;
import net.jxta.share.metadata.*;
public class DownloadPanel extends JPanel
{
public DownloadPanel()
{
DownSubPanel SubPanel = new DownSubPanel();
this.setVisible(true);
this.setLayout(new BorderLayout());
this.add(SubPanel,java.awt.BorderLayout.CENTER);
}
/**
* DownSubPanel serves as the GUI for MetadataSearchDemo
*/
public class DownSubPanel extends JPanel implements ActionListener
{
JButton searchBtn;
JButton viewBtn;
JButton downloadBtn;
List resultList;
//MetadataQuery descQuery;
//MetadataQuery keywdQuery;
JPanel panel;
ListContentRequest request = null;
/*This class is used to search a peergroup for
* content that is being shared using the JXTA CMS. */
ContentAdvertisement[] results = null;
//存储由ListContentRequest返回的ContentAdvertisements
public DownSubPanel()
{
this.setVisible(true);
this.setBackground(Color.pink);
this.setLayout(new BorderLayout());
searchBtn= new JButton("搜索");
viewBtn= new JButton("查看广告");
downloadBtn= new JButton("下载");
panel= new JPanel();
panel.setBorder(BorderFactory.createEtchedBorder());
panel.add(searchBtn);
panel.add(viewBtn);
panel.add(downloadBtn);
searchBtn.addActionListener(this);
viewBtn.addActionListener(this);
downloadBtn.addActionListener(this);
resultList = new List();
this.add(panel,java.awt.BorderLayout.NORTH);
this.add(resultList, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource()==searchBtn) //搜索事件
{
if (request != null)
{
request.cancel();
}
String searchString = JOptionPane.showInputDialog(this, "请输入要搜索的字符串:");
//JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框。
//用户点击取消,退出对话框
if(searchString == null)
return;
String searchDaString="*"+searchString+"*"; //模糊搜索
request = new MyListRequest(StartService.getNetPeerGroup(), searchDaString, this);
//初始化ListContentRequest
//((MyListRequest) request).searchAllSharedContent();
request.activateRequest(); //发送列表请求等待返回结果
//this.validate();
}
else if (e.getSource()==viewBtn) //查看广告事件
{
int selectedIndex = resultList.getSelectedIndex();
if((results != null) && (selectedIndex != -1)&& (results[selectedIndex] != null))
{
new AdvertisementViewer(results[selectedIndex]);
}
}
else if (e.getSource()==downloadBtn) //下载事件
{
int selectedIndex = resultList.getSelectedIndex();
if((results != null) && (selectedIndex != -1)&& (results[selectedIndex] != null))
{
JFileChooser saveDialog = new JFileChooser();
saveDialog.setLocation(300, 200);
File savePath= new File(results[selectedIndex].getName());
saveDialog.setSelectedFile(savePath);
int returnVal = saveDialog.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
savePath = saveDialog.getSelectedFile();
new VisibleContentRequest(getParentWindow(panel), results[selectedIndex],savePath);
}
else
{
System.out.println("save canceled");
}
}
}
}
public Frame getParentWindow(Component compOnApplet)
{
Container c = compOnApplet.getParent();
while (c != null)
{
if (c instanceof Frame)
return (Frame) c;
c = c.getParent();
}
return null;
}
//过滤其他对等点返回的广告,在列表中显示匹配的广告
protected void updateResults(ContentAdvertisement[] results)
{
this.results = results;
resultList.removeAll(); //清空以前的结果
for (int i=0; i<results.length; i++) //将更新的结果写入列表
{
resultList.add(results[i].getName());
}
}
}
class VisibleContentRequest extends GetContentRequest implements ActionListener
{
JDialog dialog;
JProgressBar statusBar = new JProgressBar();
JButton cancelBtn = new JButton("取消");
public VisibleContentRequest(Frame parent, ContentAdvertisement source, File destination)
{
super(StartService.getNetPeerGroup(), source, destination);
dialog = new JDialog(parent, "正在下载"+destination.getName());
dialog.setSize(240, 80);
dialog.setLocation(400,400);
statusBar.setStringPainted(true);
dialog.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
dialog.getContentPane().add(statusBar);
cancelBtn.addActionListener(this);
dialog.getContentPane().add(cancelBtn);
dialog.setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == cancelBtn) //取消下载事件
{
cancel();
System.out.println("取消" + getFile()+ "下载");
dialog.dispose();
dialog = null;
}
}
public void notifyDone() //下载完成时调用该方法
{
System.out.println(getFile()+"下载完成");
dialog.dispose();
dialog = null;
}
public void notifyFailure() //下载失败时调用该方法
{
System.out.println(getFile()+"下载失败");
}
public void notifyUpdate(int percentage)
{
statusBar.setValue(percentage);
}
}
class MyListRequest extends ListContentRequest
{
DownSubPanel DownSubPanel = null;
public MyListRequest(PeerGroup group, String inSubStr,DownSubPanel DownSubPanel)
{
super(group, inSubStr);
this.DownSubPanel = DownSubPanel;
}
public void notifyMoreResults() //当获取更多结果时调用该函数
{
if (DownSubPanel != null)
{
DownSubPanel.updateResults(getResults());
/*getResults()返回当前到达的所有ContentAdvertisements,
* 而不仅仅是最后一个list response*/
}
}
/*
public void searchAllSharedContent()
{
StartService.getNetPeerGroup().getDiscoveryService().getRemoteAdvertisements (null,
DiscoveryService.ADV,
null,
null,
10,
this);
}
*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -