📄 caselisttree.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package eti.bi.alphaminer.ui;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import eti.bi.alphaminer.core.handler.AccessController;
import eti.bi.alphaminer.core.handler.CaseInfoListHandler;
import eti.bi.alphaminer.core.observer.ObserveSubject;
import eti.bi.alphaminer.core.observer.Observer;
import eti.bi.alphaminer.vo.CaseInfoList;
import eti.bi.alphaminer.vo.CaseInformation;
import eti.bi.alphaminer.vo.CaseInformationComparator;
import eti.bi.common.Locale.Resource;
/**
* CaseListTree is a kind of JTree with its leaf nodes correspond to CaseNodes
* and each parent node represents a grouping category.
*/
public class CaseListTree
extends JTree
implements TreeSelectionListener, ObserveSubject {
/**
*
*/
private static final long serialVersionUID = 1L;
private ManagementPopupMenu m_PopupMenu;
private CaseInformation[] m_CaseInformation;
private DefaultMutableTreeNode m_RootNode;
private DefaultTreeModel m_Model;
private int m_CurrentGroup;
private Vector m_Observers;
private ManagementWindow m_Container;
private boolean dirty = true; //By default, must be true. Dirty = need_fresh TWang.
/**
* Constructs a CaseListTree.
* @param a_Window ManagementWindow containing this tree.
*/
public CaseListTree(ManagementWindow a_Window) {
super();
m_Container = a_Window;
m_PopupMenu = new ManagementPopupMenu(m_Container);
// m_RefreshMenu = new RefreshMenu(this);//<<23/03/2005 Mark Li: Remove Refresh button in CaseListTree
m_Observers = new Vector();
setCurrentGroup(Resource.srcStr("m_LabelCompany"));
m_RootNode = new DefaultMutableTreeNode("Cases");
m_Model = new DefaultTreeModel(null);
setTreeModel();//Need to update if dirty. TWang.
m_Model.reload();
this.setModel(m_Model);
this.setRootVisible(false);
this.setShowsRootHandles(true);
TreeSelectionModel selectionModel = this.getSelectionModel();
selectionModel.setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
this.setSelectionModel(selectionModel);
this.addTreeSelectionListener(this);
// <<23/03/2005 Mark Li: Remove Refresh button in CaseListTree
MouseAdapter treeMouseListener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Point clickedLocation = e.getPoint();
TreePath path = getPathForLocation(e.getX(), e.getY());
if (path == null) {
if (e.getClickCount() == 1
&& e.getButton() == MouseEvent.BUTTON3) {
// m_RefreshMenu.show(
// (Component) e.getSource(),
// (int) clickedLocation.getX(),
// (int) clickedLocation.getY());
}
return;
}
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) path.getLastPathComponent();
String caseID = null;
if (node != null && node.isLeaf()) {
caseID = ((CaseNode) node).getCaseID();
if (e.getClickCount() == 2
&& e.getButton() == MouseEvent.BUTTON1)
m_Container.getApplicationWindow().editCase(
caseID,
true);
else if (
e.getClickCount() == 1
&& e.getButton() == MouseEvent.BUTTON3) {
setSelectionPath(path);
m_PopupMenu.setCaseID(caseID);
m_PopupMenu.setLocation(
(int) clickedLocation.getX(),
(int) clickedLocation.getY());
m_PopupMenu.show(
(Component) e.getSource(),
(int) clickedLocation.getX(),
(int) clickedLocation.getY());
}
}
}
};
addMouseListener(treeMouseListener);
// 23/03/2005 Mark Li: Remove Refresh button in CaseListTree>>
}
/**
* Sets the current grouping category.
* @param a_Group name of the grouping category to be set.
*/
public void setCurrentGroup(String a_Group) {
if (a_Group.equals(Resource.srcStr("m_LabelIndustry")))
m_CurrentGroup = CaseInformationComparator.INDUSTRY;
else if (a_Group.equals(Resource.srcStr("m_LabelProblem")))
m_CurrentGroup = CaseInformationComparator.PROBLEM_TYPE;
else if (a_Group.equals(Resource.srcStr("m_LabelObjective")))
m_CurrentGroup = CaseInformationComparator.BUSINESS_OBJECTIVE;
else if (a_Group.equals(Resource.srcStr("m_LabelGoal")))
m_CurrentGroup = CaseInformationComparator.DATAMINING_GOAL;
else if (a_Group.equals(Resource.srcStr("m_LabelCompany")))
m_CurrentGroup = CaseInformationComparator.COMPANY_NAME;
}
/**
* Sets TreeModel of the CaseListTree. Lazy-update mode. TWang.
* @param a_IsRefreshed true to retrieve updated tree model content from the
* server; false to show the existed tree model content.
*/
@SuppressWarnings("unchecked")
public void setTreeModel() {
boolean a_IsRefreshed = dirty;
CaseInfoList list =
CaseInfoListHandler.getInstance().getCaseInfoList(a_IsRefreshed);
if(a_IsRefreshed){
dirty = false;
}
CaseInformationComparator comparator = null;
m_RootNode.removeAllChildren();
if (list != null) {
comparator = new CaseInformationComparator();
comparator.setAscending(true);
comparator.setSortBy(m_CurrentGroup);
m_CaseInformation = list.getCaseInfoArray(AccessController.getInstance().getM_DMEngineName());
//<<Frank J. Xu, 20/01/2005
if(m_CaseInformation != null && m_CaseInformation.length > 0)
{
Arrays.sort(m_CaseInformation, comparator);
//Arrays.sort(m_CaseInformation);
buildTree();
}
//>>Frank J. Xu, 20/01/2005
}
m_Model.setRoot(m_RootNode);
}
/**
* Change the menu, tool bar, and CaseInformationPanel state according to the change
* of the JTree.
* TWang. Apri 1, 2005.
* @see javax.swing.event.TreeSelectionListener#valueChanged(TreeSelectionEvent)
*/
public void valueChanged(TreeSelectionEvent e) {
adjustAccordToTreeFoucsChange();
}
/**
* Change the menu, tool bar, and CaseInformationPanel state according to the change
* of the JTree.
* TWang. Apri 1, 2005.
* @see javax.swing.event.TreeSelectionListener#valueChanged(TreeSelectionEvent)
*/
public void adjustAccordToTreeFoucsChange(){
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) this.getLastSelectedPathComponent();
//if (this.isShowing() && m_Container.isSelected() && m_Container.isVisible()){
if (node != null && node.isLeaf()) {
//System.out.println("display " + ((CaseNode) node).getCaseID());
for (int i = 0; i < m_Observers.size(); i++) {
Observer observer = (Observer) m_Observers.elementAt(i);
if (observer instanceof CaseInformationPanel)
{
((CaseInformationPanel) observer).displayCaseDetail(
((CaseNode) node).getCaseID(), false);
}
else
{
observer.sendNotify("select|" + ((CaseNode) node).getCaseID());
}
}
} else {
// change menu, tool bar, and CaseInformationPanel if clicking on non-leaf node
// or node == null.
for (int i = 0; i < m_Observers.size(); i++) {
Observer observer = (Observer) m_Observers.elementAt(i);
if (observer instanceof CaseInformationPanel)
{
if (this.isShowing() && m_Container.isSelected() && m_Container.isVisible()){
((CaseInformationPanel) observer).setButtonActionCommand(null);
}
((CaseInformationPanel) observer).setShownDetail(false);
}
else
{
if (this.isShowing() && m_Container.isSelected() && m_Container.isVisible()){
observer.sendNotify("login");
}
}
}
}
//}
}
/**
* @see eti.bi.alphaminer.core.observer.ObserveSubject#registerInterest(Observer)
*/
@SuppressWarnings("unchecked")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -