Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
a2f14590
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a2f14590
编写于
3月 25, 2011
作者:
M
mrkam
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7027698: /jfc/SampleTree demo needs to be improved
Reviewed-by: rupashka
上级
1080aa8f
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
443 addition
and
417 deletion
+443
-417
src/share/demo/jfc/SampleTree/DynamicTreeNode.java
src/share/demo/jfc/SampleTree/DynamicTreeNode.java
+96
-96
src/share/demo/jfc/SampleTree/SampleData.java
src/share/demo/jfc/SampleTree/SampleData.java
+24
-28
src/share/demo/jfc/SampleTree/SampleTree.java
src/share/demo/jfc/SampleTree/SampleTree.java
+234
-214
src/share/demo/jfc/SampleTree/SampleTreeCellRenderer.java
src/share/demo/jfc/SampleTree/SampleTreeCellRenderer.java
+66
-57
src/share/demo/jfc/SampleTree/SampleTreeModel.java
src/share/demo/jfc/SampleTree/SampleTreeModel.java
+23
-22
未找到文件。
src/share/demo/jfc/SampleTree/DynamicTreeNode.java
浏览文件 @
a2f14590
/*
/*
* Copyright (c) 1997,
1998
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997,
2011
, Oracle and/or its affiliates. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* modification, are permitted provided that the following conditions
...
@@ -29,14 +29,13 @@
...
@@ -29,14 +29,13 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
*/
/*
*/
import
javax.swing.tree.DefaultMutableTreeNode
;
import
java.awt.Color
;
import
java.awt.Color
;
import
java.awt.Font
;
import
java.awt.Font
;
import
java.awt.
Toolki
t
;
import
java.awt.
GraphicsEnvironmen
t
;
import
java.util.Random
;
import
java.util.Random
;
import
javax.swing.tree.DefaultMutableTreeNode
;
/**
/**
* DynamicTreeNode illustrates one of the possible ways in which dynamic
* DynamicTreeNode illustrates one of the possible ways in which dynamic
...
@@ -64,35 +63,33 @@ import java.util.Random;
...
@@ -64,35 +63,33 @@ import java.util.Random;
*
*
* @author Scott Violet
* @author Scott Violet
*/
*/
@SuppressWarnings
(
"serial"
)
public
class
DynamicTreeNode
extends
DefaultMutableTreeNode
public
class
DynamicTreeNode
extends
DefaultMutableTreeNode
{
{
// Class stuff.
// Class stuff.
/** Number of names. */
static
protected
float
nameCount
;
/** Number of names. */
protected
static
float
nameCount
;
/** Names to use for children. */
/** Names to use for children. */
static
protected
String
[]
names
;
protected
static
final
String
[]
NAMES
;
/** Potential fonts used to draw with. */
/** Potential fonts used to draw with. */
static
protected
Font
[]
fonts
;
protected
static
Font
[]
fonts
;
/** Used to generate the names. */
/** Used to generate the names. */
static
protected
Random
nameGen
;
protected
static
Random
nameGen
;
/** Number of children to create for each node. */
/** Number of children to create for each node. */
static
protected
final
int
DefaultChildrenCount
=
7
;
protected
static
final
int
DEFAULT_CHILDREN_COUNT
=
7
;
static
{
static
{
String
[]
fontNames
;
String
[]
fontNames
;
try
{
try
{
fontNames
=
Toolkit
.
getDefaultToolkit
().
getFontList
();
fontNames
=
GraphicsEnvironment
.
getLocalGraphicsEnvironment
().
getAvailableFontFamilyNames
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
fontNames
=
null
;
fontNames
=
null
;
}
}
if
(
fontNames
==
null
||
fontNames
.
length
==
0
)
{
if
(
fontNames
==
null
||
fontNames
.
length
==
0
)
{
names
=
new
String
[]
{
"Mark Andrews"
,
"Tom Ball"
,
"Alan Chung"
,
NAMES
=
new
String
[]
{
"Mark Andrews"
,
"Tom Ball"
,
"Alan Chung"
,
"Rob Davis"
,
"Jeff Dinkins"
,
"Rob Davis"
,
"Jeff Dinkins"
,
"Amy Fowler"
,
"James Gosling"
,
"Amy Fowler"
,
"James Gosling"
,
"David Karlton"
,
"Dave Kloba"
,
"David Karlton"
,
"Dave Kloba"
,
...
@@ -101,30 +98,26 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
...
@@ -101,30 +98,26 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
"Chester Rose"
,
"Ray Ryan"
,
"Chester Rose"
,
"Ray Ryan"
,
"Georges Saab"
,
"Scott Violet"
,
"Georges Saab"
,
"Scott Violet"
,
"Kathy Walrath"
,
"Arnaud Weber"
};
"Kathy Walrath"
,
"Arnaud Weber"
};
}
}
else
{
else
{
/* Create the Fonts, creating fonts is slow, much better to
/* Create the Fonts, creating fonts is slow, much better to
do it once. */
do it once. */
int
fontSize
=
12
;
int
fontSize
=
12
;
names
=
fontNames
;
NAMES
=
fontNames
;
fonts
=
new
Font
[
names
.
length
];
fonts
=
new
Font
[
NAMES
.
length
];
for
(
int
counter
=
0
,
maxCounter
=
names
.
length
;
for
(
int
counter
=
0
,
maxCounter
=
NAMES
.
length
;
counter
<
maxCounter
;
counter
++)
{
counter
<
maxCounter
;
counter
++)
{
try
{
try
{
fonts
[
counter
]
=
new
Font
(
fontNames
[
counter
],
0
,
fontSize
);
fonts
[
counter
]
=
new
Font
(
fontNames
[
counter
],
0
,
fontSize
);
}
}
catch
(
Exception
e
)
{
catch
(
Exception
e
)
{
fonts
[
counter
]
=
null
;
fonts
[
counter
]
=
null
;
}
}
fontSize
=
((
fontSize
+
2
-
12
)
%
12
)
+
12
;
fontSize
=
((
fontSize
+
2
-
12
)
%
12
)
+
12
;
}
}
}
}
nameCount
=
(
float
)
names
.
length
;
nameCount
=
(
float
)
NAMES
.
length
;
nameGen
=
new
Random
(
System
.
currentTimeMillis
());
nameGen
=
new
Random
(
System
.
currentTimeMillis
());
}
}
/** Have the children of this node been loaded yet? */
/** Have the children of this node been loaded yet? */
protected
boolean
hasLoaded
;
protected
boolean
hasLoaded
;
...
@@ -136,6 +129,7 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
...
@@ -136,6 +129,7 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
super
(
o
);
super
(
o
);
}
}
@Override
public
boolean
isLeaf
()
{
public
boolean
isLeaf
()
{
return
false
;
return
false
;
}
}
...
@@ -145,8 +139,9 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
...
@@ -145,8 +139,9 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
* loaded, loadChildren is messaged and super is messaged for
* loaded, loadChildren is messaged and super is messaged for
* the return value.
* the return value.
*/
*/
@Override
public
int
getChildCount
()
{
public
int
getChildCount
()
{
if
(!
hasLoaded
)
{
if
(!
hasLoaded
)
{
loadChildren
();
loadChildren
();
}
}
return
super
.
getChildCount
();
return
super
.
getChildCount
();
...
@@ -162,17 +157,22 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
...
@@ -162,17 +157,22 @@ public class DynamicTreeNode extends DefaultMutableTreeNode
int
randomIndex
;
int
randomIndex
;
SampleData
data
;
SampleData
data
;
for
(
int
counter
=
0
;
counter
<
DynamicTreeNode
.
DefaultChildrenCount
;
for
(
int
counter
=
0
;
counter
<
DynamicTreeNode
.
DEFAULT_CHILDREN_COUNT
;
counter
++)
{
counter
++)
{
randomIndex
=
(
int
)(
nameGen
.
nextFloat
()
*
nameCount
);
randomIndex
=
(
int
)
(
nameGen
.
nextFloat
()
*
nameCount
);
if
(
fonts
!=
null
)
String
displayString
=
NAMES
[
randomIndex
];
font
=
fonts
[
randomIndex
];
if
(
fonts
==
null
||
fonts
[
randomIndex
].
canDisplayUpTo
(
displayString
)
else
!=
-
1
)
{
font
=
null
;
font
=
null
;
if
(
counter
%
2
==
0
)
}
else
{
data
=
new
SampleData
(
font
,
Color
.
red
,
names
[
randomIndex
]);
font
=
fonts
[
randomIndex
];
else
}
data
=
new
SampleData
(
font
,
Color
.
blue
,
names
[
randomIndex
]);
if
(
counter
%
2
==
0
)
{
data
=
new
SampleData
(
font
,
Color
.
red
,
displayString
);
}
else
{
data
=
new
SampleData
(
font
,
Color
.
blue
,
displayString
);
}
newNode
=
new
DynamicTreeNode
(
data
);
newNode
=
new
DynamicTreeNode
(
data
);
/* Don't use add() here, add calls insert(newNode, getChildCount())
/* Don't use add() here, add calls insert(newNode, getChildCount())
so if you want to use add, just be sure to set hasLoaded = true
so if you want to use add, just be sure to set hasLoaded = true
...
...
src/share/demo/jfc/SampleTree/SampleData.java
浏览文件 @
a2f14590
/*
/*
* Copyright (c) 1997, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997,
2011,
Oracle and/or its affiliates. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* modification, are permitted provided that the following conditions
...
@@ -29,28 +29,23 @@
...
@@ -29,28 +29,23 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
*/
/*
*/
import
java.awt.Color
;
import
java.awt.Color
;
import
java.awt.Font
;
import
java.awt.Font
;
/**
/**
* @author Scott Violet
* @author Scott Violet
*/
*/
public
class
SampleData
extends
Object
{
public
class
SampleData
extends
Object
{
/** Font used for drawing. */
/** Font used for drawing. */
protected
Font
font
;
protected
Font
font
;
/** Color used for text. */
/** Color used for text. */
protected
Color
color
;
protected
Color
color
;
/** Value to display. */
/** Value to display. */
protected
String
string
;
protected
String
string
;
/**
/**
* Constructs a new instance of SampleData with the passed in
* Constructs a new instance of SampleData with the passed in
* arguments.
* arguments.
...
@@ -103,6 +98,7 @@ public class SampleData extends Object
...
@@ -103,6 +98,7 @@ public class SampleData extends Object
return
string
;
return
string
;
}
}
@Override
public
String
toString
()
{
public
String
toString
()
{
return
string
;
return
string
;
}
}
...
...
src/share/demo/jfc/SampleTree/SampleTree.java
浏览文件 @
a2f14590
/*
/*
* Copyright (c) 1997, 20
04
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 20
11
, Oracle and/or its affiliates. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* modification, are permitted provided that the following conditions
...
@@ -29,9 +29,10 @@
...
@@ -29,9 +29,10 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
*/
/*
*/
import
java.lang.reflect.InvocationTargetException
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
javax.swing.*
;
import
javax.swing.*
;
import
javax.swing.event.*
;
import
javax.swing.event.*
;
import
java.awt.BorderLayout
;
import
java.awt.BorderLayout
;
...
@@ -40,12 +41,12 @@ import java.awt.Dimension;
...
@@ -40,12 +41,12 @@ import java.awt.Dimension;
import
java.awt.FlowLayout
;
import
java.awt.FlowLayout
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
java.awt.event.ActionListener
;
import
java.awt.event.WindowAdapter
;
import
java.awt.event.WindowEvent
;
import
java.util.*
;
import
java.util.*
;
import
javax.swing.UIManager.LookAndFeelInfo
;
import
javax.swing.border.*
;
import
javax.swing.border.*
;
import
javax.swing.tree.*
;
import
javax.swing.tree.*
;
/**
/**
* A demo for illustrating how to do different things with JTree.
* A demo for illustrating how to do different things with JTree.
* The data that this displays is rather boring, that is each node will
* The data that this displays is rather boring, that is each node will
...
@@ -65,9 +66,8 @@ import javax.swing.tree.*;
...
@@ -65,9 +66,8 @@ import javax.swing.tree.*;
*
*
* @author Scott Violet
* @author Scott Violet
*/
*/
public
final
class
SampleTree
{
public
class
SampleTree
{
/** Window for showing Tree. */
/** Window for showing Tree. */
protected
JFrame
frame
;
protected
JFrame
frame
;
/** Tree used for the example. */
/** Tree used for the example. */
...
@@ -79,16 +79,16 @@ public class SampleTree
...
@@ -79,16 +79,16 @@ public class SampleTree
* Constructs a new instance of SampleTree.
* Constructs a new instance of SampleTree.
*/
*/
public
SampleTree
()
{
public
SampleTree
()
{
//
Force SampleTree to come up in the Cross Platform L&F
//
Trying to set Nimbus look and feel
try
{
try
{
UIManager
.
setLookAndFeel
(
UIManager
.
getCrossPlatformLookAndFeelClassName
());
for
(
LookAndFeelInfo
info
:
UIManager
.
getInstalledLookAndFeels
())
{
// If you want the System L&F instead, comment out the above line and
if
(
"Nimbus"
.
equals
(
info
.
getName
()))
{
// uncomment the following:
UIManager
.
setLookAndFeel
(
info
.
getClassName
());
// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
break
;
}
catch
(
Exception
exc
)
{
}
System
.
err
.
println
(
"Error loading L&F: "
+
exc
);
}
}
catch
(
Exception
ignored
)
{
}
}
JMenuBar
menuBar
=
constructMenuBar
();
JMenuBar
menuBar
=
constructMenuBar
();
JPanel
panel
=
new
JPanel
(
true
);
JPanel
panel
=
new
JPanel
(
true
);
...
@@ -126,15 +126,14 @@ public class SampleTree
...
@@ -126,15 +126,14 @@ public class SampleTree
panel
.
add
(
"Center"
,
sp
);
panel
.
add
(
"Center"
,
sp
);
panel
.
add
(
"South"
,
constructOptionsPanel
());
panel
.
add
(
"South"
,
constructOptionsPanel
());
frame
.
addWindowListener
(
new
WindowAdapter
()
{
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
public
void
windowClosing
(
WindowEvent
e
)
{
System
.
exit
(
0
);}});
frame
.
pack
();
frame
.
pack
();
frame
.
s
how
(
);
frame
.
s
etVisible
(
true
);
}
}
/** Constructs a JPanel containing check boxes for the different
/** Constructs a JPanel containing check boxes for the different
* options that tree supports. */
* options that tree supports. */
@SuppressWarnings
(
"serial"
)
private
JPanel
constructOptionsPanel
()
{
private
JPanel
constructOptionsPanel
()
{
JCheckBox
aCheckbox
;
JCheckBox
aCheckbox
;
JPanel
retPanel
=
new
JPanel
(
false
);
JPanel
retPanel
=
new
JPanel
(
false
);
...
@@ -171,30 +170,45 @@ public class SampleTree
...
@@ -171,30 +170,45 @@ public class SampleTree
buttonPane
.
setBorder
(
new
TitledBorder
(
"Selection Mode"
));
buttonPane
.
setBorder
(
new
TitledBorder
(
"Selection Mode"
));
button
=
new
JRadioButton
(
"Single"
);
button
=
new
JRadioButton
(
"Single"
);
button
.
addActionListener
(
new
AbstractAction
()
{
button
.
addActionListener
(
new
AbstractAction
()
{
public
boolean
isEnabled
()
{
return
true
;
}
@Override
public
boolean
isEnabled
()
{
return
true
;
}
public
void
actionPerformed
(
ActionEvent
e
)
{
public
void
actionPerformed
(
ActionEvent
e
)
{
tree
.
getSelectionModel
().
setSelectionMode
tree
.
getSelectionModel
().
setSelectionMode
(
(
TreeSelectionModel
.
SINGLE_TREE_SELECTION
);
TreeSelectionModel
.
SINGLE_TREE_SELECTION
);
}
}
});
});
group
.
add
(
button
);
group
.
add
(
button
);
buttonPane
.
add
(
button
);
buttonPane
.
add
(
button
);
button
=
new
JRadioButton
(
"Contiguous"
);
button
=
new
JRadioButton
(
"Contiguous"
);
button
.
addActionListener
(
new
AbstractAction
()
{
button
.
addActionListener
(
new
AbstractAction
()
{
public
boolean
isEnabled
()
{
return
true
;
}
@Override
public
boolean
isEnabled
()
{
return
true
;
}
public
void
actionPerformed
(
ActionEvent
e
)
{
public
void
actionPerformed
(
ActionEvent
e
)
{
tree
.
getSelectionModel
().
setSelectionMode
tree
.
getSelectionModel
().
setSelectionMode
(
(
TreeSelectionModel
.
CONTIGUOUS_TREE_SELECTION
);
TreeSelectionModel
.
CONTIGUOUS_TREE_SELECTION
);
}
}
});
});
group
.
add
(
button
);
group
.
add
(
button
);
buttonPane
.
add
(
button
);
buttonPane
.
add
(
button
);
button
=
new
JRadioButton
(
"Discontiguous"
);
button
=
new
JRadioButton
(
"Discontiguous"
);
button
.
addActionListener
(
new
AbstractAction
()
{
button
.
addActionListener
(
new
AbstractAction
()
{
public
boolean
isEnabled
()
{
return
true
;
}
@Override
public
boolean
isEnabled
()
{
return
true
;
}
public
void
actionPerformed
(
ActionEvent
e
)
{
public
void
actionPerformed
(
ActionEvent
e
)
{
tree
.
getSelectionModel
().
setSelectionMode
tree
.
getSelectionModel
().
setSelectionMode
(
(
TreeSelectionModel
.
DISCONTIGUOUS_TREE_SELECTION
);
TreeSelectionModel
.
DISCONTIGUOUS_TREE_SELECTION
);
}
}
});
});
button
.
setSelected
(
true
);
button
.
setSelected
(
true
);
...
@@ -227,7 +241,7 @@ public class SampleTree
...
@@ -227,7 +241,7 @@ public class SampleTree
});
});
clickPanel.add(clickCBox);
clickPanel.add(clickCBox);
borderPane.add(clickPanel, BorderLayout.NORTH);
borderPane.add(clickPanel, BorderLayout.NORTH);
*/
*/
return
borderPane
;
return
borderPane
;
}
}
...
@@ -243,9 +257,11 @@ public class SampleTree
...
@@ -243,9 +257,11 @@ public class SampleTree
menuItem
=
menu
.
add
(
new
JMenuItem
(
"Exit"
));
menuItem
=
menu
.
add
(
new
JMenuItem
(
"Exit"
));
menuItem
.
addActionListener
(
new
ActionListener
()
{
menuItem
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
public
void
actionPerformed
(
ActionEvent
e
)
{
System
.
exit
(
0
);
System
.
exit
(
0
);
}});
}
});
/* Tree related stuff. */
/* Tree related stuff. */
menu
=
new
JMenu
(
"Tree"
);
menu
=
new
JMenu
(
"Tree"
);
...
@@ -273,8 +289,9 @@ public class SampleTree
...
@@ -273,8 +289,9 @@ public class SampleTree
protected
DefaultMutableTreeNode
getSelectedNode
()
{
protected
DefaultMutableTreeNode
getSelectedNode
()
{
TreePath
selPath
=
tree
.
getSelectionPath
();
TreePath
selPath
=
tree
.
getSelectionPath
();
if
(
selPath
!=
null
)
if
(
selPath
!=
null
)
{
return
(
DefaultMutableTreeNode
)
selPath
.
getLastPathComponent
();
return
(
DefaultMutableTreeNode
)
selPath
.
getLastPathComponent
();
}
return
null
;
return
null
;
}
}
...
@@ -290,11 +307,12 @@ public class SampleTree
...
@@ -290,11 +307,12 @@ public class SampleTree
return
new
DynamicTreeNode
(
new
SampleData
(
null
,
Color
.
black
,
name
));
return
new
DynamicTreeNode
(
new
SampleData
(
null
,
Color
.
black
,
name
));
}
}
/**
/**
* AddAction is used to add a new item after the selected item.
* AddAction is used to add a new item after the selected item.
*/
*/
class
AddAction
extends
Object
implements
ActionListener
class
AddAction
extends
Object
implements
ActionListener
{
{
/** Number of nodes that have been added. */
/** Number of nodes that have been added. */
public
int
addCount
;
public
int
addCount
;
...
@@ -309,30 +327,30 @@ public class SampleTree
...
@@ -309,30 +327,30 @@ public class SampleTree
DefaultMutableTreeNode
parent
;
DefaultMutableTreeNode
parent
;
/* Determine where to create the new node. */
/* Determine where to create the new node. */
if
(
lastItem
!=
null
)
{
if
(
lastItem
!=
null
)
{
parent
=
(
DefaultMutableTreeNode
)
lastItem
.
getParent
();
parent
=
(
DefaultMutableTreeNode
)
lastItem
.
getParent
();
if
(
parent
==
null
)
{
if
(
parent
==
null
)
{
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
lastItem
=
null
;
lastItem
=
null
;
}
}
}
else
{
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
}
}
else
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
if
(
parent
==
null
)
{
if
(
parent
==
null
)
{
// new root
// new root
treeModel
.
setRoot
(
createNewNode
(
"Added "
+
treeModel
.
setRoot
(
createNewNode
(
"Added "
+
Integer
.
toString
(
Integer
.
toString
(
addCount
++)));
addCount
++)));
}
}
else
{
else
{
int
newIndex
;
int
newIndex
;
if
(
lastItem
==
null
)
if
(
lastItem
==
null
)
{
newIndex
=
treeModel
.
getChildCount
(
parent
);
newIndex
=
treeModel
.
getChildCount
(
parent
);
else
}
else
{
newIndex
=
parent
.
getIndex
(
lastItem
)
+
1
;
newIndex
=
parent
.
getIndex
(
lastItem
)
+
1
;
}
/* Let the treemodel know. */
/* Let the treemodel know. */
treeModel
.
insertNodeInto
(
createNewNode
(
"Added "
+
treeModel
.
insertNodeInto
(
createNewNode
(
"Added "
+
Integer
.
Integer
.
toString
(
addCount
++)),
toString
(
addCount
++)),
parent
,
newIndex
);
parent
,
newIndex
);
}
}
}
}
...
@@ -342,8 +360,8 @@ public class SampleTree
...
@@ -342,8 +360,8 @@ public class SampleTree
/**
/**
* InsertAction is used to insert a new item before the selected item.
* InsertAction is used to insert a new item before the selected item.
*/
*/
class
InsertAction
extends
Object
implements
ActionListener
class
InsertAction
extends
Object
implements
ActionListener
{
{
/** Number of nodes that have been added. */
/** Number of nodes that have been added. */
public
int
insertCount
;
public
int
insertCount
;
...
@@ -358,31 +376,31 @@ public class SampleTree
...
@@ -358,31 +376,31 @@ public class SampleTree
DefaultMutableTreeNode
parent
;
DefaultMutableTreeNode
parent
;
/* Determine where to create the new node. */
/* Determine where to create the new node. */
if
(
lastItem
!=
null
)
{
if
(
lastItem
!=
null
)
{
parent
=
(
DefaultMutableTreeNode
)
lastItem
.
getParent
();
parent
=
(
DefaultMutableTreeNode
)
lastItem
.
getParent
();
if
(
parent
==
null
)
{
if
(
parent
==
null
)
{
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
lastItem
=
null
;
lastItem
=
null
;
}
}
}
else
{
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
}
}
else
parent
=
(
DefaultMutableTreeNode
)
treeModel
.
getRoot
();
if
(
parent
==
null
)
{
if
(
parent
==
null
)
{
// new root
// new root
treeModel
.
setRoot
(
createNewNode
(
"Inserted "
+
treeModel
.
setRoot
(
createNewNode
(
"Inserted "
+
Integer
.
toString
(
Integer
.
toString
(
insertCount
++)));
insertCount
++)));
}
}
else
{
else
{
int
newIndex
;
int
newIndex
;
if
(
lastItem
==
null
)
if
(
lastItem
==
null
)
{
newIndex
=
treeModel
.
getChildCount
(
parent
);
newIndex
=
treeModel
.
getChildCount
(
parent
);
else
}
else
{
newIndex
=
parent
.
getIndex
(
lastItem
);
newIndex
=
parent
.
getIndex
(
lastItem
);
}
/* Let the treemodel know. */
/* Let the treemodel know. */
treeModel
.
insertNodeInto
(
createNewNode
(
"Inserted "
+
treeModel
.
insertNodeInto
(
createNewNode
(
"Inserted "
+
Integer
.
Integer
.
toString
(
insertCount
++)),
toString
(
insertCount
++)),
parent
,
newIndex
);
parent
,
newIndex
);
}
}
}
}
...
@@ -393,8 +411,8 @@ public class SampleTree
...
@@ -393,8 +411,8 @@ public class SampleTree
* ReloadAction is used to reload from the selected node. If nothing
* ReloadAction is used to reload from the selected node. If nothing
* is selected, reload is not issued.
* is selected, reload is not issued.
*/
*/
class
ReloadAction
extends
Object
implements
ActionListener
class
ReloadAction
extends
Object
implements
ActionListener
{
{
/**
/**
* Messaged when the user clicks on the Reload menu item.
* Messaged when the user clicks on the Reload menu item.
* Determines the selection from the Tree and asks the treemodel
* Determines the selection from the Tree and asks the treemodel
...
@@ -403,17 +421,19 @@ public class SampleTree
...
@@ -403,17 +421,19 @@ public class SampleTree
public
void
actionPerformed
(
ActionEvent
e
)
{
public
void
actionPerformed
(
ActionEvent
e
)
{
DefaultMutableTreeNode
lastItem
=
getSelectedNode
();
DefaultMutableTreeNode
lastItem
=
getSelectedNode
();
if
(
lastItem
!=
null
)
if
(
lastItem
!=
null
)
{
treeModel
.
reload
(
lastItem
);
treeModel
.
reload
(
lastItem
);
}
}
}
}
// End of SampleTree.ReloadAction
}
// End of SampleTree.ReloadAction
/**
/**
* RemoveAction removes the selected node from the tree. If
* RemoveAction removes the selected node from the tree. If
* The root or nothing is selected nothing is removed.
* The root or nothing is selected nothing is removed.
*/
*/
class
RemoveAction
extends
Object
implements
ActionListener
class
RemoveAction
extends
Object
implements
ActionListener
{
{
/**
/**
* Removes the selected item as long as it isn't root.
* Removes the selected item as long as it isn't root.
*/
*/
...
@@ -451,19 +471,17 @@ public class SampleTree
...
@@ -451,19 +471,17 @@ public class SampleTree
paths
[
counter
]
=
null
;
paths
[
counter
]
=
null
;
}
}
treeModel
.
setRoot
(
null
);
treeModel
.
setRoot
(
null
);
}
}
else
{
else
{
// Find the siblings of path.
// Find the siblings of path.
TreePath
parent
=
path
.
getParentPath
();
TreePath
parent
=
path
.
getParentPath
();
MutableTreeNode
parentNode
=
(
MutableTreeNode
)
parent
.
MutableTreeNode
parentNode
=
(
MutableTreeNode
)
parent
.
getLastPathComponent
();
getLastPathComponent
();
ArrayList
toRemove
=
new
ArrayList
();
ArrayList
<
TreePath
>
toRemove
=
new
ArrayList
<
TreePath
>();
int
depth
=
parent
.
getPathCount
();
// First pass, find paths with a parent TreePath of parent
// First pass, find paths with a parent TreePath of parent
for
(
int
counter
=
paths
.
length
-
1
;
counter
>=
0
;
counter
--)
{
for
(
int
counter
=
paths
.
length
-
1
;
counter
>=
0
;
counter
--)
{
if
(
paths
[
counter
]
!=
null
&&
paths
[
counter
].
if
(
paths
[
counter
]
!=
null
&&
paths
[
counter
].
getParentPath
().
getParentPath
().
equals
(
parent
))
{
equals
(
parent
))
{
toRemove
.
add
(
paths
[
counter
]);
toRemove
.
add
(
paths
[
counter
]);
paths
[
counter
]
=
null
;
paths
[
counter
]
=
null
;
}
}
...
@@ -478,8 +496,8 @@ public class SampleTree
...
@@ -478,8 +496,8 @@ public class SampleTree
if
(
paths
[
counter
]
!=
null
)
{
if
(
paths
[
counter
]
!=
null
)
{
for
(
int
rCounter
=
rCount
-
1
;
rCounter
>=
0
;
for
(
int
rCounter
=
rCount
-
1
;
rCounter
>=
0
;
rCounter
--)
{
rCounter
--)
{
if
((
(
TreePath
)
toRemove
.
get
(
rCounter
)).
if
((
toRemove
.
get
(
rCounter
)).
isDescendant
(
isDescendant
(
paths
[
counter
]))
{
paths
[
counter
]))
{
paths
[
counter
]
=
null
;
paths
[
counter
]
=
null
;
}
}
}
}
...
@@ -493,10 +511,10 @@ public class SampleTree
...
@@ -493,10 +511,10 @@ public class SampleTree
int
[]
indices
=
new
int
[
rCount
];
int
[]
indices
=
new
int
[
rCount
];
Object
[]
removedNodes
=
new
Object
[
rCount
];
Object
[]
removedNodes
=
new
Object
[
rCount
];
for
(
int
counter
=
rCount
-
1
;
counter
>=
0
;
counter
--)
{
for
(
int
counter
=
rCount
-
1
;
counter
>=
0
;
counter
--)
{
removedNodes
[
counter
]
=
(
(
TreePath
)
toRemove
.
get
(
counter
)).
removedNodes
[
counter
]
=
(
toRemove
.
get
(
counter
)).
getLastPathComponent
();
getLastPathComponent
();
indices
[
counter
]
=
treeModel
.
getIndexOfChild
indices
[
counter
]
=
treeModel
.
getIndexOfChild
(
parentNode
,
(
parentNode
,
removedNodes
[
counter
]);
removedNodes
[
counter
]);
parentNode
.
remove
(
indices
[
counter
]);
parentNode
.
remove
(
indices
[
counter
]);
}
}
treeModel
.
nodesWereRemoved
(
parentNode
,
indices
,
removedNodes
);
treeModel
.
nodesWereRemoved
(
parentNode
,
indices
,
removedNodes
);
...
@@ -522,8 +540,7 @@ public class SampleTree
...
@@ -522,8 +540,7 @@ public class SampleTree
return
shallowestPath
;
return
shallowestPath
;
}
}
}
}
}
}
else
{
else
{
shallowestPath
=
paths
[
counter
];
shallowestPath
=
paths
[
counter
];
shallowest
=
paths
[
counter
].
getPathCount
();
shallowest
=
paths
[
counter
].
getPathCount
();
}
}
...
@@ -540,22 +557,16 @@ public class SampleTree
...
@@ -540,22 +557,16 @@ public class SampleTree
* This is actually rather expensive, it would be more efficient
* This is actually rather expensive, it would be more efficient
* to extract the indices and then do the comparision.
* to extract the indices and then do the comparision.
*/
*/
private
class
PositionComparator
implements
Comparator
{
private
class
PositionComparator
implements
Comparator
<
TreePath
>
{
public
int
compare
(
Object
o1
,
Object
o2
)
{
TreePath
p1
=
(
TreePath
)
o1
;
public
int
compare
(
TreePath
p1
,
TreePath
p2
)
{
int
o
1Index
=
treeModel
.
getIndexOfChild
(
p1
.
getParentPath
().
int
p
1Index
=
treeModel
.
getIndexOfChild
(
p1
.
getParentPath
().
getLastPathComponent
(),
p1
.
getLastPathComponent
());
getLastPathComponent
(),
p1
.
getLastPathComponent
());
TreePath
p2
=
(
TreePath
)
o2
;
int
p2Index
=
treeModel
.
getIndexOfChild
(
p2
.
getParentPath
().
int
o2Index
=
treeModel
.
getIndexOfChild
(
p2
.
getParentPath
().
getLastPathComponent
(),
p2
.
getLastPathComponent
());
getLastPathComponent
(),
p2
.
getLastPathComponent
());
return
o1Index
-
o2Index
;
return
p1Index
-
p2Index
;
}
public
boolean
equals
(
Object
obj
)
{
return
super
.
equals
(
obj
);
}
}
}
}
}
// End of SampleTree.RemoveAction
}
// End of SampleTree.RemoveAction
...
@@ -563,12 +574,11 @@ public class SampleTree
...
@@ -563,12 +574,11 @@ public class SampleTree
* ShowHandlesChangeListener implements the ChangeListener interface
* ShowHandlesChangeListener implements the ChangeListener interface
* to toggle the state of showing the handles in the tree.
* to toggle the state of showing the handles in the tree.
*/
*/
class
ShowHandlesChangeListener
extends
Object
implements
ChangeListener
class
ShowHandlesChangeListener
extends
Object
implements
ChangeListener
{
{
public
void
stateChanged
(
ChangeEvent
e
)
{
public
void
stateChanged
(
ChangeEvent
e
)
{
tree
.
setShowsRootHandles
(((
JCheckBox
)
e
.
getSource
()).
isSelected
());
tree
.
setShowsRootHandles
(((
JCheckBox
)
e
.
getSource
()).
isSelected
());
}
}
}
// End of class SampleTree.ShowHandlesChangeListener
}
// End of class SampleTree.ShowHandlesChangeListener
...
@@ -576,12 +586,11 @@ public class SampleTree
...
@@ -576,12 +586,11 @@ public class SampleTree
* ShowRootChangeListener implements the ChangeListener interface
* ShowRootChangeListener implements the ChangeListener interface
* to toggle the state of showing the root node in the tree.
* to toggle the state of showing the root node in the tree.
*/
*/
class
ShowRootChangeListener
extends
Object
implements
ChangeListener
class
ShowRootChangeListener
extends
Object
implements
ChangeListener
{
{
public
void
stateChanged
(
ChangeEvent
e
)
{
public
void
stateChanged
(
ChangeEvent
e
)
{
tree
.
setRootVisible
(((
JCheckBox
)
e
.
getSource
()).
isSelected
());
tree
.
setRootVisible
(((
JCheckBox
)
e
.
getSource
()).
isSelected
());
}
}
}
// End of class SampleTree.ShowRootChangeListener
}
// End of class SampleTree.ShowRootChangeListener
...
@@ -590,17 +599,28 @@ public class SampleTree
...
@@ -590,17 +599,28 @@ public class SampleTree
* to toggle between allowing editing and now allowing editing in
* to toggle between allowing editing and now allowing editing in
* the tree.
* the tree.
*/
*/
class
TreeEditableChangeListener
extends
Object
implements
ChangeListener
class
TreeEditableChangeListener
extends
Object
implements
ChangeListener
{
{
public
void
stateChanged
(
ChangeEvent
e
)
{
public
void
stateChanged
(
ChangeEvent
e
)
{
tree
.
setEditable
(((
JCheckBox
)
e
.
getSource
()).
isSelected
());
tree
.
setEditable
(((
JCheckBox
)
e
.
getSource
()).
isSelected
());
}
}
}
// End of class SampleTree.TreeEditableChangeListener
}
// End of class SampleTree.TreeEditableChangeListener
public
static
void
main
(
String
args
[])
{
try
{
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
static
public
void
main
(
String
args
[])
{
@SuppressWarnings
(
value
=
"ResultOfObjectAllocationIgnored"
)
public
void
run
()
{
new
SampleTree
();
new
SampleTree
();
}
}
});
}
catch
(
InterruptedException
ex
)
{
Logger
.
getLogger
(
SampleTree
.
class
.
getName
()).
log
(
Level
.
SEVERE
,
null
,
ex
);
}
catch
(
InvocationTargetException
ex
)
{
Logger
.
getLogger
(
SampleTree
.
class
.
getName
()).
log
(
Level
.
SEVERE
,
null
,
ex
);
}
}
}
}
src/share/demo/jfc/SampleTree/SampleTreeCellRenderer.java
浏览文件 @
a2f14590
/*
/*
* Copyright (c) 1997, 20
05
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 20
11
, Oracle and/or its affiliates. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* modification, are permitted provided that the following conditions
...
@@ -29,8 +29,6 @@
...
@@ -29,8 +29,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
*/
/*
*/
import
javax.swing.Icon
;
import
javax.swing.Icon
;
import
javax.swing.ImageIcon
;
import
javax.swing.ImageIcon
;
...
@@ -42,32 +40,41 @@ import java.awt.Component;
...
@@ -42,32 +40,41 @@ import java.awt.Component;
import
java.awt.Color
;
import
java.awt.Color
;
import
java.awt.Font
;
import
java.awt.Font
;
import
java.awt.Graphics
;
import
java.awt.Graphics
;
import
javax.swing.UIManager
;
@SuppressWarnings
(
"serial"
)
public
class
SampleTreeCellRenderer
extends
JLabel
implements
TreeCellRenderer
{
public
class
SampleTreeCellRenderer
extends
JLabel
implements
TreeCellRenderer
{
/** Font used if the string to be displayed isn't a font. */
/** Font used if the string to be displayed isn't a font. */
static
protected
Font
defaultFont
;
protected
static
Font
defaultFont
;
/** Icon to use when the item is collapsed. */
/** Icon to use when the item is collapsed. */
static
protected
ImageIcon
collapsedIcon
;
protected
static
ImageIcon
collapsedIcon
;
/** Icon to use when the item is expanded. */
/** Icon to use when the item is expanded. */
static
protected
ImageIcon
expandedIcon
;
protected
static
ImageIcon
expandedIcon
;
/** Color to use for the background when selected. */
/** Color to use for the background when selected. */
static
protected
final
Color
SelectedBackgroundColor
=
Color
.
yellow
;
//new Color(0, 0, 128)
;
protected
static
final
Color
SELECTED_BACKGROUND_COLOR
;
static
static
{
{
if
(
"Nimbus"
.
equals
(
UIManager
.
getLookAndFeel
().
getName
()))
{
SELECTED_BACKGROUND_COLOR
=
new
Color
(
0
,
0
,
0
,
0
);
}
else
{
SELECTED_BACKGROUND_COLOR
=
Color
.
YELLOW
;
}
try
{
try
{
defaultFont
=
new
Font
(
"SansSerif"
,
0
,
12
);
defaultFont
=
new
Font
(
"SansSerif"
,
0
,
12
);
}
catch
(
Exception
e
)
{}
}
catch
(
Exception
e
)
{
}
try
{
try
{
collapsedIcon
=
new
ImageIcon
(
SampleTreeCellRenderer
.
class
.
getResource
(
"/resources/images/collapsed.gif"
));
collapsedIcon
=
new
ImageIcon
(
SampleTreeCellRenderer
.
class
.
expandedIcon
=
new
ImageIcon
(
SampleTreeCellRenderer
.
class
.
getResource
(
"/resources/images/expanded.gif"
));
getResource
(
"/resources/images/collapsed.gif"
));
expandedIcon
=
new
ImageIcon
(
SampleTreeCellRenderer
.
class
.
getResource
(
"/resources/images/expanded.gif"
));
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"Couldn't load images: "
+
e
);
System
.
out
.
println
(
"Couldn't load images: "
+
e
);
}
}
}
}
/** Whether or not the item that was last configured is selected. */
/** Whether or not the item that was last configured is selected. */
protected
boolean
selected
;
protected
boolean
selected
;
...
@@ -81,7 +88,6 @@ public class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
...
@@ -81,7 +88,6 @@ public class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
boolean
selected
,
boolean
expanded
,
boolean
selected
,
boolean
expanded
,
boolean
leaf
,
int
row
,
boolean
leaf
,
int
row
,
boolean
hasFocus
)
{
boolean
hasFocus
)
{
Font
font
;
String
stringValue
=
tree
.
convertValueToText
(
value
,
selected
,
String
stringValue
=
tree
.
convertValueToText
(
value
,
selected
,
expanded
,
leaf
,
row
,
hasFocus
);
expanded
,
leaf
,
row
,
hasFocus
);
...
@@ -91,24 +97,27 @@ public class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
...
@@ -91,24 +97,27 @@ public class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
setToolTipText
(
stringValue
);
setToolTipText
(
stringValue
);
/* Set the image. */
/* Set the image. */
if
(
expanded
)
if
(
expanded
)
{
setIcon
(
expandedIcon
);
setIcon
(
expandedIcon
);
else
if
(!
leaf
)
}
else
if
(!
leaf
)
{
setIcon
(
collapsedIcon
);
setIcon
(
collapsedIcon
);
else
}
else
{
setIcon
(
null
);
setIcon
(
null
);
}
/* Set the color and the font based on the SampleData userObject. */
/* Set the color and the font based on the SampleData userObject. */
SampleData
userObject
=
(
SampleData
)((
DefaultMutableTreeNode
)
value
)
SampleData
userObject
=
(
SampleData
)
((
DefaultMutableTreeNode
)
value
).
.
getUserObject
();
getUserObject
();
if
(
hasFocus
)
if
(
hasFocus
)
{
setForeground
(
Color
.
cyan
);
setForeground
(
UIManager
.
getColor
(
"Tree.selectionForeground"
)
);
else
}
else
{
setForeground
(
userObject
.
getColor
());
setForeground
(
userObject
.
getColor
());
if
(
userObject
.
getFont
()
==
null
)
}
if
(
userObject
.
getFont
()
==
null
)
{
setFont
(
defaultFont
);
setFont
(
defaultFont
);
else
}
else
{
setFont
(
userObject
.
getFont
());
setFont
(
userObject
.
getFont
());
}
/* Update the selected flag for the next paint. */
/* Update the selected flag for the next paint. */
this
.
selected
=
selected
;
this
.
selected
=
selected
;
...
@@ -121,32 +130,32 @@ public class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
...
@@ -121,32 +130,32 @@ public class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
* currently does not allow backgrounds other than white, and it
* currently does not allow backgrounds other than white, and it
* will also fill behind the icon. Something that isn't desirable.
* will also fill behind the icon. Something that isn't desirable.
*/
*/
@Override
public
void
paint
(
Graphics
g
)
{
public
void
paint
(
Graphics
g
)
{
Color
bColor
;
Color
bColor
;
Icon
currentI
=
getIcon
();
Icon
currentI
=
getIcon
();
if
(
selected
)
if
(
selected
)
{
bColor
=
SelectedBackgroundColor
;
bColor
=
SELECTED_BACKGROUND_COLOR
;
else
if
(
getParent
()
!=
null
)
}
else
if
(
getParent
()
!=
null
)
/* Pick background color up from parent (which will come from
/* Pick background color up from parent (which will come from
the JTree we're contained in). */
{
the JTree we're contained in). */
bColor
=
getParent
().
getBackground
();
bColor
=
getParent
().
getBackground
();
else
}
else
{
bColor
=
getBackground
();
bColor
=
getBackground
();
}
g
.
setColor
(
bColor
);
g
.
setColor
(
bColor
);
if
(
currentI
!=
null
&&
getText
()
!=
null
)
{
if
(
currentI
!=
null
&&
getText
()
!=
null
)
{
int
offset
=
(
currentI
.
getIconWidth
()
+
getIconTextGap
());
int
offset
=
(
currentI
.
getIconWidth
()
+
getIconTextGap
());
if
(
getComponentOrientation
().
isLeftToRight
())
{
if
(
getComponentOrientation
().
isLeftToRight
())
{
g
.
fillRect
(
offset
,
0
,
getWidth
()
-
1
-
offset
,
g
.
fillRect
(
offset
,
0
,
getWidth
()
-
1
-
offset
,
getHeight
()
-
1
);
getHeight
()
-
1
);
}
}
else
{
else
{
g
.
fillRect
(
0
,
0
,
getWidth
()
-
1
-
offset
,
getHeight
()
-
1
);
g
.
fillRect
(
0
,
0
,
getWidth
()
-
1
-
offset
,
getHeight
()
-
1
);
}
}
}
else
{
g
.
fillRect
(
0
,
0
,
getWidth
()
-
1
,
getHeight
()
-
1
);
}
}
else
g
.
fillRect
(
0
,
0
,
getWidth
()-
1
,
getHeight
()-
1
);
super
.
paint
(
g
);
super
.
paint
(
g
);
}
}
}
}
src/share/demo/jfc/SampleTree/SampleTreeModel.java
浏览文件 @
a2f14590
/*
/*
* Copyright (c) 1997,
1998
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997,
2011
, Oracle and/or its affiliates. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* modification, are permitted provided that the following conditions
...
@@ -29,8 +29,6 @@
...
@@ -29,8 +29,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
*/
/*
*/
import
javax.swing.tree.DefaultTreeModel
;
import
javax.swing.tree.DefaultTreeModel
;
import
javax.swing.tree.TreeNode
;
import
javax.swing.tree.TreeNode
;
...
@@ -38,6 +36,7 @@ import javax.swing.tree.TreePath;
...
@@ -38,6 +36,7 @@ import javax.swing.tree.TreePath;
import
javax.swing.tree.DefaultMutableTreeNode
;
import
javax.swing.tree.DefaultMutableTreeNode
;
import
java.awt.Color
;
import
java.awt.Color
;
/**
/**
* SampleTreeModel extends JTreeModel to extends valueForPathChanged.
* SampleTreeModel extends JTreeModel to extends valueForPathChanged.
* This method is called as a result of the user editing a value in
* This method is called as a result of the user editing a value in
...
@@ -47,9 +46,9 @@ import java.awt.Color;
...
@@ -47,9 +46,9 @@ import java.awt.Color;
*
*
* @author Scott Violet
* @author Scott Violet
*/
*/
@SuppressWarnings
(
"serial"
)
public
class
SampleTreeModel
extends
DefaultTreeModel
{
public
class
SampleTreeModel
extends
DefaultTreeModel
{
/**
/**
* Creates a new instance of SampleTreeModel with newRoot set
* Creates a new instance of SampleTreeModel with newRoot set
* to the root of this model.
* to the root of this model.
...
@@ -61,12 +60,14 @@ public class SampleTreeModel extends DefaultTreeModel
...
@@ -61,12 +60,14 @@ public class SampleTreeModel extends DefaultTreeModel
/**
/**
* Subclassed to message setString() to the changed path item.
* Subclassed to message setString() to the changed path item.
*/
*/
@Override
public
void
valueForPathChanged
(
TreePath
path
,
Object
newValue
)
{
public
void
valueForPathChanged
(
TreePath
path
,
Object
newValue
)
{
/* Update the user object. */
/* Update the user object. */
DefaultMutableTreeNode
aNode
=
(
DefaultMutableTreeNode
)
path
.
getLastPathComponent
();
DefaultMutableTreeNode
aNode
=
(
DefaultMutableTreeNode
)
path
.
SampleData
sampleData
=
(
SampleData
)
aNode
.
getUserObject
();
getLastPathComponent
();
SampleData
sampleData
=
(
SampleData
)
aNode
.
getUserObject
();
sampleData
.
setString
((
String
)
newValue
);
sampleData
.
setString
((
String
)
newValue
);
/* UUUhhhhh, pretty colors. */
/* UUUhhhhh, pretty colors. */
sampleData
.
setColor
(
Color
.
green
);
sampleData
.
setColor
(
Color
.
green
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录