📄 searchresulttable.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 + -