⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchresulttable.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 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.Color;
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.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;

import eti.bi.alphaminer.core.handler.AccessController;
import eti.bi.alphaminer.core.observer.ObserveSubject;
import eti.bi.alphaminer.core.observer.Observer;
import eti.bi.alphaminer.vo.CaseInformation;
import eti.bi.alphaminer.vo.CaseInformationComparator;
import eti.bi.alphaminer.vo.SearchedCaseInfoList;

import eti.bi.common.Locale.Resource;

/**
 * SearchResultTable is a kind of JTable with each table entri corresponds to Case.
 */
public class SearchResultTable extends JTable implements ObserveSubject {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private ManagementPopupMenu m_PopupMenu;

	private SearchResultTableModel m_Model;
	private String[] m_TableHeader = { Resource.srcStr("SearchResultCase"), Resource.srcStr("SearchResultScore") };
	private CaseInformation[] m_CaseInformation;
	private Object[][] m_TableContent;
	private CaseInformationComparator m_CaseInformationComparator;

	private Vector m_Observers;
	private ManagementWindow m_Container;

	/**
	 * Constructs a SearchResultTable.
	 * @param a_Window ManagementWindow contains this SearchResultTable.
	 */
	public SearchResultTable(ManagementWindow a_Window) {
		super();
		m_Container = a_Window;
		m_PopupMenu = new ManagementPopupMenu(m_Container);
		m_CaseInformationComparator = new CaseInformationComparator();
		JTableHeader tableHeader = getTableHeader();
		tableHeader.setReorderingAllowed(false);
		tableHeader.setToolTipText(Resource.srcStr("ResultHeader"));

		MouseAdapter tableHeaderMouseListener = new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				TableColumnModel columnModel = getColumnModel();
				int viewColumn = columnModel.getColumnIndexAtX(e.getX());
				int column = convertColumnIndexToModel(viewColumn);

				if (e.getClickCount() == 1 && column != -1) {
					if (column == 0
						&& m_CaseInformationComparator.getSortBy()
							== CaseInformationComparator.CASE_ID
						|| column == 1
						&& m_CaseInformationComparator.getSortBy()
							== CaseInformationComparator.SCORE)
						m_CaseInformationComparator.setAscending(
							!m_CaseInformationComparator.getAscending());
					else {
						if (column == 0) {
							m_CaseInformationComparator.setAscending(true);
							m_CaseInformationComparator.setSortBy(
								CaseInformationComparator.CASE_ID);
						} else if (column == 1) {
							m_CaseInformationComparator.setAscending(false);
							m_CaseInformationComparator.setSortBy(
								CaseInformationComparator.SCORE);
						}
					}
					sortSearchResult();
				}
			}
		};

		MouseAdapter tableMouseListener = new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				Point clickedLocation = e.getPoint();
				int selectedRow = rowAtPoint(clickedLocation);
				String caseID = m_Model.getValueAt(selectedRow);
				if (e.getClickCount() == 2
					&& e.getButton() == MouseEvent.BUTTON1)
					m_Container.getApplicationWindow().editCase(caseID, true);
				else if (
					e.getClickCount() == 1
						&& e.getButton() == MouseEvent.BUTTON3) {
					setRowSelectionInterval(selectedRow, selectedRow);
					valueChanged(
						new ListSelectionEvent(
							m_Model,
							selectedRow,
							selectedRow,
							getSelectedRow() == selectedRow));
					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());
				}
			}
		};

		tableHeader.addMouseListener(tableHeaderMouseListener);
		setTableHeader(tableHeader);

		addMouseListener(tableMouseListener);
		setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		setFocusable(false);
		setGridColor(Color.white);
		setNewModel();

		m_Observers = new Vector();
	}

	/**
	 * Sets search result to the table content.
	 * @param a_SearchedCaseInfoList a SearchedCaseInfoList which stores the
	 * retrieved result.
	 */
	public void setSearchResult(SearchedCaseInfoList a_SearchedCaseInfoList) {
		if (a_SearchedCaseInfoList == null)
			m_CaseInformation = null;
		else {
			m_CaseInformation = a_SearchedCaseInfoList.getCaseInfoArray(AccessController.getInstance().getM_DMEngineName());

			//<<Frank J. Xu, 20/01/2005
			if(m_CaseInformation != null && m_CaseInformation.length > 0)
				sortSearchResult();
			else{
				m_TableContent = new Object[0][0];
				setNewModel();
			}
			//Frank J. Xu, 20/01/2005>>
		}
	}

	/**
	 * Sets state of Observers.
	 */
	public void setObserverState() {
		for (int i = 0; i < m_Observers.size(); i++) {
			Observer observer = (Observer) m_Observers.elementAt(i);
			if (observer instanceof CaseInformationPanel)
				continue;
			else
				observer.sendNotify("login");
		}
	}

	/**
	 * @see javax.swing.event.ListSelectionListener#valueChanged(ListSelectionEvent)
	 */
	public void valueChanged(ListSelectionEvent e) {
		super.valueChanged(e);
		if (e.getValueIsAdjusting()) {
			//System.out.println("display " + m_Model.getValueAt(getSelectedRow()));
			for (int i = 0; i < m_Observers.size(); i++) {
				Observer observer = (Observer) m_Observers.elementAt(i);
				if (observer instanceof CaseInformationPanel)
					if(getSelectedRow()>-1) {
						((CaseInformationPanel) observer).displayCaseDetail(
								m_Model.getValueAt(getSelectedRow()),
								true);
					}
					
				else
					if(getSelectedRow()>-1) {
						observer.sendNotify(
								"select|" + m_Model.getValueAt(getSelectedRow()));
					}
			}
		}
	}

	/**
	 * @see eti.bi.alphaminer.core.observer.ObserveSubject#registerInterest(Observer)
	 */
	@SuppressWarnings("unchecked")
	public void registerInterest(Observer a_Observer) {
		m_Observers.addElement(a_Observer);
	}

	/**
	 * Sorts contents of the TableModel by the CaseInformationComparator.
	 */
	@SuppressWarnings("unchecked")
	private void sortSearchResult() {
		Object[] temp = null;
		if (m_CaseInformation != null) {
			Arrays.sort(m_CaseInformation, m_CaseInformationComparator);
			m_TableContent = new Object[m_CaseInformation.length][2];
		}
		for (int i = 0;
			m_CaseInformation != null && i < m_CaseInformation.length;
			i++) {
			temp = new Object[2];
			temp[0] = m_CaseInformation[i].getCaseID();
			temp[1] = new Double(m_CaseInformation[i].getScore());
			m_TableContent[i] = temp;
		}
		setNewModel();
	}

	/**
	 * Sets a new table model to SearchResultTable.
	 */
	private void setNewModel() {
		m_Model =
			new SearchResultTableModel(
				m_TableContent,
				m_TableHeader,
				m_CaseInformation);
		setModel(m_Model);
	}

	public void resetLocale() {
		tableHeader.setToolTipText(Resource.srcStr("ResultHeader"));
		m_TableHeader[0] = Resource.srcStr("SearchResultCase"); 
		m_TableHeader[1] = Resource.srcStr("SearchResultScore");
		setNewModel();
	}
}

/**
 * SearchResultTableModel is a TableModel used by the SearchResultTable
 * residing in a ManagementWindow.
 */
class SearchResultTableModel extends DefaultTableModel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Class[] types = new Class[] { String.class, Double.class };
	boolean[] canEdit = new boolean[] { false, false };
	CaseInformation[] m_SearchResult;
	Object[][] m_TableContent;

	/**
	 * Constructs a SearchResultTableModel.
	 * @param a_TableContent table content to be shown in the TableModel.
	 * @param a_TableHeader table head to be shown in the TableModel.
	 * @param a_SearchResult a CaseInformation array maps to the table content.
	 */
	public SearchResultTableModel(
		Object[][] a_TableContent,
		String[] a_TableHeader,
		CaseInformation[] a_SearchResult) {
		super(a_TableContent, a_TableHeader);
		m_SearchResult = a_SearchResult;
		m_TableContent = a_TableContent;
	}

	/**
	 * Gets the ID of the Case represent by a specific row.
	 * @param rowIndex the given row.
	 * @return ID of the Case.
	 */
	public String getValueAt(int rowIndex) {
		return m_SearchResult[rowIndex].getCaseID();
	}

	/**
	 * @see javax.swing.table.TableModel#getColumnClass(int)
	 */
	@SuppressWarnings("unchecked")
	public Class getColumnClass(int columnIndex) {
		return types[columnIndex];
	}

	/**
	 * @see javax.swing.table.TableModel#isCellEditable(int, int)
	 */
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return canEdit[columnIndex];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -