Listから,親子関係のあるJTreeを作る
結論を言ってしまうと,TreeNodeをimplementsするのが早い.
間違っても,DefaultMutableTreeNodeだけで何とかしようとなんて思わないこと(3敗).
1.TreeNodeの実装クラス
import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; import java.util.Objects; import javax.swing.tree.TreeNode; public class MyTreeNode implements TreeNode{ private String id; private MyTreeNode parent; private String parentName; private String indivisual; private List<MyTreeNode> children = new ArrayList<>(); public MyTreeNode(String code, String indivisual, String parent) { this.id = code; this.indivisual = indivisual; this.parentName = parent; } @Override public TreeNode getChildAt(int childIndex) { return children.get(childIndex); } @Override public int getChildCount() { return children.size(); } @Override public TreeNode getParent() { if(Objects.nonNull(parent)){ return this.parent; }else { return null; } } @Override public int getIndex(TreeNode node) { // TODO 自動生成されたメソッド・スタブ return 0; } @Override public boolean getAllowsChildren() { return true; } @Override public boolean isLeaf() { if(Objects.isNull(children)) { return true; }else { return false; } } @Override public Enumeration children() { return Collections.enumeration(this.children); } @Override public String toString() { return this.indivisual; } public void add(MyTreeNode futureChild) { // if(this.getChildCount()>0) { for(MyTreeNode node: this.children) { System.out.println(node.indivisual); if(node.indivisual.equals(futureChild.parentName)) { node.add(futureChild); } } } //直属の子として追加 if(this.indivisual.equals(futureChild.parentName)) { this.children.add(futureChild); } } }
2. データとツリー作成部分
import java.awt.BorderLayout; import java.awt.Dimension; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; public class MyTree extends JFrame { public static void main(String[] args){ //List部分 List<TreeObject> toList = new ArrayList<>(); toList.add(new TreeObject("10", "root","GG")); toList.add(new TreeObject("20", "root","BB")); toList.add(new TreeObject("11", "GG", "Sol")); toList.add(new TreeObject("12", "GG", "Ky")); toList.add(new TreeObject("13", "GG", "Diz")); toList.add(new TreeObject("21", "BB", "Jin")); toList.add(new TreeObject("22", "BB", "Es")); MyTree frame = new MyTree(toList); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } public MyTree(List<TreeObject> toList) { MyTreeNode top = new MyTreeNode("00", "root", ""); for(TreeObject item: toList ) { top.add(new MyTreeNode(item.getCode(), item.getIndividual(), item.getParent())); } //い つ も の JTree tree = new JTree(top); JScrollPane scrollPane = new JScrollPane(); scrollPane.getViewport().setView(tree); scrollPane.setPreferredSize(new Dimension(280, 180)); JPanel p = new JPanel(); p.add(scrollPane); getContentPane().add(p, BorderLayout.CENTER); } }
3. 感想
自分がプログラマーじゃないんだなーと思った.
まあ,続けるんですけどね?この仕事.楽しくはあるので.