Skip to content

Instantly share code, notes, and snippets.

@brokendish
Created May 13, 2012 15:00
Show Gist options
  • Save brokendish/2688832 to your computer and use it in GitHub Desktop.
Save brokendish/2688832 to your computer and use it in GitHub Desktop.
TreeSet
package brokendish;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Point;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import brokendish.TreeControle;
import brokendish.TreeSet;
import brokendish.TreeControle.DnDTreeCellRenderer;
import brokendish.TreeControle.RJLTransferable;
public class TreeSet extends JFrame{
MenuBar mnuBar; //メニューバー管理用
Menu menu1,menu2; //メニュー管理用
MenuItem item1_1, item2_1,item1_2, item2_2; //メニュー項目
public static JFrame fr; //----2012/06/10
//Jtreeの情報をハッシュマップで持つ
public static HashMap<String,NodeDataStruct> treeHashMap = new HashMap<String,NodeDataStruct>();
private static DefaultMutableTreeNode root;
public void TreeSetInit() { //----2012/06/10------------------------------------------------S
// super(new BorderLayout());
try{
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
}catch(Exception e) {
e.printStackTrace();
}
fr = new JFrame(); //----2012/06/10
DefaultTreeModel model = makeModel();
TreeControle tree = new TreeControle();
tree.setModel(model);
//ツリーを表示状態にする
for(int i=0;i<tree.getRowCount();i++) {
tree.expandRow(i);
}
fr.add(new JScrollPane(tree)); //----2012/06/10
fr.setPreferredSize(new Dimension(320, 240)); //----2012/06/10
//メニュー追加関連-------------------------------------------------------------------------------開始
MenuBarSet menuSet = new MenuBarSet();
menuSet.menuBarSet();
fr.getRootPane().setJMenuBar(menuSet.menuBarSet()); //----2012/06/10
//メニュー追加関連-------------------------------------------------------------------------------終了
//-----------------------------------------------------
//setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
fr.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //----2012/06/10
fr.setLocationRelativeTo(null); //----2012/06/10
fr.setSize(400,300); //----2012/06/10
fr.setVisible(true); //----2012/06/10
//----2012/06/10------------------------------------------------S
//WindowのXクリック時のリスナー
fr.addWindowListener(new WindowAdapter() { //----2012/06/10
@Override public void windowClosing(WindowEvent e) { //----2012/06/10
System.out.println("windowClosing"); //----2012/06/10
maybeExit(); //----2012/06/10
} //----2012/06/10
@Override public void windowClosed(WindowEvent e) { //----2012/06/10
System.out.println("windowClosed"); //----2012/06/10
//System.exit(0); // //----2012/06/10
} //----2012/06/10
}); //----2012/06/10
}
//クローズの処理 //----2012/06/10
public void maybeExit() { //----2012/06/10
//JTreeを非表示にする //----2012/06/10
fr.setVisible(false); //----2012/06/10
System.out.println("----------Xをクリックされて、イベントを検知した時の処理をここに書く----------S"); //----2012/06/10
System.out.println("-Dialog Display!-"); //----2012/06/10
System.out.println("-ServletCall!-"); //----2012/06/10
System.out.println("-OK Dialog Display!-"); //----2012/06/10
System.out.println("--"); //----2012/06/10
System.out.println("----------Xをクリックされて、イベントを検知した時の処理をここに書く----------E"); //----2012/06/10
//ウインドウを破棄 //----2012/06/10
dispose(); //----2012/06/10
return; //----2012/06/10
} //----2012/06/10
//----2012/06/10------------------------------------------------E
private DefaultTreeModel makeModel() {
/* DefaultMutableTreeNode root = new DefaultMutableTreeNode("RootABC");
DefaultMutableTreeNode set1 = new DefaultMutableTreeNode("SetDir 001");
DefaultMutableTreeNode set2 = new DefaultMutableTreeNode("SetDir 002");
DefaultMutableTreeNode set3 = new DefaultMutableTreeNode("SetDir 003");
DefaultMutableTreeNode set4 = new DefaultMutableTreeNode("SetDir 004");
set1.add(new DefaultMutableTreeNode("001-1111111"));
set1.add(new DefaultMutableTreeNode("001-2222222"));
set1.add(new DefaultMutableTreeNode("001-3333333"));
set2.add(new DefaultMutableTreeNode("002-1111111"));
set2.add(new DefaultMutableTreeNode("002-2222222"));
set3.add(new DefaultMutableTreeNode("003-1111111"));
set3.add(new DefaultMutableTreeNode("003-2222222"));
set3.add(new DefaultMutableTreeNode("003-3333333"));
root.add(set1);
root.add(set2);
set2.add(set3);
root.add(set4);*/
/*-----
DefaultMutableTreeNode root = new DefaultMutableTreeNode("RootABC");
DefaultMutableTreeNode set1 = new DefaultMutableTreeNode("SetDir 001");
DefaultMutableTreeNode set1_1 = new DefaultMutableTreeNode("SetDir 11");
DefaultMutableTreeNode set1_2 = new DefaultMutableTreeNode("SetDir 12");
root.add(set1);
set1.add(set1_1);
set1_1.add(set1_2);
------*/
//-------------------------------------------------
//Rootノード作成
root = new DefaultMutableTreeNode("RootABC");
//---------------------------------------------------------------------------------Prefix
//PrefixDataSet(Prefixの入力データ)インスタンス生成
PrefixDataSet prefix = new PrefixDataSet();
//Prefixの入力データをArrayListに格納する
ArrayList<PrefixDataStruct> prefData = prefix.PrefixDataSet();
//ArrayListに格納されたPrefixノードを入力の件数分作成する
DefaultMutableTreeNode prefNodeDat[] = new DefaultMutableTreeNode[prefData.size()];
//ArrayListに格納された件数分のPrefixノードを作成
for(int i=0 ; i < prefData.size() ; i++){
System.out.println(prefData.get(i).getPrefix());
//Prefixノードを作成
prefNodeDat[i] = new DefaultMutableTreeNode(prefData.get(i).getPrefix());
//ルートノードに追加
root.add(prefNodeDat[i]);
//ハッシュマップに格納するデータを取得
NodeDataStruct saveNodeDataP = new NodeDataStruct();
saveNodeDataP.setHashcode(" ");
saveNodeDataP.setIndex(" ");
saveNodeDataP.setLevel(" ");
saveNodeDataP.setNode(" ");
saveNodeDataP.setTekiyo(" ");
//ハッシュマップに格納する
treeHashSetInitAdd(root,saveNodeDataP);
}
//---------------------------------------------------------------------------------Node
//NodeDataSet(Nodeの入力データ)インスタンス生成
NodeDataSet node = new NodeDataSet();
//Nodeの入力データをArrayListに格納する
ArrayList<NodeDataStruct> nodeData = node.NodeDataSet();
//ArrayListに格納されたノードを入力の件数分作成する
DefaultMutableTreeNode nodeDat[] = new DefaultMutableTreeNode[20];
//Prefixの入力データ分ループする
for(int i=0 ; i < prefData.size() ; i++){
//ArrayListに格納された件数分の通常ノードを作成
/* for(int j=0 ; j < nodeData.size() ; j++){
System.out.println(nodeData.get(j).getIndex());
//ノード1階層目
if(nodeData.get(j).getLevel().equals("01")){
//ノードを作成
nodeDat[1] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
prefNodeDat[i].add(nodeDat[1]);
}
//ノード2階層目
else if(nodeData.get(j).getLevel().equals("02")){
//ノードを作成
nodeDat[2] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
nodeDat[1].add(nodeDat[2]);
}
//ノード3階層目
else if(nodeData.get(j).getLevel().equals("03")){
//ノードを作成
nodeDat[3] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
nodeDat[2].add(nodeDat[3]);
}
//ノード4階層目
else if(nodeData.get(j).getLevel().equals("04")){
//ノードを作成
nodeDat[4] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
nodeDat[3].add(nodeDat[4]);
}
//ノード5階層目
else if(nodeData.get(j).getLevel().equals("05")){
//ノードを作成
nodeDat[5] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
nodeDat[4].add(nodeDat[5]);
}
//ノード6階層目
else if(nodeData.get(j).getLevel().equals("06")){
//ノードを作成
nodeDat[6] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
nodeDat[5].add(nodeDat[6]);
}
//ノード7階層目
else if(nodeData.get(j).getLevel().equals("07")){
//ノードを作成
nodeDat[7] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
nodeDat[6].add(nodeDat[7]);
}
//ノード8階層目
else{
//ノードを作成
nodeDat[8] = new DefaultMutableTreeNode(nodeData.get(j).getNode());
//Prefixノードに追加
nodeDat[7].add(nodeDat[8]);
}
//ハッシュマップに格納するデータを取得
NodeDataStruct saveNodeData = new NodeDataStruct();
saveNodeData.setHashcode("");
saveNodeData.setIndex(nodeData.get(j).getIndex());
saveNodeData.setLevel(nodeData.get(j).getLevel());
saveNodeData.setNode(nodeData.get(j).getNode());
saveNodeData.setTekiyo(nodeData.get(j).getTekiyo());
//ハッシュマップに格納する
treeHashSetInitAdd(root,saveNodeData);
}
*/
}
//ツリーの構成、データをハッシュマップに格納する:ルートから全てを走査して格納
// treeHashSetAllScan(root);
//ツリーモデルにデータを設定
return new DefaultTreeModel(root);
}
//ツリーの構成、データをハッシュマップに格納する:ルートから全てを走査して格納
//追加時にこのメソッドを呼び出して、Jtreeの状態をハッシュマップ上に保持する
public static void treeHashSetInitAdd(DefaultMutableTreeNode root,NodeDataStruct indata){
String aaa = "";
//ノード情報をデータクラスに入れる-----------------------------------------------------------------------
//JTreeのノードをRootから走査する
DefaultMutableTreeNode emuRoot = (DefaultMutableTreeNode)root.getRoot();
//前順走査(上(ルート)から順に走査)
Enumeration emu = emuRoot.preorderEnumeration();
while(emu.hasMoreElements()) {
DefaultMutableTreeNode emuNode = (DefaultMutableTreeNode)emu.nextElement();
//有り無しフラグ
int flg=0;
//イテレータを設定してハッシュマップ全体を検索する
Iterator it = TreeSet.treeHashMap.keySet().iterator();
while (it.hasNext()) {
//オブジェクトを設定
Object o = it.next();
//現在のノード上にある「ハッシュコード」とハッシュマップ内の「ハッシュコード」を比較する
if(String.valueOf(emuNode.hashCode()).equals(treeHashMap.get(o).getHashcode())){
//現在のノード上とマップ内に同じハッシュコードがあった場合
flg=1;
}
}
//現在のノード上とマップ内に同じハッシュコードがなかった場合:ハッシュマップに登録する
if(flg!=1){
System.out.println("hashCode=" + emuNode.hashCode()
+ " : Level=" + emuNode.getLevel()
+ " : パス=" + emuNode.getUserObject()
+ " : 上位のパス=" + emuNode.getParent()
+ " : このノードから葉までの最長の距離=" + emuNode.getDepth()
);
//Nodeの入力データをArrayListに格納する
NodeDataStruct saveNodeData = new NodeDataStruct();
saveNodeData.setHashcode(String.valueOf(emuNode.hashCode()));
saveNodeData.setIndex(indata.getIndex());
saveNodeData.setLevel(indata.getLevel());
saveNodeData.setTekiyo(indata.getTekiyo());
saveNodeData.setNode(indata.getNode());
//treeHashMap(ハッシュマップ)にデータを格納
treeHashMap.put(String.valueOf(emuNode.hashCode()), saveNodeData);
aaa = String.valueOf(saveNodeData.getHashcode());
}
//現在のノード上とマップ内に同じハッシュコードがあった場合:何もしない
else{
}
}
//試し ハッシュコードから情報を取り出す
System.out.println("---------getHashcode-----------" + TreeSet.treeHashMap.get(aaa).getHashcode());
System.out.println("---------getLevel--------------" + TreeSet.treeHashMap.get(aaa).getLevel());
}
//ツリーの構成、データをハッシュマップに格納する:ルートから全てを走査して格納
//変更時にこのメソッドを呼び出して、Jtreeの状態をハッシュマップ上に保持する
public static void treeHashSetUpd(NodeDataStruct indata){
String aaa = "";
System.out.println("hashCode=" + indata.getHashcode()
+ " : Level=" + indata.getLevel()
+ " : TEKIYO=" + indata.getTekiyo()
+ " : NODE=" + indata.getNode()
);
//Nodeの入力データをArrayListに格納する
NodeDataStruct saveNodeData = new NodeDataStruct();
saveNodeData.setHashcode(indata.getHashcode());
saveNodeData.setIndex(indata.getIndex());
saveNodeData.setLevel(indata.getLevel());
saveNodeData.setTekiyo(indata.getTekiyo());
saveNodeData.setNode(indata.getNode());
//treeHashMap(ハッシュマップ)にデータを格納
treeHashMap.put(indata.getHashcode(), saveNodeData);
}
//ドラッグドロップした時にこのメソッドを呼び出して、ハッシュマップを再構築する
public static void treeHashSetReroad(){
// //ハッシュマップをクリア
// TreeSet.treeHashMap.clear();
//JTreeのノードをRootから走査する
DefaultMutableTreeNode emuRoot = (DefaultMutableTreeNode)root.getRoot();
//前順走査(上(ルート)から順に走査)
Enumeration emu = root.preorderEnumeration();
while(emu.hasMoreElements()) {
DefaultMutableTreeNode emuNode = (DefaultMutableTreeNode)emu.nextElement();
//ハッシュマップを再構築
//Nodeの入力データをArrayListに格納する
NodeDataStruct saveNodeData = new NodeDataStruct();
saveNodeData.setHashcode(String.valueOf(emuNode.hashCode()));
saveNodeData.setIndex("");
saveNodeData.setLevel(String.valueOf(emuNode.getLevel()));
saveNodeData.setTekiyo(treeHashMap.get(String.valueOf(emuNode.hashCode())).getTekiyo());
saveNodeData.setNode(emuNode.getUserObject().toString());
//treeHashMap(ハッシュマップ)にデータを格納
treeHashMap.put(String.valueOf(emuNode.hashCode()), saveNodeData);
System.out.println("hashCode=" + TreeSet.treeHashMap.get(String.valueOf(emuNode.hashCode())).getHashcode()
+ " : **Level=" + TreeSet.treeHashMap.get(String.valueOf(emuNode.hashCode())).getLevel()
+ " : **パス=" + emuNode.getUserObject()
+ " : **上位のパス=" + emuNode.getParent()
+ " : **このノードから葉までの最長の距離=" + emuNode.getDepth()
+ " : **適用=" + TreeSet.treeHashMap.get(String.valueOf(emuNode.hashCode())).getTekiyo()
);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment