⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 explorerexample.java

📁 Novocode的 SWT 控件框架 丰富了MDI功能
💻 JAVA
字号:
package com.novocode.naf.example.explorer;

import java.io.File;
import java.util.ArrayList;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.graphics.Image;

import com.novocode.naf.app.NAFApplication;
import com.novocode.naf.gui.WindowInstance;
import com.novocode.naf.gui.event.*;
import com.novocode.naf.gui.event.IActionListener;
import com.novocode.naf.jface.viewers.BackgroundTreeContentProvider;
import com.novocode.naf.model.DefaultIntModel;
import com.novocode.naf.model.DefaultObjectModel;
import com.novocode.naf.model.ModelMap;
import com.novocode.naf.resource.*;


/**
 * A complex example that shows a Windows Explorer-like shell with sidebars.
 * It also displays a tray item in the system tray (on platforms where that
 * feature is available).
 * 
 * @author Stefan Zeiger (szeiger@novocode.com)
 * @since Nov 22, 2003
 */

public class ExplorerExample
{
  private static final Object FS_ROOT = new Object();
  private static final File[] rootFiles = File.listRoots();


  public static void main(String[] args)
  {
    final NAFApplication app = new NAFApplication(ExplorerExample.class);
    NGComponent win = app.getResource("explorer.naf");
    NGComponent tray = app.getResource("tray.naf");

    ModelMap models = new ModelMap();
    models.put("exit", new IActionListener()
    {
      public void performAction(ActionEvent e)
      {
        e.windowInstance.application.dispose();
      }
    });
    models.put("closeWindow", new DisposeWindowActionListener());
    DefaultIntModel im = new DefaultIntModel(2);
    models.put("model1", im.getIsValueModel(1, 0));
    models.put("model2", im.getIsValueModel(2, 0));
    models.put("model3", im.getIsValueModel(3, 0));
    models.put("closeSidebar", im.getSetToValueActionListener(0));
    models.put("sidebarTitle", im.getStringReadModel(new String[] { "", "Search", "Folders", "History" }));

    models.put("treeContentProvider", new BackgroundTreeContentProvider(new ITreeContentProvider()
    {
      public Object[] getChildren(Object element)
      {
        if(element == FS_ROOT) return rootFiles;
        File[] kids = ((File)element).listFiles();
        if(kids == null) return new Object[0];
        ArrayList<File> l = new ArrayList<File>(kids.length);
        for(int i=0; i<kids.length; i++)
        {
          File f = kids[i];
          if(isRoot(f) || f.isDirectory()) l.add(f);
        }
        return l.toArray();
      }
    
      public boolean hasChildren(Object element)
      {
        if(element == FS_ROOT || isRoot((File)element)) return true;
        else return getChildren(element).length > 0;
      }
    
      public Object getParent(Object element)
      {
        if(element == FS_ROOT) return null;
        if(isRoot((File)element)) return FS_ROOT;
        else return ((File)element).getParent();
      }
      
      public Object[] getElements(Object element) { return getChildren(element); }

      public void dispose() {}
    
      public void inputChanged(Viewer viewer, Object old_input, Object new_input) {}
    }));
    
    final LabelProvider treeLabelProvider = new LabelProvider()
    {
      public String getText(Object element)
      {
        if(BackgroundTreeContentProvider.isPending(element)) return "Pending...";
        if(element == FS_ROOT) return "(Root)";
        if(isRoot((File)element)) return "Volume " + ((File)element).getAbsolutePath();
        return ((File) element).getName();
      }
    
      public Image getImage(Object element)
      {
        if(BackgroundTreeContentProvider.isPending(element)) return null;
        if(element == FS_ROOT) return null;
        if(isRoot((File)element))
          return app.getImageManager().getImage("volume.png").acquire(); // won't be released until the display gets disposed
        if (((File) element).isDirectory())
          return app.getImageManager().getImage("cfldr_obj.gif").acquire(); // won't be released until the display gets disposed
        else
          return app.getImageManager().getImage("file.gif").acquire(); // won't be released until the display gets disposed
      }
    };
    models.put("treeLabelProvider", treeLabelProvider);

    models.put("treeContent", new DefaultObjectModel<Object>(FS_ROOT));
    
    models.put("tableContentProvider", new IStructuredContentProvider()
    {
      public Object[] getElements(Object element)
      {
        if(element instanceof File[]) return (File[]) element;
        else return ((File)element).listFiles();
      }

      public void dispose() {}
    
      public void inputChanged(Viewer viewer, Object old_input, Object new_input) {}
    });
    
    models.put("tableLabelProvider", new ITableLabelProvider()
    {
      public Image getColumnImage(Object element, int columnIndex)
      {
        if(columnIndex == 0) return treeLabelProvider.getImage(element);
        return null;
      }

      public String getColumnText(Object element, int columnIndex)
      {
        if(columnIndex == 0) return treeLabelProvider.getText(element);
        else if(columnIndex == 1)
        {
          File f = (File)element;
          return f.isFile() ? String.valueOf(f.length()) : "";
        }
        else return null;
      }

      public void addListener(ILabelProviderListener listener) {}

      public void dispose() {}

      public boolean isLabelProperty(Object element, String property) { return false; }

      public void removeListener(ILabelProviderListener listener) {}
    });

    models.put("tableContent", new DefaultObjectModel<Object>(rootFiles[0]));

    WindowInstance winI = app.createInstance(win, models);
    WindowInstance trayI = app.createInstance(tray, models);
    
    winI.open();
    trayI.open(); // [TODO] Implement deferred TrayItems
    app.runApp();
    app.dispose();
  }
  
  
  private static boolean isRoot(File f)
  {
    for(int i=0; i<rootFiles.length; i++)
    {
      if(rootFiles[i].equals(f)) return true;
    }
    return false;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -