/**/
/*
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)
网址
搜索
积分与排名
最新评论
阅读排行榜
评论排行榜
|
|