/**/
/*
Copyright (c) 2006 NEC AeroSpace Systems, Ltd. All Rights Reserved
*/
import
java.awt.BorderLayout;
import
java.awt.Color;
import
java.awt.Component;
import
java.awt.Dimension;
import
java.awt.FlowLayout;
import
java.awt.Frame;
import
java.awt.Toolkit;
import
java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import
java.awt.event.MouseAdapter;
import
java.awt.event.MouseEvent;
import
java.io.File;
import
java.io.IOException;

import
javax.swing.BorderFactory;
import
javax.swing.JButton;
import
javax.swing.JDialog;
import
javax.swing.JLabel;
import
javax.swing.JPanel;
import
javax.swing.JScrollPane;
import
javax.swing.JTree;
import
javax.swing.border.Border;
import
javax.swing.event.TreeExpansionEvent;
import
javax.swing.event.TreeExpansionListener;
import
javax.swing.filechooser.FileSystemView;
import
javax.swing.tree.DefaultMutableTreeNode;
import
javax.swing.tree.DefaultTreeModel;
import
javax.swing.tree.TreePath;
import
javax.swing.tree.TreeSelectionModel;


/** */
/**
* <p>Used for select a folder from system.</p>
*
*
@author
wt
*
@version
0.01
*/
public
class
FolderSelectDialog
extends
JDialog
{
private
static
final
long
serialVersionUID
=
3281508190777386340L
;
//
private Frame owner_;
private
boolean
isOKClick_
=
false
;
private
String filepath_
=
""
;
private
JLabel path_
=
new
JLabel(
"
"
);
private
JTree tree_;
private
Border border_
=
BorderFactory.createEtchedBorder(Color.white,
new
Color(
148
,
145
,
140
));

/** */
/**
* <p> 弶婜壔梡儊僜僢僪. </p>
*
@param
owner This dialog's parent Frame.
*/
public
FolderSelectDialog(Frame owner, String title)
{
super
(owner,
true
);
//
owner_ = owner;
setTitle(title);
init();
setToScreenCenter(
this
);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}

private
void
init()
{
isOKClick_
=
false
;
JPanel labelPanel
=
new
JPanel(
new
FlowLayout(FlowLayout.LEFT));
labelPanel.setSize(
300
,
40
);
JPanel buttonPanel
=
new
JPanel(
new
FlowLayout(FlowLayout.RIGHT));
JLabel current
=
new
JLabel(
"
Current Selection
"
);
labelPanel.setLayout(
new
BorderLayout());
labelPanel.add(current, BorderLayout.NORTH);
labelPanel.add(path_, BorderLayout.SOUTH);

File[] roots
=
(
new
PFileSystemView()).getRoots();
FileNode nod
=
new
FileNode (roots[
0
]);
nod.explore();
tree_
=
new
JTree(
new
DefaultTreeModel(nod));
tree_.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

JScrollPane sp
=
new
JScrollPane(tree_);
sp.setBorder(border_);
labelPanel.setBorder(BorderFactory.createEmptyBorder(
0
,
19
,
0
,
0
));
JButton buttonOK
=
new
JButton(
"
OK
"
);
buttonOK.setPreferredSize(
new
Dimension(
70
,
25
));
JButton buttonCanel
=
new
JButton(
"
Canel
"
);
buttonCanel.setPreferredSize(
new
Dimension(
70
,
25
));
buttonPanel.add(buttonOK);
buttonPanel.add(buttonCanel);
//
canel action
buttonCanel.addActionListener(
new
ActionListener()
{

public
void
actionPerformed(ActionEvent e)
{
isOKClick_
=
false
;
FolderSelectDialog.
this
.hide();
}
}
);
//
ok action
buttonOK.addActionListener(
new
ActionListener()
{

public
void
actionPerformed(ActionEvent e)
{
isOKClick_
=
true
;
FolderSelectDialog.
this
.hide();
}
}
);
tree_.setShowsRootHandles(
true
);
 tree_.addTreeExpansionListener(
new
TreeExpansionListener()
{

public
void
treeCollapsed(TreeExpansionEvent e)
{
}
public
void
treeExpanded (TreeExpansionEvent e)
{
TreePath path
=
e.getPath();
FileNode node
=
(FileNode)path.getLastPathComponent();

if
(
!
node.isExplored())
{
DefaultTreeModel model
=
(
(DefaultTreeModel) tree_.getModel());
node.explore();
model.nodeStructureChanged(node);
}
}
}
);
 tree_.addMouseListener(
new
MouseAdapter()
{

public
void
mousePressed(MouseEvent e)
{
JTree tree
=
(JTree)e.getSource();
int
row
=
tree.getRowForLocation(e.getX(), e.getY());

if
(row
==
-
1
)
{
return
;
}
TreePath path
=
tree.getPathForRow(row);

if
(path
==
null
)
{
return
;
}
FileNode node
=
(FileNode)path.getLastPathComponent();

if
(node
==
null
)
{
return
;
}
filepath_
=
node.getString();
path_.setText(filepath_);
}
}
);
getContentPane().add(sp, BorderLayout.CENTER);
getContentPane().add(labelPanel, BorderLayout.NORTH);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
setSize(
350
,
400
);
this
.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}

public
boolean
isOKClick()
{
return
isOKClick_;
}
/** */
/**
* <p>When user click 'OK' Button, use this method to get user selected path.</p>
*
@return
User selected folder path.
*/
public
String getSelectPath()
{
return
filepath_;
}

public
void
setToScreenCenter(Component component)
{
Toolkit kit
=
Toolkit.getDefaultToolkit();
Dimension screenSize
=
kit.getScreenSize();
int
screenHeight
=
screenSize.height;
int
screenWidth
=
screenSize.width;
component.setLocation((screenWidth
-
component.getWidth())
/
2
, (screenHeight
-
component.getHeight())
/
2
);
}

class
FileNode
extends
DefaultMutableTreeNode
{

private
static
final
long
serialVersionUID
=
-
6700441318091474795L
;
private
boolean
explored_
=
false
;

public
FileNode(File file)
{
setUserObject (file);
}
public
boolean
getAllowChildren()
{
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
=
getFile ();
String filename
=
file.toString();
int
index
=
filename.lastIndexOf(
"
\\
"
);
return
(index
!=
-
1
&&
index
!=
filename.length()
-
1
)
?
filename.substring(index
+
1
) :
filename;
}
public
String getString()
{
File file
=
getFile ();
String filename
=
file.getAbsolutePath();
return
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())
{
add(
new
FileNode (children[i]));
}
}
explored_
=
true
;
}
}
}

/** */
/**
* <p>Implement the abstact class FileSystemView.</p>
*
@author
wangtong
*/
class
PFileSystemView
extends
FileSystemView
{

public
File createNewFolder(File containingDir)
throws
IOException
{
return
null
;
}
}
//
public static void main(String[] args) {
//
JFrame f = new JFrame("test");
//
JButton bt = new JButton("Check");
//
bt.addActionListener(new ActionListener() {
//
public void actionPerformed(ActionEvent e) {
//
FolderSelectDialog d = new FolderSelectDialog(
//
(JFrame) SwingUtilities.getWindowAncestor((JButton) e
//
.getSource()), "FOLDER");
//
d.show();
//
if (d.isOKClick()) {
//
System.out.println(d.getSelectPath());
//
}
//
}
//
});
//
f.setContentPane(bt);
//
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//
f.show();
//
f.pack();
//
}
}
|
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 |
|
导航
统计
- 随笔: 115
- 文章: 1
- 评论: 86
- 引用: 0
常用链接
留言簿(5)
随笔档案(115)
网址
搜索
积分与排名
最新评论

阅读排行榜
评论排行榜
|
|