日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

java实现Windows资源管理器

發布時間:2025/7/14 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现Windows资源管理器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這幾天忙別的了,StatusBar存在的問題沒來得及解決,也沒出新東西。只好貼一個以前的作品救救場。 程序僅僅實現了仿Windows資源管理器的本地文件的瀏覽功能,不能通過“網上鄰居”瀏覽鄰近的電腦,另外,“控制面板”和“垃圾箱”也沒能列出來。 程序包括3個文件,分別是JExplorer.java、FileTree.java和FileList.java。可以在網頁中tl.exercise.swing文件夾中找到。其中FileTree.java中定義了一個用來顯示Windows文件夾的樹;顧名思義FileList.java中定義的是列表,不夠這個列表很簡單;main函數在JExplorer.java里面。 樹的實現其實很簡單,主要使用了兩個技術: 1.???? 使用javax.swing.filechooser.FileSystemView列舉系統文件夾,獲得系統圖標。 2.?? 使用javax.swing.tree.DefaultTreeCellRenderer改變Node的圖標。
===================================================================

// FileTree.java

/***********************************************************

?*??? Author: Jason

?*???? email: tl21cen@hotmail.com

?* CSDN blog: http://blog.csdn.net/UnAgain/

?***********************************************************/

package tl.exercise.swing;

?

import java.awt.Component;

import java.io.File;

import java.util.Vector;

?

import javax.swing.Icon;

import javax.swing.JTree;

import javax.swing.event.TreeExpansionEvent;

import javax.swing.event.TreeExpansionListener;

import javax.swing.event.TreeModelListener;

import javax.swing.event.TreeSelectionEvent;

import javax.swing.event.TreeSelectionListener;

import javax.swing.filechooser.FileSystemView;

import javax.swing.tree.DefaultTreeCellRenderer;

import javax.swing.tree.TreeModel;

import javax.swing.tree.TreePath;

?

public class FileTree extends JTree {

??? static final long serialVersionUID = 0;

?

??? private FileList theList;

?

??? public FileTree(FileList list) {

??? ??? theList = list;

??? ??? setModel(new FileSystemModel(new FolderNode()));

??? ??? this.setCellRenderer(new FolderRenderer());

??????

??? ??? addTreeSelectionListener(new TreeSelectionListener() {

?????? ??? public void valueChanged(TreeSelectionEvent tse) {

?????????? }

?????? });

??????

??? ??? this.setSelectionRow(0);

??? }

?

??? public void fireValueChanged(TreeSelectionEvent tse) {

??? ??? TreePath tp = tse.getNewLeadSelectionPath();

??? ??? Object o = tp.getLastPathComponent();

?????? // theList.fireTreeSelectionChanged((PathNode)o);

??? ??? theList.fireTreeSelectionChanged((FolderNode) o);

??? }

?

??? public void fireTreeCollapsed(TreePath path) {

??? ??? super.fireTreeCollapsed(path);

??? ??? TreePath curpath = getSelectionPath();

?

?????? if (path.isDescendant(curpath)) {

?????? ??? setSelectionPath(path);

?????? }

??? }

?

??? public void fireTreeWillExpand(TreePath path) {

??? ??? System.out.println("Path will expand is " + path);

??? }

?

??? public void fireTreeWillCollapse(TreePath path) {

??? ??? System.out.println("Path will collapse is " + path);

??? }

?

??? class ExpansionListener implements TreeExpansionListener {

??? ??? FileTree tree;

?

??? ??? public ExpansionListener(FileTree ft) {

?????? ??? tree = ft;

?????? }

?

??? ??? public void treeCollapsed(TreeExpansionEvent tee) {

?????? }

?

??? ??? public void treeExpanded(TreeExpansionEvent tee) {

?????? }

??? }

}

?

class FileSystemModel implements TreeModel {

??? I_fileSystem theRoot;

?

??? char fileType = I_fileSystem.DIRECTORY;

?

??? public FileSystemModel(I_fileSystem fs) {

??? ??? theRoot = fs;

??? }

?

??? public Object getRoot() {

??? ??? return theRoot;

??? }

?

??? public Object getChild(Object parent, int index) {

??? ??? return ((I_fileSystem) parent).getChild(fileType, index);

?

??? }

?

??? public int getChildCount(Object parent) {

??? ??? return ((I_fileSystem) parent).getChildCount(fileType);

??? }

?

??? public boolean isLeaf(Object node) {

??? ??? return ((I_fileSystem) node).isLeaf(fileType);

??? }

?

??? public int getIndexOfChild(Object parent, Object child) {

??? ??? return ((I_fileSystem) parent).getIndexOfChild(fileType, child);

??? }

?

??? public void valueForPathChanged(TreePath path, Object newValue) {

??? }

?

??? public void addTreeModelListener(TreeModelListener l) {

??? }

?

??? public void removeTreeModelListener(TreeModelListener l) {

??? }

}

?

interface I_fileSystem {

??? final public static char DIRECTORY = 'D';

?

??? final public static char FILE = 'F';

?

??? final public static char ALL = 'A';

?

??? public Icon getIcon();

?

??? public I_fileSystem getChild(char fileType, int index);

?

??? public int getChildCount(char fileType);

?

??? public boolean isLeaf(char fileType);

?

??? public int getIndexOfChild(char fileType, Object child);

}

?

/**

?* A data model for a JTree. This model explorer windows file system directly.

?*

?* <p>

?* Perhaps there is a fatal bug with this design. For speed, each of instances

?* of this model contains file objects of subdirectory, up to now, there isn't

?* any method to release them until program be end. I'm afraid that the memory

?* would be full of if the file system is large enough and JVM memery size

?* setted too small.

?*

?* <p>

?* I won't pay more attention to solve it. it isn't goal of current a exercise.

?*

?* @author Jason

?*/

class FolderNode implements I_fileSystem {

?

??? // private static FolderNode theRoot;

??? private static FileSystemView fsView;

?

??? private static boolean showHiden = true;;

?

??? private File theFile;

?

??? private Vector<File> all = new Vector<File>();

?

??? private Vector<File> folder = new Vector<File>();

?

??? /**

??? ?* set that whether apply hiden file.

??? ?*

??? ?* @param ifshow

??? ?*/

??? public void setShowHiden(boolean ifshow) {

??? ??? showHiden = ifshow;

??? }

?

??? public Icon getIcon() {

??? ??? return fsView.getSystemIcon(theFile);

??? }

?

??? public String toString() {

?????? // return fsView.

??? ??? return fsView.getSystemDisplayName(theFile);

??? }

?

??? /**

??? ?* create a root node. by default, it should be the DeskTop in window file

??? ?* system.

??? ?*

??? ?*/

??? public FolderNode() {

??? ??? fsView = FileSystemView.getFileSystemView();

??? ??? theFile = fsView.getHomeDirectory();

??? ??? prepareChildren();

??? }

?

??? private void prepareChildren() {

????? File[] files = fsView.getFiles(theFile, showHiden);

?

?????? for (int i = 0; i < files.length; i++) {

?????? ??? all.add(files[i]);

?????? ??? if (files[i].isDirectory()

?????????? ??? ??? && !files[i].toString().toLowerCase().endsWith(".lnk")) {

?

?????????? ??? folder.add(files[i]);

?????????? }

?????? }

??? }

?

??? private FolderNode(File file) {

??? ??? theFile = file;

??? ??? prepareChildren();

??? }

?

??? public FolderNode getChild(char fileType, int index) {

?????? if (I_fileSystem.DIRECTORY == fileType) {

?????? ??? return new FolderNode(folder.get(index));

?????? } else if (I_fileSystem.ALL == fileType) {

?????? ??? return new FolderNode(all.get(index));

?????? } else if (I_fileSystem.FILE == fileType) {

?????? ??? return null;

?????? } else {

?????? ??? return null;

?????? }

?

??? }

?

??? public int getChildCount(char fileType) {

?????? if (I_fileSystem.DIRECTORY == fileType) {

?????? ??? return folder.size();

?????? } else if (I_fileSystem.ALL == fileType) {

?????? ??? return all.size();

?????? } else if (I_fileSystem.FILE == fileType) {

?????? ??? return -1;

?????? } else {

?????? ??? return -1;

?????? }

??? }

?

??? public boolean isLeaf(char fileType) {

?????? if (I_fileSystem.DIRECTORY == fileType) {

?????? ??? return folder.size() == 0;

?????? } else if (I_fileSystem.ALL == fileType) {

?????? ??? return all.size() == 0;

?????? } else if (I_fileSystem.FILE == fileType) {

?????? ??? return true;

?????? } else {

?????? ??? return true;

?????? }

??? }

?

??? public int getIndexOfChild(char fileType, Object child) {

?????? if (child instanceof FolderNode) {

?????? ??? if (I_fileSystem.DIRECTORY == fileType) {

?????????? ??? return folder.indexOf(((FolderNode) child).theFile);

?????????? } else if (I_fileSystem.ALL == fileType) {

?????????? ??? return all.indexOf(((FolderNode) child).theFile);

?????????? } else if (I_fileSystem.FILE == fileType) {

?????????? ??? return -1;

?????????? } else {

?????????? ??? return -1;

?????????? }

?????? } else {

?????? ??? return -1;

?????? }

??? }

}

?

class FolderRenderer extends DefaultTreeCellRenderer {

??? private static final long serialVersionUID = 1L;

??? public Component getTreeCellRendererComponent(JTree tree, Object value,

?????? ??? boolean sel, boolean expanded, boolean leaf, int row,

?????? ??? boolean hasFocus) {

?

??? ??? I_fileSystem node = (I_fileSystem) value;

?????? Icon icon = node.getIcon();

?

??? ??? setLeafIcon(icon);

??? ??? setOpenIcon(icon);

??? ??? setClosedIcon(icon);

?

??? ??? return super.getTreeCellRendererComponent(tree, value, sel, expanded,

?????????? ?? leaf, row, hasFocus);

??? }

}


=========================================================
// JExplorer.java

package tl.exercise.swing;

?

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.Toolkit;

?

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JSplitPane;

import javax.swing.border.BevelBorder;

?

public class JExplorer {

??? public static void main(String[] args) {

??? ??? //JFrame.setDefaultLookAndFeelDecorated(true);

??? ??? JFrame frame = new JFrame();

??? ??? frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

?

??? ??? frame.getContentPane().add(new UI(frame));

?

??? ??? frame.pack();

?

??? ??? Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();

?????? int left = (screen.width - frame.getWidth()) / 2;

?????? int top = (screen.height - frame.getHeight()) / 2;

?

??? ??? frame.setLocation(left, top);

?

??? ??? frame.setVisible(true);

??? }

}

?

class UI extends JPanel {

??? //implements I_menuHandler{

??? static final long serialVersionUID = 0l;

?

??? static int LEFT_WIDTH = 200;

?

??? static int RIGHT_WIDTH = 300;

?

??? static int WINDOW_HEIGHT = 300;

?

??? JFrame frame = null;

?

??? public UI(JFrame frame) {

??? ??? //EmptyBorder eb = new EmptyBorder(1,1,1,1);

?

??? ??? this.frame = frame;

??? ??? setPreferredSize(new Dimension(800, 600));

?

??? ??? setBorder(new BevelBorder(BevelBorder.LOWERED));

?

??? ??? setLayout(new BorderLayout());

?

??? ??? FileList list = new FileList();

??? ??? FileTree tree = new FileTree(list);

??? ??? tree.setDoubleBuffered(true);

??? ??? list.setDoubleBuffered(true);

?

??? ??? JScrollPane treeView = new JScrollPane(tree);

??? ??? treeView.setPreferredSize(

new Dimension(LEFT_WIDTH, WINDOW_HEIGHT));

??? ??? JScrollPane listView = new JScrollPane(list);

??? ??? listView.setPreferredSize(

new Dimension(RIGHT_WIDTH, WINDOW_HEIGHT));

?

??? ??? JSplitPane pane =

new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treeView,

?????????? ??? listView);

??? ??? pane.setDividerLocation(300);

??? ??? pane.setDividerSize(4);

??? ??? //pane.setDoubleBuffered(true);

?

??? ??? add(pane);

??? }

}


==========================================================
// FileList.java

package tl.exercise.swing;?

import java.awt.Color;

import java.awt.Component;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.ListCellRenderer;

import javax.swing.ListModel;

import javax.swing.event.ListDataListener;

?

public class FileList

extends JList{

??? //PathNode theNode;

??? FileListModel dataModel;

??? static final long serialVersionUID = 10;

???? public FileList() {

??? ??? dataModel = new FileListModel();

??? ??? setModel(dataModel);

??? ??? this.setCellRenderer(new MyCellRenderer());

??? }

????public void fireTreeSelectionChanged(I_fileSystem node) {

??? ??? //Vector files = node.getFiles();

??? ??? //theNode = node;

??? ??? dataModel.setNode(node);

??? ??? updateUI();

??? }

}

?

class FileListModel

implements ListModel {

??? FileList theList;

??? I_fileSystem node;

??? char fileType = I_fileSystem.ALL;

?

??? public void setNode (I_fileSystem node) {

??? ??? this.node = node;

??? }

?

??? public Object getElementAt(int index) {

?????? if (node != null) {

?????? ??? return ((I_fileSystem)node).getChild(fileType, index);

?????? } else {

?????? ??? return null;

?????? }

??? }

?

??? public int getSize() {

?????? if (node != null) {

?????? ??? return ((I_fileSystem)node).getChildCount(fileType);

?????? } else {

?????? ??? return 0;

?????? }?? ???

??? }

???

??? public void addListDataListener(ListDataListener l) {

??? }

??? public void removeListDataListener(ListDataListener l) {

??? }

}

?

class MyCellRenderer extends JLabel implements ListCellRenderer {

??? public MyCellRenderer() {

??????? setOpaque(true);

??? }

??? public Component getListCellRendererComponent(

??????? JList list,

??????? Object value,

??????? int index,

??????? boolean isSelected,

??????? boolean cellHasFocus)

??? {

??? ??? FolderNode node = (FolderNode)value;

??? ??? setIcon(node.getIcon());

??????? setText(value.toString());

??????? setBackground(isSelected ? Color.BLUE.darker().darker(): Color.WHITE);

????? ??setForeground(isSelected ? Color.WHITE : Color.BLACK);

??????? return this;

??? }

}


轉載于:https://www.cnblogs.com/kentyshang/archive/2007/08/10/851041.html

總結

以上是生活随笔為你收集整理的java实现Windows资源管理器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。