请问这个树状图在Java中应该怎么做?

Python016

请问这个树状图在Java中应该怎么做?,第1张

打个比方

可以写一个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.

一个故意破坏公物的人用链锯伐倒了一棵树。