Created
May 13, 2012 15:00
-
-
Save brokendish/2688832 to your computer and use it in GitHub Desktop.
TreeSet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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