打个比方
可以写一个Tree的类
public class Tree extends BaseDomain {
private String id
private String key
private String icon
private String title
private String value
private String text
private String code
private String mtype
private String type
/**
* 部门的特殊个别字段
* 1.部门 / 2.岗位 的编码
*/
private String number
private Double order
private Double sort
private String href
private String component
private List<Tree<T>>children
private String parentId
private boolean hasParent = false
private boolean hasChildren = false
private Date createTime
private Date modifyTime
public void initChildren(){
this.children = new ArrayList<>()
}
}
在写一个工具类
public class TreeUtil {
protected TreeUtil() {
}
private final static String TOP_NODE_ID = "0"
/**
* 用于构建菜单
*
* @param nodes nodes
* @param <T> <T>
* @return <T>Tree<T>
*/
public static <T>Tree<T>build(List<Tree<T>>nodes) {
if (nodes == null) {
return null
}
List<Tree<T>>topNodes = new ArrayList<>()
nodes.forEach(node ->{
String pid = node.getParentId()
if (pid == null || TOP_NODE_ID.equals(pid)) {
topNodes.add(node)
return
}
for (Tree<T>n : nodes) {
String id = n.getId()
if (id != null &&id.equals(pid)) {
if (n.getChildren() == null)
n.initChildren()
n.getChildren().add(node)
node.setHasParent(true)
n.setHasChildren(true)
n.setHasParent(true)
return
}
}
if (topNodes.isEmpty())
topNodes.add(node)
})
Tree<T>root = new Tree<>()
root.setId("0")
root.setParentId("")
root.setHasParent(false)
root.setHasChildren(true)
root.setChildren(topNodes)
root.setText("root")
return root
}
}
写完了这两个在写业务层
一个构建书的方法
private void buildTrees(List>trees, List menus, List ids) {
menus.forEach(menu ->{
ids.add(menu.getId().toString())
Tree tree = new Tree<>()
tree.setId(menu.getId().toString())
tree.setKey(tree.getId())
tree.setParentId(menu.getParentId().toString())
tree.setText(menu.getName())
tree.setTitle(tree.getText())
tree.setIcon(menu.getIcon())
tree.setComponent(menu.getComponent())
tree.setCreateTime(menu.getCreateTime())
tree.setCreateTime(menu.getCreateTime())
tree.setHref(menu.getHref())
tree.setSort(menu.getSort())
tree.setCode(menu.getCode())
tree.setMtype(menu.getMtype())
trees.add(tree)
})
}
Map<String, Object>result = new HashMap<>()
List<Dept>depts = findDepts(dept, request)
List<Tree<Dept>>trees = new ArrayList<>()
buildTrees(trees, depts)
Tree<Dept>deptTree = TreeUtil.build(trees)
result.put("rows", deptTree)
result.put("total", depts.size())
import java.awt.*import java.awt.event.*
import javax.swing.*
import javax.swing.tree.*
public class TreeEditTest {
public static void main(String[] args) {
JFrame frame = new TreeEditFrame()
frame.show()
}
}
class TreeEditFrame extends JFrame implements ActionListener {
public TreeEditFrame() {
setTitle("TreeEditTest")
setSize(300, 200)
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0)
}
})
// construct tree
TreeNode root = makeSampleTree()
model = new DefaultTreeModel(root)
tree = new JTree(model)
DefaultTreeCellRenderer renderer=new DefaultTreeCellRenderer()
renderer.setLeafIcon(new ImageIcon("1.gif"))
renderer.setClosedIcon(new ImageIcon("2.gif"))
renderer.setOpenIcon(new ImageIcon("3.gif"))
//renderer.setBackgroundNonSelectionColor(Color.BLUE)
//renderer.setBackgroundSelectionColor(Color.RED)
renderer.setBorderSelectionColor(Color.RED)
tree.setCellRenderer(renderer)
// add scroll pane with tree to content pane
Container contentPane = getContentPane()
JScrollPane scrollPane = new JScrollPane(tree)
contentPane.add(scrollPane, "Center")
// make button panel
JPanel panel = new JPanel()
addSiblingButton = new JButton("Add Sibling")
addSiblingButton.addActionListener(this)
panel.add(addSiblingButton)
addChildButton = new JButton("Add Child")
addChildButton.addActionListener(this)
panel.add(addChildButton)
deleteButton = new JButton("Delete")
deleteButton.addActionListener(this)
panel.add(deleteButton)
contentPane.add(panel, "South")
}
public TreeNode makeSampleTree() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("World")
DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA")
root.add(country)
DefaultMutableTreeNode state = new DefaultMutableTreeNode("California")
country.add(state)
DefaultMutableTreeNode city = new DefaultMutableTreeNode("San Jose")
state.add(city)
city = new DefaultMutableTreeNode("Cupertino")
state.add(city)
state = new DefaultMutableTreeNode("Michigan")
country.add(state)
city = new DefaultMutableTreeNode("Ann Arbor")
state.add(city)
country = new DefaultMutableTreeNode("Germany")
root.add(country)
state = new DefaultMutableTreeNode("Schleswig-Holstein")
country.add(state)
city = new DefaultMutableTreeNode("Kiel")
state.add(city)
return root
}
public void actionPerformed(ActionEvent event) {
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent()
if (selectedNode == null)
return
if (event.getSource().equals(deleteButton)) {
if (selectedNode.getParent() != null)
model.removeNodeFromParent(selectedNode)
// model.removeFromParent(selectedNode)
return
}
// add new node as sibling or child
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New")
if (event.getSource().equals(addSiblingButton)) {
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode
.getParent()
if (parent != null) {
int selectedIndex = parent.getIndex(selectedNode)
model.insertNodeInto(newNode, parent, selectedIndex + 1)
}
} else if (event.getSource().equals(addChildButton)) {
model.insertNodeInto(newNode, selectedNode, selectedNode
.getChildCount())
}
// now display new node
TreeNode[] nodes = model.getPathToRoot(newNode)
TreePath path = new TreePath(nodes)
tree.scrollPathToVisible(path)
}
private DefaultTreeModel model
private JTree tree
private JButton addSiblingButton
private JButton addChildButton
private JButton deleteButton
private JButton editButton
}
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/swing/JTree.html
tree 英 [tri:] 美 [tri] :n. 树木料树状图宗谱;vt. 把?赶上树使处于困境把鞋型插入(鞋内)
短语
family tree 家族树 家谱 家庭树 族谱
Suffix Tree [计] 后缀树 后缀树实现 字尾树
tree hyrax 树蹄兔属 树蹄兔
Leftist tree 左偏树 左倾树
Tree sitting 树坐 国际常见的树坐
Tree spiking 树钉
Metric tree 度量树
Fenwick tree 树状数组
camphor tree [林] 樟树 [林] 樟脑树 香樟树 香樟
扩展资料
双语例句
1、You are absolutely correct. The leaves are from a bay tree
你说得很对,这是月桂树的叶子。
2、The peach tree is wormy.
桃树长虫了。
3、He dug a hole in our yard on Edgerton Avenue to plant a maple tree when I was born.
我出生的时候,他在埃杰顿大街我们家的园圃里挖了个坑,种了棵枫树。
4、China has the world's most ancient tree species--metasequoia.
中国有世界最古老的树种--水杉。
5、A vandal with a chainsaw cut down a tree.
一个故意破坏公物的人用链锯伐倒了一棵树。