- 浏览: 228475 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
annyliyear:
找到的ExtJS实现多选下拉框3个代码 -
yinboxian:
源码太乱了
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
yinboxian:
我的peers第一次执行时可以得到正确的结果,以后就不行了。不 ...
JXTA中基于管道监听方式通信 -
cuizhenfu#gmail.com:
http://www.cnblogs.com/cuizhf
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
luxing44530:
请问, jsp页面如果在 META-INF 中, 改怎么访问? ...
Servlet3.0 新特性之模块化实践
Java swing provides File chooser but, it doesn't provide any direct support for directory chooser. Following code helps to create a system directory chooser
import java.awt.BorderLayout;
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.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.Arrays;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
public class DirectoryChooser extends JTree implements TreeSelectionListener,
MouseListener {
private static FileSystemView fsv = FileSystemView.getFileSystemView();
/* --- Begin Public API ----- */
public DirectoryChooser() {
this(null);
}
public DirectoryChooser(File dir) {
super(new DirNode(fsv.getRoots()[0]));
getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
setSelectedDirectory(dir);
addTreeSelectionListener(this);
addMouseListener(this);
}
public void setSelectedDirectory(File dir) {
if (dir == null) {
dir = fsv.getDefaultDirectory();
}
setSelectionPath(mkPath(dir));
}
public File getSelectedDirectory() {
DirNode node = (DirNode) getLastSelectedPathComponent();
if (node != null) {
File dir = node.getDir();
if (fsv.isFileSystem(dir)) {
return dir;
}
}
return null;
}
public void addActionListener(ActionListener l) {
listenerList.add(ActionListener.class, l);
}
public void removeActionListener(ActionListener l) {
listenerList.remove(ActionListener.class, l);
}
public ActionListener[] getActionListeners() {
return (ActionListener[]) listenerList
.getListeners(ActionListener.class);
}
/* --- End Public API ----- */
/* --- TreeSelectionListener Interface ----- */
public void valueChanged(TreeSelectionEvent ev) {
File oldDir = null;
TreePath oldPath = ev.getOldLeadSelectionPath();
if (oldPath != null) {
oldDir = ((DirNode) oldPath.getLastPathComponent()).getDir();
if (!fsv.isFileSystem(oldDir)) {
oldDir = null;
}
}
File newDir = getSelectedDirectory();
firePropertyChange("selectedDirectory", oldDir, newDir);
}
/* --- MouseListener Interface ----- */
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
TreePath path = getPathForLocation(e.getX(), e.getY());
if (path != null && path.equals(getSelectionPath())
&& getSelectedDirectory() != null) {
fireActionPerformed("dirSelected", e);
}
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
/* --- Private Section ------ */
private TreePath mkPath(File dir) {
DirNode root = (DirNode) getModel().getRoot();
if (root.getDir().equals(dir)) {
return new TreePath(root);
}
TreePath parentPath = mkPath(fsv.getParentDirectory(dir));
DirNode parentNode = (DirNode) parentPath.getLastPathComponent();
Enumeration enumeration = parentNode.children();
while (enumeration.hasMoreElements()) {
DirNode child = (DirNode) enumeration.nextElement();
if (child.getDir().equals(dir)) {
return parentPath.pathByAddingChild(child);
}
}
return null;
}
private void fireActionPerformed(String command, InputEvent evt) {
ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
command, evt.getWhen(), evt.getModifiers());
ActionListener[] listeners = getActionListeners();
for (int i = listeners.length - 1; i >= 0; i--) {
listeners[i].actionPerformed(e);
}
}
private static class DirNode extends DefaultMutableTreeNode {
DirNode(File dir) {
super(dir);
}
public File getDir() {
return (File) userObject;
}
public int getChildCount() {
populateChildren();
return super.getChildCount();
}
public Enumeration children() {
populateChildren();
return super.children();
}
public boolean isLeaf() {
return false;
}
private void populateChildren() {
if (children == null) {
File[] files = fsv.getFiles(getDir(), true);
Arrays.sort(files);
for (int i = 0; i < files.length; i++) {
File f = files[i];
if (fsv.isTraversable(f).booleanValue()) {
insert(new DirNode(f), (children == null) ? 0
: children.size());
}
}
}
}
public String toString() {
return fsv.getSystemDisplayName(getDir());
}
public boolean equals(Object o) {
return (o instanceof DirNode && userObject
.equals(((DirNode) o).userObject));
}
}
/* --- Main for testing --- */
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
final JDialog dialog = new JDialog((JFrame) null, true);
final DirectoryChooser dc = new DirectoryChooser();
final JButton okButton = new JButton("OK");
final JButton cancelButton = new JButton("Cancel");
dialog.getContentPane().add(new JScrollPane(dc), BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
dialog.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object c = e.getSource();
if (c == okButton || c == dc) {
System.out.println("You selected: "
+ dc.getSelectedDirectory());
}
dialog.hide();
}
};
dc.addActionListener(actionListener);
okButton.addActionListener(actionListener);
cancelButton.addActionListener(actionListener);
dc.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent ev) {
if (ev.getPropertyName().equals("selectedDirectory")) {
okButton.setEnabled(dc.getSelectedDirectory() != null);
}
}
});
dialog.setBounds(200, 200, 300, 350);
dc.scrollRowToVisible(Math.max(0, dc.getMinSelectionRow() - 4));
dialog.show();
System.exit(0);
}
}
发表评论
-
内存池的实现原理
2024-04-07 16:20 01、内存池的概念 内存池是一种用于管理内存分配和释放的技术 ... -
Java NIO - Buffer
2024-04-06 18:06 0Java NIO中的Buffer用于和NIO通道进行交互。数 ... -
Java NIO - Socket通道
2024-04-06 01:11 01、新的Socket通道类可 ... -
Maven打成Zip包
2013-11-13 17:06 10604如果当前项目是使用Maven管理,并且需要打成Zip,按平 ... -
sigar开发注意点
2013-11-13 16:50 3093<dependency> < ... -
asfasdfasdfasdf
2012-10-11 21:48 0request.setCharacterEncoding(&q ... -
java.lang.NoClassDefFoundError: javax/persistence/EntityListener
2010-12-30 16:08 0正确答案是:添加hibernate3.5.*/lib/jpa/ ... -
共享spket和axis教程
2010-11-26 22:04 1151共享spket和axis教程 -
Try/catch/finally的另一种写法
2010-05-28 21:26 1648从学习Java以来,只是知道try/catch/finally ... -
如何在Eclipse安装反编译工具jad插件
2010-05-01 00:59 32501,将net.sf.jadclipse_3.3.0.jar拷贝 ... -
二分搜寻法(搜寻原则的代表)
2010-04-15 15:42 834如果搜寻的数列已经有排序,应该尽量利用它们已排序的特性,以减少 ... -
如何提高自己的Java编程水平
2010-04-09 00:21 116291. 扎实的基础。数 ... -
把多个任务分派给多个线程去执行
2010-03-28 17:38 1966要把多个任务分派给Java的多个线程去执行,这其中就会有一个任 ... -
剑客vs刀客 Java vs .NET之飘逸的Java
2010-03-28 11:42 676剑,一把好剑,重三两三分,轻如蝉翼,千年寒冰所铸,剑身咖啡色, ... -
Log4j基本使用方法
2010-03-28 10:57 770Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输 ... -
Java GUI 三态导航树
2010-03-27 19:48 18771 通过Java Swing实现的一个三态树组件,包括选择、去 ... -
Java操作Word文档封装类
2010-03-25 18:46 1464基于开源项目jacob的基础上,封装了操作Word常用的方法和 ... -
[Java]双缓冲技术
2010-03-25 00:59 4350我们很多用Java中的g.drawImage()方法导入图像时 ... -
Java String转Date
2010-03-06 08:37 898Date date = new Date();String s ... -
利用Transaction ProxyFactoryBean 生成事务代理
2010-03-06 08:36 1257采用这种方式的配置时,其配置文件的增加非常快,每个bean 有 ...
相关推荐
im-chooser-0.5.3-1.fc8.i386 FEDORA9的中文输入法有BUG,使用FEDORA8的输入法可以解决上述问题。
jcalendar -java calendar chooser jcalendar -java calendar chooser
android the file chooser manager this is the file chooser for the android
图像选择器 一个Android ImageChooser
离线安装包,亲测可用
48.Chooser CompoundChooserandStraddle1114.xls
CM魅族主题(含Theme Chooser)
Swing已经构建很多组件,但是还有一些比较流行的组件没有提供.这个开源项目刚好提供这些少掉的组件.l2fprod-common提供的组件有:PropertySheet,collapsible task pane,button bar,font chooser,directory chooser
它与现有的模型选择器附加组件( , , )不同,其设计目的是可以通过子类进行完全配置-特别是,它可以用于Django模型以外的数据源,例如REST API端点。 打算将wagtail-generic-chooser扩展到涵盖Wagtail内置...
windowsphone windowsphone _Launcher_Chooser的使用
JavaScript应用实例-file_chooser_dialog.js
AutoJs源码-file_chooser_dialog。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己...
jqgrid-columnchooser 从数据库中保存和加载列位置。 这是魔法发生的地方: 第一:关于保存列位置 $table . jqGrid ( 'navButtonAdd' , pagerId , { caption : "Select Columns" , buttonicon : 'ui-icon-carat-2-n-...
A pretty and simple directory chooser and file picker library for 4.4 devices. This library was created to be included in OpenGApps App. There are too many storage chooser out there but this one is ...
android-file-chooser 原始文件位于 由JMGoebel修改 许可证: : GNU通用公共许可证 第3版,2007年6月29日 版权所有:copyright:2007自由软件基金会,公司 允许每个人复制和分发此许可证文档的逐字记录副本,但...
react-native-super-chooserGetting StartedInstallationyarn add react-native-super-chooser ornpm i react-native-super-chooser本组件依赖 react-native 提供的Art库Android默认就包含ART库,IOS需要单独添加...
python库。资源全名:djangocms-lang-chooser-0.1.0.tar.gz
Flutter的桌面嵌入 该项目最初是为了开发Windows,macOS和Linux嵌入式而创建的。 自那以后,这项工作已成为Flutter的一部分,这里剩下的只是实验性的,早期阶段的桌面。 如果要在台式机上开始使用Flutter,现在开始...
便于查找好的方法,用于纺织行业,简单明了一目了然,比较直观的软件。