用applet做一个C/S,服务器上的目录和文件分别显示在客户端界面2个List中。
希望1 选中List内的文件或文件夹后
2 右键点之时弹出菜单
3 菜单提供:文件大小信息item和下载item
4 文件/文件夹大小信息另启窗口显示;存储下载文件到客户端指定位置明确要求继承applet,应该怎么做?小弟初学,没有编程思想,想做个简单的服务器练手,以上问题在网上找了半天,只找到对控件做的,请大家帮帮忙
以下是客户端的List相关,希望在其中加入以上设计public class Homework_Client_Applet extends Applet implements ActionListener{
private List dirList = new List();
private List fileList = new List();
public void init(){
Panel lists = new Panel(new BorderLayout());
 lists.add("North",new PanelBox(dirList,"Directories"));
 lists.add("Center",new PanelBox(fileList,"Files"));
setLayout(new BorderLayout());
 add("North",new PanelBox(status,"Status"));
 add("Center",lists);
 add("South",buttons);
dirList.addActionListener(this);
}
private void showDirectory(String cmd, String path){
try{
send(cmd,path);
path = in.readUTF();
send("list","dummy");
Homework_FileInfo[] list = (Homework_FileInfo[])in.readObject();
dirList.removeAll();
fileList.removeAll();
dirList.add("..");
long total = 0, nDirs = 0, nFiles = 0;
for(int i = 0; i < list.length; i ++){//分别在两个List显示服务器的目录信息和文件信息
if(list[i].isDirectory()){
nDirs++;
dirList.add(list[i].toString());
}
else{
nFiles++;
total += list[i].length();
fileList.add(list[i].toString());
}
}
}
catch(Exception e){
status.setText("Error: "+e);
}
}
public void actionPerformed(ActionEvent ae){
//不会写
}
}

解决方案 »

  1.   

    用applet做一个C/S   现在应该很少了吧... 用applet还不如用B/S  既然是C/S  何不用SWING?
      

  2.   

    以下代码在Applet中加入弹出式菜单。当右击鼠标的时候菜单出现。 final JPopupMenu popupMenu = new JPopupMenu();
    popupMenu.setPopupSize(new Dimension(100, 100));
    addPopup(this, popupMenu);

    JMenuItem menuItem1 = new JMenuItem("menu item 1");
    popupMenu.add(menuItem1);

    JMenuItem menuItem2 = new JMenuItem("menu item 2");
    popupMenu.add(menuItem2); addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
    if(e.isMetaDown()){//检测鼠标右键单击
    popupMenu.setVisible(true);
    }
    }
    });
      

  3.   

    ls 这句话报错哎~
    addPopup(this, popupMenu);
      

  4.   

    5楼你好,我要继承APPLET,应该用不了JPopupMenu的吧?
    现在关于右键弹出菜单的任务已经完成了,代码我会贴在下面。
    现在的问题是如何把列表的选中的内容从服务器端下载下来。
    问题详细描述如下,看这次是我快还是您快~
    C/S:服务器端开通特定端口,客户端接入后,客户端图形界面的列表将显示服务器内容
    客户端列表分两块,一个为文件夹列表,一个为文件列表。
    对应事件为:
    1 双击文件夹列表的文件夹,会进入其中,双机“..”则返回父目录(此问题已解决);右键单击文件夹列表上任意文件夹,右键菜单功能有二--属性(显示文件夹大小)和下载(从服务器下载该文件夹)(此问题待解决)
    2 双击文件列表的任意文件可以直接打开文件,而右键单击该文件右键菜单如1,属性和下载功能(均待解决)这2个问题会花费我很长时间,还是在此向大家求教。下面是我实现的右键菜单代码
    init()中:
               initPopupMenu();
                // add listener for popup capability
                list.addMouseListener(new MouseAdapter() {
                    public void mousePressed(MouseEvent e) {
                        checkPopup(e);
                    }
     
                    public void mouseReleased(MouseEvent e) {
                        checkPopup(e);
                    }
     
                    public void mouseClicked(MouseEvent e) {
                        checkPopup(e);
                    }
     
                    private void checkPopup(MouseEvent e) {
                        if (e.isPopupTrigger())
                            popupMenu.show(e.getComponent(), e.getX(), e.getY());
                    }
                });    
    initPopupMenu()方法:
    private void initPopupMenu() {
            popupMenu = new PopupMenu("LayoutList");
            Font font = new Font("Mono", Font.PLAIN, 12);
            popupMenu.setFont(font);
            MenuItem mnuSelect = new MenuItem("Select");
            MenuItem mnuDeselect = new MenuItem("Deselect");
            MenuItem mnuDelete = new MenuItem("Delete");
            popupMenu.add(mnuSelect);
            popupMenu.add(mnuDeselect);
            popupMenu.addSeparator();
            popupMenu.add(mnuDelete);
            mnuSelect.addActionListener(this);
            mnuDeselect.addActionListener(this);
            mnuDelete.addActionListener(this);
            add(popupMenu);
        }   
      

  5.   

    可以的。import相关类就行了。
    AWT和Swing当然能兼容。
      

  6.   

    想要获得服务器端文件夹的大小,只能用递归实现么?太耗时间资源了
    代码如下
    long nDirs = 0, nFiles = 0;
    double total = 0, totalDir = 0, totalFile = 0;
    for(int i = 0; i < list.length; i ++){
    if(list[i].isDirectory()){
    nDirs++;
    totalDir += getFileSize((File)in.readObject());
    dirList.add(list[i].toString());
    }
    else{
    nFiles++;
    totalFile += list[i].length();
    fileList.add(list[i].toString());
    }
    }
    }
    catch(Exception e){
    status.setText("Error: "+e);
    }
    private double getFileSize(File file)throws Exception{
    double size = 0;
    File[] flist = file.listFiles();
    for(int i=0;i<flist.length;i++){
    if(flist[i].isDirectory())
    size += getFileSize(flist[i]);
    else
    size += flist[i].length();
    }
    return size;
    }
    有没有更有效率的算法?
      

  7.   

    你不记得在Windows上需要知道文件夹中容量大小的时候不也是右击鼠标,然后Windows也要忙活很长时间的吗?
    只能遍历。
      

  8.   

    实现一个图形界面,界面分table,list,textfield区域
    list中显示服务器的所有文件
    希望在鼠标右键点击其上任一文件弹出下拉菜单,选择某一功能问题是,此时的actionPerformed(ActionEvent ae)的ae.getSource()是哪个对象?
    是list还是右键的功能之一?