📄 mytree.java
字号:
package com.icbcsdc.ddlexp.ui;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreePath;
import pv.jfcx.JPVTree;
import pv.jfcx.JPVTreeView;
import pv.jfcx.PVNode;
import com.icbcsdc.ddlexp.pub.staticLog.Logger;
import com.icbcsdc.ddlexp.pub.util.MessageBox;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.ComparedNode;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.XMLDatabase;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.XMLManager;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.XMLNode;
import com.icbcsdc.ddlexp.ui.dialog.DeamonThread;
import com.icbcsdc.ddlexp.ui.dialog.SetExpFileDlg;
import com.icbcsdc.ddlexp.ui.dialog.WaitingDlg;
import com.icbcsdc.ddlexp.ui.popMenu.PopupMenu;
import com.icbcsdc.ddlexp.ui.rightPanel.RightPanel;
/**
* @author zhangyc
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class MyTree extends JPVTreeView {
/**
* 构造生成器模式所需的对象 树节点右键弹出菜单的生成工厂
*/
PopupMenuFactory PMfact = new PopupMenuFactory();
/**
* 构造生成器模式所需的对象 右边面板的生成工厂
*/
RightFactory RPfact = new RightFactory();
/**
* 构造生成器模式所需的对象 右边面板的抽象类
*/
RightPanel RPchoice=null;
/**
* 选中的树节点
*/
PVNode selectedPVNode=null;
/**
* 右键选中的树节点
*/
PVNode selectedPopPVNode=null;
TreeFrame parent=null;
XMLManager manager=null;
//byte compareStatus=0;
/**
* Constructor for MyTree1.
*/
public MyTree(TreeFrame parent) {
super();
this.parent=parent;
init();
}
/**
* Constructor for MyTree1.
* @param arg0
*/
public MyTree(PVNode arg0,TreeFrame parent) {
super(arg0);
this.parent=parent;
init();
}
/**
* Constructor for MyTree1.
* @param arg0
*/
public MyTree(XMLManager manager,JPVTree arg0,TreeFrame parent) {
super(arg0);
this.parent=parent;
this.manager=manager;
init();
}
/**
* Constructor for MyTree1.
* @param arg0
*/
public MyTree(XMLManager manager,JPVTree arg0,TreeFrame parent,byte compareStatus) {
super(arg0);
this.parent=parent;
this.manager=manager;
this.manager.setCompareStatus(compareStatus);
init();
}
protected void init(){
this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
this.setViewportBorder(BorderFactory.createEtchedBorder());
this.setBorderStyle(pv.util.PVBorder.OUTDENT + 4);
this.getTree().addMouseListener(buildMouseListener());
this.addAllListeners(buildListener());
//pv.jfcx.PVTreeListener ls = buildListener();
}
protected pv.jfcx.PVTreeListener buildListener() {
return new pv.jfcx.PVTreeListener() {
public void afterDrop(pv.jfcx.PVTreeEvent e) {
}
public int beforeDeleteKey(pv.jfcx.PVTreeEvent e) {
return super.beforeDeleteKey(e);
}
public int beforeDrop(pv.jfcx.PVTreeEvent e) {
return super.beforeDrop(e);
}
public int beforeInsertKey(pv.jfcx.PVTreeEvent e) {
Logger.log(Logger.INFO_INT, "beforeInsert");
return super.beforeInsertKey(e);
}
public int dragOver(pv.jfcx.PVTreeEvent e) {
return super.dragOver(e);
// pv.jfcx.PVTreeEvent.ALLOW_DRAG_DROP;
}
public int startDrag(pv.jfcx.PVTreeEvent e) {
return super.startDrag(e); // pv.jfcx.PVTreeEvent.ALLOW_DRAG_DROP;
}
public void treeCollapsed(TreeExpansionEvent e) {
Logger.log(Logger.INFO_INT, "collapsed: "
+ getSelectedNode());
setSelectedNode((pv.jfcx.PVNode) e.getPath().getLastPathComponent());
}
//--------------------------
// implementation of the tree expansion listener
public void treeExpanded(TreeExpansionEvent e) {
Logger.log(Logger.INFO_INT, "collapsed: "
+ getSelectedNode());
//selectedPVNode = (pv.jfcx.PVNode) e.getPath().getLastPathComponent();
setSelectedNode((pv.jfcx.PVNode) e.getPath().getLastPathComponent());
}
//--------------------------
// implementation of the tree model listener
public void treeNodesChanged(TreeModelEvent e) {
Logger.log(Logger.INFO_INT, "Nodes Changed");
}
public void treeNodesInserted(TreeModelEvent e) {
Logger.log(Logger.INFO_INT, "Nodes Inserted");
}
public void treeNodesRemoved(TreeModelEvent e) {
Logger.log(Logger.INFO_INT, "Nodes Removed");
}
public void treeStructureChanged(TreeModelEvent e) {
Logger.log(Logger.INFO_INT, "StructureChanged " + e);
}
//--------------------------
// implementation of the tree selection listener
public void valueChanged(TreeSelectionEvent e) {
Logger.log(Logger.INFO_INT, "valueChanged: "+ getSelectedNode());
//如果节点的信息改变,则把右侧面板上的内容移去
setSelectedNode((pv.jfcx.PVNode) e.getPath().getLastPathComponent());
tree_change();
//parent.removeRightPanel();
}
};
}
/**
* @return 树节点的右键的监听器
*/
protected MouseListener buildMouseListener() {
return new MouseListener() {
public void mouseClicked(MouseEvent e) {
TreePath selPath = getTree().getPathForLocation(
e.getX(), e.getY());
if(selPath==null) return;
//selectedPopPVNode = (pv.jfcx.PVNode) selPath.getLastPathComponent();
setSelectedPopPVNode((pv.jfcx.PVNode) selPath.getLastPathComponent());
//right button鼠标右键
if (e.getButton() == 3) {
if ((selPath != null)
&& (selPath.getLastPathComponent() ==
getTree().getLastSelectedPathComponent())) {
JPopupMenu popup = rigltClickNode();
if(popup != null)
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
//双击节点
if (e.getClickCount() == 2) {
selectedNodeRefresh();
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
};
}
/**
* 每次节点上右键的响应事件
* @return JPopupMenu对象
*/
protected JPopupMenu rigltClickNode() {
PopupMenu PMchoice= PMfact.getChoiceUI(parent,selectedPopPVNode);
if(PMchoice==null) return null;
return PMchoice.getJPopupMenu();
}
public void selectedNodeRefresh(){
final DeamonThread mainthread = new DeamonThread() {
public void run() {
try {
doubleClickNode();
running=false;
} catch (Exception e) {
MessageBox.showErr(getTreeFrame(),e.getMessage());
}finally{
running=false;
}
}
};
mainthread.start();
WaitingDlg dlg = new WaitingDlg(this.parent, mainthread,"The selected node is being refreshed...");
dlg.showInParentMiddle();
}
public void selectedNodeExport(){
RPchoice.setSelect();
if(this.getCompareStatus()!=ComparedNode.NO_COMPARED){
MessageBox.showErr(getTreeFrame(),"比较节点不能做DDL导出");
return;
}
SetExpFileDlg frame = new SetExpFileDlg(this.parent,true);
frame.show();
String fileName = null;
if(frame.result == 1){
fileName = frame.fileName;
if((fileName != null)&&(fileName.length() != 0)){
this.parent.setExpFile(new File(fileName));
Logger.log(Logger.DEBUG,"导出脚本文件为:"+fileName);
}else{
MessageBox.showErr(getTreeFrame(),"输入文件名不能为空");
return;
}
}else{
Logger.log(Logger.DEBUG,"用户取消输入导出文件名!");
return;
}
//开始导出DDL
final DeamonThread mainthread = new DeamonThread() {
public void run() {
try {
XMLNode node=(XMLNode)selectedPVNode.getUserObject();
node.writeDDLToFil(parent.getExpFile());
running=false;
} catch (Exception e) {
e.printStackTrace();
Logger.log(Logger.INFO,e.getMessage());
MessageBox.showErr(getTreeFrame(),"导出失败,失败原因:"+e.getMessage());
}finally{
running=false;
}
}
};
mainthread.start();
WaitingDlg dlg = new WaitingDlg(this.parent, mainthread,"Exporting the selected node....");
//dlg.show(300,300);
dlg.showInParentMiddle();
}
/**
* 相应节点上的双击事件
* **/
protected void doubleClickNode() throws Exception{
//Logger.log(Logger.INFO,"1 selectedNode in doubleClickNode:"+selectedPVNode);
XMLNode node=(XMLNode)selectedPVNode.getUserObject();
node.refresh();
//Logger.log(Logger.INFO,"2 selectedNode in doubleClickNode:"+selectedPVNode);
selectedPVNode.removeAllChildren();
//Logger.log(Logger.INFO,"3 selectedNode in doubleClickNode:"+selectedPVNode);
node.appendChildren2Node(selectedPVNode);
//Logger.log(Logger.INFO,"4 selectedNode in doubleClickNode:"+selectedPVNode);
if(selectedPVNode!=null) {
tree_change();
this.reload(selectedPVNode);
}
//Logger.log(Logger.INFO,"5 selectedNode in doubleClickNode:"+selectedPVNode);
//Logger.log(Logger.INFO,"6 selectedNode in doubleClickNode:"+selectedPVNode);
}
/**
* 每次树刷新时调用的方法,主要是作用是根据节点调出相应的界面
*/
protected void tree_change() {
if(selectedPVNode==null) return;
RPchoice = RPfact.getChoiceUI(parent,selectedPVNode);
parent.removeRightPanel();
parent.addRightPanel(RPchoice);
}
public void printSelectPVNode(){
int size=selectedPVNode.getChildCount();
for(int i=0;i<size;i++){
XMLNode node=(XMLNode)((PVNode)selectedPVNode.getChildAt(i)).getUserObject();
System.out.println(node.toString());
}
}
public static void main(String[] args) {
}
/**
* Returns the selectPopPVNode.
* @return PVNode
*/
public PVNode getSelectedPopPVNode() {
return selectedPopPVNode;
}
/**
* Returns the selectPVNode.
* @return PVNode
*/
public PVNode getSelectedNode() {
return selectedPVNode;
}
/**
* Sets the selectedPopPVNode.
* @param selectedPopPVNode The selectedPopPVNode to set
*/
protected void setSelectedPopPVNode(PVNode selectedPopPVNode) {
this.selectedPopPVNode = selectedPopPVNode;
parent.setSelectedTree(this);
}
/**
* Sets the selectedPVNode.
* @param selectedPVNode The selectedPVNode to set
*/
public void setSelectedNode(PVNode selectedPVNode) {
this.selectedPVNode = selectedPVNode;
parent.setSelectedTree(this);
}
/**
* contruct JPVTree
* */
public void addDatabase(XMLDatabase db) throws Exception{
//db.setPlatform();
//db.setVersion();
if(manager.getCompareStatus()==ComparedNode.COMPARED)
db.setCompareStatus(ComparedNode.COMPARED);
manager.addChild(db);
this.getTree().addNode(db.getPVNode());
}
public void removeDatabase(PVNode db){
//XMLManager manager= XMLManager.getInstance();
XMLDatabase xmldb=(XMLDatabase)db.getUserObject();
manager.removeChild(xmldb);
this.getTree().removeNode(db);
}
public XMLDatabase getXMLDatabase(String url){
return this.manager.getXMLDatabase(url);
}
public void managerClear(){
this.manager.clear();
}
/**
* Returns the compareStatus.
* @return byte
*/
public byte getCompareStatus() {
return manager.getCompareStatus();
}
/**
* Sets the compareStatus.
* @param compareStatus The compareStatus to set
*/
public void setCompareStatus(byte compareStatus) {
manager.setCompareStatus(compareStatus);
}
/**
* Returns the parent.
* @return TreeFrame
*/
public TreeFrame getTreeFrame() {
return parent;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -