D2D网络数据存储器开发全过程(5)

来源:互联网 发布:python中常用函数 编辑:程序博客网 时间:2024/05/22 14:26

第五章:

下面开始进行左边面板的开发:LeftPanel

左边是一个排列的窗口,这个需要用java的JTabbedPane来实现。

我们规划这个窗口至少包含 本地目录的选择,和,网络目录的选择。我们在构造两个panel继承jpanel,分别为:LocalPanel,NetworkPanel,然后将它们添加入这个窗口。看代码实现:

LeftPanel.java

public class LeftPanel extends JPanel{
    
public LeftPanel(){
        
//添加标题窗口
        JTabbedPane tabbedPane = new JTabbedPane();
        
//添加第一个窗口
        LocalPanel localPanel = new LocalPanel();
        tabbedPane.addTab(DTDInfo.getLeftPanel_TabLocal(),localPanel);
        
//添加第二个窗口
        NetworkPanel networkPanel = new NetworkPanel();
        tabbedPane.addTab(DTDInfo.getLeftPanel_TabNetwork(),networkPanel);
        
        tabbedPane.setBackground(Color.white);
        
        
//支持滚动
        JScrollPane scrollPane = new JScrollPane(tabbedPane);
        
//设置滚动速度
        scrollPane.getVerticalScrollBar().setUnitIncrement(10);
        
this.setLayout(new GridLayout(1,1));
        
this.add(scrollPane);
    }

}

这是后执行程序,我们看到:

LocalPanel,我们将在其中添加一个本地文件的选择器,这里的这个文件选择器,也用一个类来实现

 

public class LocalPanel extends JPanel{
    
public LocalPanel(){
        FileChooserPanel chooser 
= new FileChooserPanel();
        
        
//chooser.setBackground(Color.red);
        this.setLayout(new GridLayout(1,1));
        
this.add(chooser);
        
this.setBackground(Color.blue);
    }

}

如何实现FileChooserPanel呢?

 

public class FileChooserPanel extends JPanel{
    
public FileChooserPanel(){
        
//添加最上面的文本提示框,用来显示当前选中的文件
        JTextField jtf = new JTextField();
        
//jtf.setBackground(Color.white);
        jtf.setEditable(false);
        
//实现一个文件选择器
        DTDJFileChooser chooser = new DTDJFileChooser(jtf);
        
this.setLayout(new BorderLayout());
        
this.setBorder(null);
        
this.add(jtf,BorderLayout.NORTH);
        
this.add(chooser,BorderLayout.CENTER);
    }

}

这里实现DTDJFileChooser我们使用了java的JTree,至于这个对象的详细使用,大家可以参考java的手册,这里提供实现的源代码。

DTDJFileChooser.java

 

package comm;

import java.awt.Component;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;

import javax.swing.Icon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

class FileNode extends DefaultMutableTreeNode {
    
private boolean explored = false;
    
public FileNode(File file) {
        setUserObject(file);
    }


    
public boolean getAllowsChildren() {
        
return isDirectory();
    }


    
public boolean isLeaf() {
        
return !isDirectory();
    }


    
public File getFile() {
        
return (File) getUserObject();
    }


    
public boolean isExplored() {
        
return explored;
    }


    
public boolean isDirectory() {
        File file 
= getFile();
        
return file.isDirectory();
    }


    
public String toString() {
        File file 
= (File) getUserObject();
        String filename 
= file.toString();
        
int index = filename.lastIndexOf(File.separator);

        
return (index != -1 && index != filename.length() - 1? filename
                .substring(index 
+ 1) : filename;
    }


    
public void explore() {
        
if (!isDirectory())
            
return;

        
if (!isExplored()) {
            File file 
= getFile();
            File[] children 
= file.listFiles();

            
for (int i = 0; i < children.length; ++i) {
                
if (children[i].isDirectory())
                
{
                    
if(children[i].isHidden()){
                        
continue;
                    }

                    add(
new FileNode(children[i]));
                }

            }

            
for (int i = 0; i < children.length; ++i) {
                
if (!children[i].isDirectory())
                
{
                    
if(children[i].isHidden()){
                        
continue;
                    }

                    add(
new FileNode(children[i]));
                }

            }

            explored 
= true;
        }

    }


    
public void reexplore() {
        
this.removeAllChildren();
        explored 
= false;
        explore();
    }

}


public class DTDJFileChooser extends JTree{
    
private JTextField curPahtField;
    
private PopupMenu popupMenu = new PopupMenu();
    
private DTDJFileChooser thisptr;
    
    
public void refreshTree(){
        
this.setModel(createTreeModel());
    }

    
public DTDJFileChooser(JTextField jtf){
        
this.curPahtField = jtf;
        
this.setModel(createTreeModel());
        thisptr 
= this;
        MenuItem p1 
= new MenuItem();
        MenuItem p2 
= new MenuItem();
        p1.setLabel(DTDInfo.getDTDJFileChooser_UploadFile());
        p1.addActionListener(
new ActionListener(){
            
public void actionPerformed(ActionEvent e) {
                
// TODO Auto-generated method stub
                
//JOptionPane.showMessageDialog(null,"hello");
                TreePath[] tp = thisptr.getSelectionPaths();
                
if(tp!=null){
                    
for(int i=0;i<tp.length;i++){
                        FileNode node 
= (FileNode)tp[i].getLastPathComponent();
                        System.out.println(node.getFile().getAbsolutePath());
                        
if(node.getFile().isFile()){
                            
//DTDCommTool.uploadFile(DTDCommObj.curLocalFile, DTDCommObj.curNetDisk);
                            
//NetViewPanel nvp = (NetViewPanel)DTDCommObj.netviewPanelContainer.getSelectedComponent();
                            
//nvp.thread_uploadFile(node.getFile());
                        }

                    }

                }

            }

        }
);
        p2.setLabel(DTDInfo.getDTDJFileChooser_Refresh());
        p2.addActionListener(
new ActionListener(){
            
public void actionPerformed(ActionEvent e) {
                refreshTree();
            }

        }
);
        popupMenu.add(p1);
        popupMenu.addSeparator();
        popupMenu.add(p2);
        thisptr.add(popupMenu);
        
        
this.addMouseListener(new MouseListener(){

            
public void mouseClicked(MouseEvent arg0) {
                
// TODO Auto-generated method stub
                if(arg0.getClickCount()==2){
                    
//System.out.println(DTDCommObj.curLocalFile.getAbsolutePath());
                    
//双击事件
                }

            }


            
public void mouseEntered(MouseEvent arg0) {
                
// TODO Auto-generated method stub
                
            }


            
public void mouseExited(MouseEvent arg0) {
                
// TODO Auto-generated method stub
                
            }


            
public void mousePressed(MouseEvent arg0) {
                
// TODO Auto-generated method stub
                
            }


            
public void mouseReleased(MouseEvent arg0) {
                
// TODO Auto-generated method stub
                int mods=arg0.getModifiers();
                
if((mods&InputEvent.BUTTON3_MASK)!=0){
                    popupMenu.show(thisptr,arg0.getX(),arg0.getY());
                }

            }

            
        }
);
        
        
this.addTreeSelectionListener(new TreeSelectionListener(){

            
public void valueChanged(TreeSelectionEvent e) {
                
// TODO Auto-generated method stub
                TreePath path = e.getPath();
                
if (path != null{
                    FileNode node 
= (FileNode) path.getLastPathComponent();
                    
//DTDCommObj.curLocalFile = node.getFile();
                   
// curPahtField.setText(DTDCommObj.curLocalFile.getAbsolutePath());                 
                    curPahtField.setToolTipText(curPahtField.getText());
                }

            }

            
        }
);
        
this.addTreeExpansionListener(new TreeExpansionListener() {
            
public void treeCollapsed(TreeExpansionEvent e) {
                
            }


            
public void treeExpanded(TreeExpansionEvent e) {
                TreePath path 
= e.getPath();
                
if (path != null{
                    FileNode node 
= (FileNode) path.getLastPathComponent();
                    
//DTDCommObj.curLocalFile = node.getFile();
                    
//curPahtField.setText(DTDCommObj.curLocalFile.getAbsolutePath());
                    
//File file = node.getFile();
                    
//System.out.println(file.getPath());
                    if (!node.isExplored()) {
                        DefaultTreeModel model 
= (DefaultTreeModel) getModel();
                        node.explore();
                        model.nodeStructureChanged(node);
                    }

                }

            }

        }
);
        
this.setCellRenderer(new DefaultTreeCellRenderer() {

            
public Component getTreeCellRendererComponent(JTree tree,
                    Object value, 
boolean selected, boolean expanded,
                    
boolean leaf, int row, boolean hasFocus) {
                TreePath tp 
= tree.getPathForRow(row);
                
if (tp != null{
                    FileNode node 
= (FileNode) tp.getLastPathComponent();
                    File f 
= node.getFile();
                    
try {
                        Icon icon 
= FileSystemView.getFileSystemView()
                                .getSystemIcon(f);
                        
this.setIcon(icon);
                        
this.setLeafIcon(icon);
                        
this.setOpenIcon(icon);
                        
this.setClosedIcon(icon);
                        
this.setDisabledIcon(icon);
                    }
 catch (Exception e) {
                        e.printStackTrace();
                    }

                }

                
return super.getTreeCellRendererComponent(tree, value,
                        selected, expanded, leaf, row, hasFocus);
            }


        }
);
        
    }

    
private DefaultTreeModel createTreeModel() {
        File root 
= FileSystemView.getFileSystemView().getRoots()[0];
        FileNode rootNode 
= new FileNode(root);

        rootNode.explore();
        
return new DefaultTreeModel(rootNode);
    }

}

当添加了这个类以后是什么样子呢?

呵,本地文件的选择,可以先放在一边了,我们继续开发网络管理器,这个面板。

显然,网络管理器,我们也是用JTree来实现会比较好。我们用NetworkTree来实现这个tree

作为程序的开发测试,我先写死两个用户名称来测试:

NetworkPanel.java

package panel;

import java.awt.Component;
import java.awt.GridLayout;
import java.io.File;

import javax.swing.Icon;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

class NetworkNode extends DefaultMutableTreeNode{
    
private boolean flag;
    
private String name;
    
public NetworkNode(boolean i,String name){
        flag 
= i;
        
this.name = name;
    }

    
public boolean getAllowsChildren() {
        
return flag;
    }


    
public boolean isLeaf() {
        
return !flag;
    }

    
    
public String getName(){
        
return name;
    }

}

class NetworkTree extends JTree{
    NetworkPanel networkPanel;
    
public NetworkTree(NetworkPanel tmp,DefaultTreeModel model){
        
super(model);
        networkPanel 
= tmp;
        
this.setCellRenderer(new DefaultTreeCellRenderer() {

            
public Component getTreeCellRendererComponent(JTree tree,
                    Object value, 
boolean selected, boolean expanded,
                    
boolean leaf, int row, boolean hasFocus) {
                TreePath tp 
= tree.getPathForRow(row);
                File f;
                
if(tp!=null){
                    NetworkNode node 
= (NetworkNode)tp.getLastPathComponent();                   
                    
if(node.isLeaf()){
                        f 
= new File("tmp.txt");
                        
try{
                            f.createNewFile();
                        }
catch(Exception e){
                            
                        }

                    }

                    
else{
                        f 
= new File("tmpdir");
                        
try{
                            f.mkdir();
                        }
catch(Exception e){
                            
                        }

                    }

                }

                
else{
                    f 
= new File("tmpdir");
                    
try{
                        f.mkdir();
                    }
catch(Exception e){
                        
                    }

                }

                
                
if (tp != null{
                    
try {
                        Icon icon 
= FileSystemView.getFileSystemView()
                            .getSystemIcon(f);
                        
this.setIcon(icon);
                        
this.setLeafIcon(icon);
                        
this.setOpenIcon(icon);
                        
this.setClosedIcon(icon);
                        
this.setDisabledIcon(icon);
                    }
 catch (Exception e) {
                        e.printStackTrace();
                    }

                }

                
return super.getTreeCellRendererComponent(tree, value,
                        selected, expanded, leaf, row, hasFocus);
            }


        }
);
    }

}

public class NetworkPanel extends JPanel{
    
public DefaultMutableTreeNode root;
    NetworkTree tree;
    DefaultTreeModel model;
    
public NetworkPanel(){
        root 
= new NetworkNode(true,"root");
        
        DefaultMutableTreeNode user1 
= new NetworkNode(false,"qq");
        user1.setUserObject(
"94640508@qq.com");
        DefaultMutableTreeNode user2 
= new NetworkNode(false,"google");
        user2.setUserObject(
"018008.com@google.com");
        
        user1.setAllowsChildren(
false);
        user2.setAllowsChildren(
false);
        root.setAllowsChildren(
true);
        root.add(user1);
        root.add(user2);
        
        model 
= new DefaultTreeModel(root);
        tree 
= new NetworkTree(this,model);
        
this.setLayout(new GridLayout(1,1));
        
this.add(tree);
    }

}

这时的界面:

呵呵,好了,该打个包了。

http://www.018008.com/v/D2D1.0_4.rar

 

原创粉丝点击