开发者

SWT(JFace)小制作 FileBrowser文件浏览

开发者 https://www.devze.com 2022-11-29 13:37 出处:网络 作者: 网络整理
SWT(JFace)小制作 FileBrowser文件浏览
代码如下:

复制代码 代码如下:

package swt_jface.demo6;

import java.io.File;

import java.util.Date;

import org.eclipse.jface.resource.ImageRegistry;

import org.eclipse.swt.SWT;

import org.eclipse.swt.graphics.Image;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.program.Program;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Table;

import org.eclipse.swt.widgets.TableColumn;

import org.eclipse.swt.widgets.TableItem;

public class FileBrowser {

Display display = new Display();

Shell shell = new Shell(display);

Table table;

File rootDir;

Image iconFolder = new Image(shell.getDisplay(), "C:/icons/folder.gif");

Image iconFile = new Image(shell.getDisplay(), "C:/icons/file.gif");

public FileBrowser() {

GridLayout gridLayout = new GridLayout();

shell.setLayout(gridLayout);

table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);

//table.setLinesVisible(true);

table.setHeaderVisible(true);

TableColumn tcFileName = new TableColumn(table, SWT.LEFT);

tcFileName.setText("File name");

//tcFileName.setImage(new Image(shell.getDisplay(), "icons/folder.gif"));

TableColumn tcFileSize = new TableColumn(table, SWT.RIGHT);

tcFileSize.setText("Size");

TableColumn tcDateModified = new TableColumn(table, SWT.RIGHT);

tcDateModified.setText("Date Modified");

tcFileName.setWidth(200);

tcFileSize.setWidth(80);

tcDateModified.setWidth(180);

TableItem item = new TableItem(table, SWT.NULL);

item.setText(new String[]{"Name", "Size"});

table.setLayoutData(new GridData(GridData.FILL_BOTH));

table.pack();

shell.pack();

shell.open();

setRootDirectory(new File("."));

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

display.dispose();

}

private void setRootDirectory(File dir) {

this.rootDir = dir;

if(! (dir.exists() && dir.isDirectory()))

throw new IllegalArgumentException("Invalid directory. ");

table.removeAll();

File[] files = dir.listFiles();

for(int i=0; files != null && i < files.length; i++) {

File file = files[i];

TableItem item = new TableItem(table, SWT.NULL);

item.setBackground(i % 2 == 0 ? shell.getDisplay().getSystemColor(SWT.COLOR_WHITE) :

shell.getDisplay().getSystemColor(SWT.COLOR_GRAY)); 编程客栈

item.setText(0, file.getName());

item.setText(2, new Date(file.lastModified()).toString());

if(file.isDirectory()) {

item.setImage(0, iconFolder);

}else{

int lastDot = file.getName().lastIndexOf('.');

if(lastDot >= 0 && lastDot < file.getName().length()) {

item.setImage(0, getIcon(file.getName().substring(lastDot+1)));

}

long kbytes = file.length() / 1024;

if(kbytes == 0)

kbytes = 1;

item.setText(1, kbytes + " KB");

}

}

}

private ImageRegistry imageRegistry;

public Image getIcon(String extension) {

if(imageRegistry == null)

imageRegistry = new ImageRegistry();

Image image = imageRegistry.get(extension);

if(image != null)

return image;

Program program = Program.findProgram(extension);

if(program != null) {

image = new Image(shell.getDisplay(), program.getImageData());

imageRegistry.put(extension, image);

}else{

image = iconFile;

}

return image;

}

public static void main(String[] args) {

new FileBrowser();

}

}

更多的Table操作的例子:

复制代码 代码如下:

package swt_jface.demo6;

import org.eclipse.swt.SWT;

import org.eclipse.swt.custom.TableEditor;

import org.eclipse.swt.graphics.Point;

import org.eclipse.swt.graphics.Rectangle;

import org.eclipse.swt.layout.FillLayout;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Event;

import org.eclipse.swt.widgets.Listener;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Table;

import org.eclipse.swt.widgets.TableColumn;

import org.eclipse.swt.widgets.TableItem;

import org.eclipse.swt.widgets.Text;

public class Main {

public static void main(String[] args) {

Display display = new Display();

Shell shell = new Shell(display);

shell.setLayout(new FillLayout());

final Table table = new Table(shell, SWT.BORDER | SWT.MULTI);

table.setLinesVisible(true);

for (int i = 0; i < 3; i++) {

TableColumn column = new TableColumn(table, SWT.NONE);

column.setWidth(100);

}

for (int i = 0; i < 3; i++) {

TableItem item = new TableItem(table, SWT.NONE);

item.setText(new String[] { "" + i, "" + i, "" + i });

}

final TableEditor editor = new TableEditor(table);

editor.horizontalAlignment = SWT.LEFT;

editor.grabHorizontal = true;

table.addListener(SWT.MouseDown, new Listener() {

public void handleEvent(Event event) {

Rectangle clientArea = table.getClientArea();

Point pt = new Point(event.x, event.y);

int index = table.getTopIndex();

while (index < table.getItemCount()) {

boolean visible = false;

final TableItem item = table.getItem(index);

for (int i = 0; i < table.getColumnCount(); i++) {

Rectangle rect = item.getBounds(i);

if (rect.contains(pt)) {

final int column = i;

final Text text = new Text(table, SWT.NONE);

Listener textListener = new Listener() {

public void handleEvent(final Event e) {

switch (e.type) {

case SWT.FocusOut:

item.setText(column, text.getText());

text.dispose();

break;

case SWT.Traverse:

switch (e.detail) {

case SWT.TRAVERSE_RETURN:

item.setText(column, text.getText());

case SWT.TRAVERS开发者_Python培训E_ESCAPE:

text.dispose();

e.doit = false;

}

break;

}

}

};

text.addListener(SWT.FocusOut, textListener);

text.addListener(SWT.Traverse, textListener);

editor.setEditor(text, item, i);

text.setText(item.getText(i));

text.selectAll();

text.setFocus();

return;

}

if (!visible && rect.intersects(clientArea)) {

visible = true;

}

}

if (!visible)

return;

index++;

}

}

});

shell.pack();

shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch())

display.sleep();

}

display.dispose();

}

}

下面的代码是对FileBrowser功能的增强:

实现1:

FileBrowser.java

复制代码 代码如下:

package swt_jface.demo7;

import java.io.File;

import org.eclipse.jface.action.Action;

import org.eclipse.jface.action.ToolBarManager;

import org.eclipse.jface.resource.ImageRegistry;

import org.eclipse.swt.SWT;

import org.eclipse.swt.custom.TreeEditor;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.events.SelectionListener;

import org.eclipse.swt.events.TreeEvent;

import org.eclipse.swt.events.TreeListener;

import org.eclipse.swt.graphics.Image;

import org.eclipse.swt.graphics.ImageData;

import org.eclipse.swt.graphics.Point;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.program.Program;

import org.eclipse.swt.widgets.DirectoryDialog;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Event;

import org.eclipse.swt.widgets.Listener;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Text;

import org.eclipse.swt.widgets.ToolBar;

import org.eclipse.swt.widgets.Tree;

import org.eclipse.swt.widgets.TreeItem;

public class FileBrowser {

Display display = new Display();

Shell shell = new Shell(display);

Tree tree;

File rootDir;

public FileBrowser() {

Action actionSetRootDir = new Action("Set Root Dir") {

public void run() {

DirectoryDialog dialog = new DirectoryDialog(shell);

String path = dialog.open();

if (path != null) {

setRootDir(new File(path));

}

}

};

ToolBar toolBar = new ToolBar(shell, SWT.FLAT);

ToolBarManager manager = new ToolBarManager(toolBar);

manager.add(actionSetRootDir);

manager.update(true);

shell.setLayout(new GridLayout());

tree = new Tree(shell, SWT.BORDER);

tree.setLayoutData(new GridData(GridData.FILL_BOTH));

setRootDir(new File("C:/temp"));

tree.addTreeListener(new TreeListener() {

public void treeCollapsed(TreeEvent e) {

}

public void treeExpanded(TreeEvent e) {

TreeItem item = (TreeItem) e.item;

TreeItem[] children = item.getItems();

for (int i = 0; i < children.length; i++)

if (children[i].getData() == null)

children[i].dispose();

else

return;

File[] files = ((File) item.getData()).listFiles();

for (int i = 0; files != null && i < files.length; i++)

addFileToTree(item, files[i]);

}

});

tree.addSelectionListener(new SelectionListener() {

public void widgetSelected(SelectionEvent e) {

}

public void widgetDefaultSelected(SelectionEvent e) {

TreeItem item = (TreSTanyeItem) e.item;

File file = (File) item.getData();

if (Program.launch(file.getAbsolutePath())) {

System.out.println("File has been launched: " + file);

} else {

System.out.println("Unable to launch file: " + file);

}

}

});

final TreeEditor editor = new TreeEditor(tree);

tree.addListener(SWT.MouseDown, new Listener() {

public void handleEvent(Event event) {

Point point = new Point(event.x, event.y);

final TreeItem item = tree.getItem(point);

if (item == null)

return;

final Text text = new Text(tree, SWT.NONE);

text.setText(item.getText());

text.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW));

editor.horizontalAlignment = SWT.LEFT;

editor.grabHorizontal = true;

editor.setEditor(text, item);

Listener textListener = new Listener() {

public void handleEvent(final Event e) {

switch (e.type) {

case SWT.FocusOut :

File renamed =

renameFile(

(File) item.getData(),

text.getText());

if (renamed != null) {

item.setText(text.getText());

item.setData(renamed);

}

text.dispose();

break;

case SWT.Traverse :

switch (e.detail) {

case SWT.TRAVERSE_RETURN :

renamed =

renameFile(

(File) item.getData(),

text.getText());

if (renamed != null) {

item.setText(text.getText());

item.setData(renamed);

}

case SWT.TRAVERSE_ESCAPE :

text.dispose();

e.doit = false;

}

break;

}

}

};

text.addListener(SWT.FocusOut, textListener);

text.addListener(SWT.Traverse, textListener);

text.setFocus();

}

});

shell.setSize(400, 260);

shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

display.dispose();

}

private File renameFile(File file, String newName) {

File dest = new File(file.getParentFile(), newName);

if (file.renameTo(dest)) {

return dest;

} else {

return null;

}

}

private void setRootDir(File root) {

if( (!root.isDirectory()) || (!root.exists()))

throw new IllegalArgumentException(http://www.devze.com"Invalid root: " + root);

this.rootDir = root;

shell.setText("Now browsing: " + root.getAbsolutePath());

if (tree.getItemCount() > 0) {

TreeItem[] items = tree.getItems();

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

items[i].dispose();

}

}

File[] files = root.listFiles();

for(int i=0; files != null && i < files.length; i++)

addFileToTree(tree, files[i]);

}

private void addFileToTree(Object parent, File file) {

TreeItem item = null;

if (parent instanceof Tree)

item = new TreeItem((Tree) parent, SWT.NULL);

else if (parent instanceof TreeItem)

item = new TreeItem((TreeItem) parent, SWT.NULL);

else

throw new IllegalArgumentException(

"parent should be a tree or a tree item: " + parent);

item.setText(file.getName());

item.setImage(getIcon(file));

item.setData(file);

if (file.isDirectory()) {

// // recursively adds all the children of this file.

// File[] files = file.listFiles();

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

// buildTree(item, files[i]);

if (file.list() != null && file.list().length > 0)

new TreeItem(item, SWT.NULL);

}

}

private ImageRegistry imageRegistry;

Image iconFolder = new Image(shell.getDisplay(), "C:/icons/folder.gif");

Image iconFile = new Image(shell.getDisplay(), "C:/icons/file.gif");

private Image getIcon(File file) {

if (file.isDirectory())

return iconFolder;

int lastDotPos = file.getName().indexOf('.');

if (lastDotPos == -1)

return iconFile;

Image image = getIcon(file.getName().substring(lastDotPos + 1));

return image == null ? iconFile : image;

}

private Image getIcon(String extension) {

if (imageRegistry == null)

imageRegistry = new ImageRegistry();

Image image = imageRegistry.get(extension);

if (image != null)

return image;

Program program = Program.findProgram(extension);

ImageData imageData = (program == null ? null : program.getImageData());

if (imageData != null) {

image = new Image(shell.getDisplay(), imageData);

imageRegistry.put(extension, image);

} else {

image = iconFile;

}

return image;

}

public static void main(String[] args) {

new FileBrowser();

}

}

实现2:

FileBrowserJFace.java

复制代码 代码如下:

package swt_jface.demo7;

import java.io.File;

import org.eclipse.jface.action.Action;

import org.eclipse.jface.action.ToolBarManager;

import org.eclipse.jface.resource.ImageRegistry;

import org.eclipse.jface.viewers.IStructuredSelection;

import org.eclipse.jface.viewers.ITreeContentProvider;

import org.eclipse.jface.viewers.LabelProvider;

import org.eclipse.jface.viewers.TreeViewer;

import org.eclipse.jface.viewers.Viewer;

import org.eclipse.jface.viewers.ViewerFilter;

import org.eclipse.jface.viewers.ViewerSorter;

import org.eclipse.swt.SWT;

import org.eclipse.swt.graphics.Image;

import org.eclipse.swt.graphics.ImageData;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.program.Program;

import org.eclipse.swt.widgets.DirectoryDialog;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.MessageBox;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.ToolBar;

public class FileBrowserJFace {

Display display = new Display();

Shell shell = new Shell(display);

File rootDir;

TreeViewer treeViewer;

public FileBrowserJFace() {

Action actionSetRootDir = new Action("Set Root Dir") {

public void run() {

DirectoryDialog dialog = new DirectoryDialog(shell);

String path = dialog.open();

if (path != null) {

treeViewer.setInput(new File(path));

}

}

};

final ViewerFilter directoryFilter = new ViewerFilter() {

public boolean select(

Viewer viewer,

Object parentElement,

Object element) {

return ((File)element).isDirectory();

}

};

Action actionShowDirectoriesOnly = new Action("Show directories only") {

public void run() {

if(! isChecked())

treeViewer.removeFilter(directoryFilter);

else

treeViewer.addFilter(directoryFilter);

}

};

actionShowDirectoriesOnly.setChecked(false);

Action actionDeleteFile = new Action("Delete th编程客栈e selected file") {

public void run() {

IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();

File file = (File)selection.getFirstElement();

if(file == null) {

System.out.println("Please select a file first.");

return;

}

MessageBox messageBox = new MessageBox(shell, SWT.YES | SWT.NO);

messageBox.setMessage("Are you sure to delete file: " + file.getName() + "?");

if(messageBox.open() == SWT.YES) {

File parentFile = file.getParentFile();

if(file.delete()) {

System.out.println("File has been deleted. ");

// Notifies the viewer for update.

treeViewer.refresh(parentFile, false);

}else{

System.out.println("Unable to delete file.");

}

}

}

};

ToolBar toolBar = new ToolBar(shell, SWT.FLAT);

ToolBarManager manager = new ToolBarManager(toolBar);

manager.add(actionSetRootDir);

manager.add(actionShowDirectoriesOnly);

manager.add(actionDeleteFile);

manager.update(true);

shell.setLayout(new GridLayout());

treeViewer = new TreeViewer(shell, SWT.BORDER);

treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));

treeViewer.setContentProvider(new ITreeContentProvider() {

public Object[] getChildren(Object parentElement) {

File[] files = ((File)parentElement).listFiles();

if(files == null)

return new Object[0];

return files;

}

public Object getParent(Object element) {

return ((File)element).getParentFile();

}

public boolean hasChildren(Object element) {

File file = (File)element;

File[] files = file.listFiles();

if(files == null || files.length == 0)

return false;

return true;

}

public Object[] getElements(Object inputElement) {

File[] files = ((File)inputElement).listFiles();

if(files == null)

return new Object[0];

return files;

}

public void dispose() {

}

public void inputChanged(

Viewer viewer,

Object oldInput,

Object newInput) {

shell.setText("Now browsing: " + newInput);

}

});

treeViewer.setLabelProvider(new LabelProvider() {

public Image getImage(Object element) {

return getIcon((File)element);

}

public String getText(Object element) {

return ((File)element).getName();

}

});

treeViewer.setSorter(new ViewerSorter() {

public int category(Object element) {

File file = (File)element;

if(file.isDirectory())

return 0;

else

return 1;

}

});

treeViewer.setInput(new File("C:/temp"));

shell.setSize(400, 260);

shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

display.dispose();

}

// private File renameFile(File file, String newName) {

// File dest = new File(file.getParentFile(), newName);

// if (file.renameTo(dest)) {

// rehttp://www.devze.comturn dest;

// } else {

// return null;

// }

// }

private ImageRegistry imageRegistry;

Image iconFolder = new Image(shell.getDisplay(), "C:/icons/folder.gif");

Image iconFile = new Image(shell.getDisplay(), "C:/icons/file.gif");

private Image getIcon(File file) {

if (file.isDirectory())

return iconFolder;

int lastDotPos = file.getName().indexOf('.');

if (lastDotPos == -1)

return iconFile;

Image image = getIcon(file.getName().substring(lastDotPos + 1));

return image == null ? iconFile : image;

}

private Image getIcon(String extension) {

if (imageRegistry == null)

imageRegistry = new ImageRegistry();

Image image = imageRegistry.get(extension);

if (image != null)

return image;

Program program = Program.findProgram(extension);

ImageData imageData = (program == null ? null : program.getImageData());

if (imageData != null) {

image = new Image(shell.getDisplay(), imageData);

imageRegistry.put(extension, image);

} else {

image = iconFile;

}

return image;

}

public static void main(String[] args) {

new FileBrowserJFace();

}

}

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号