📄 resulttable.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.report.core;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.util.*;
import org.compiere.util.*;
/**
* The Table to present RModel information
*
* @author Jorg Janke
* @version $Id: ResultTable.java,v 1.6 2002/05/26 01:20:12 jjanke Exp $
*/
public class ResultTable extends JTable implements MouseListener
{
/**
* Constructor
*/
public ResultTable()
{
super();
setCellSelectionEnabled(false);
setColumnSelectionAllowed(false);
setRowSelectionAllowed(false);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// Default Editor
ResultTableCellEditor rtce = new ResultTableCellEditor();
setCellEditor(rtce);
// Mouse Listener
addMouseListener(this);
getTableHeader().addMouseListener(this);
} // ResultTable
/** Last model index sorted */
private int m_lastSortIndex = -1;
/** Sort direction */
private boolean m_asc = true;
/**
* Create a JTable Model from ReportModel
* @param reportModel
* @param locale
*/
public ResultTable (RModel reportModel)
{
this();
setModel(reportModel);
} // ResultTable
/**
* Set Model
* @param reportModel
*/
public void setModel (RModel reportModel)
{
Log.trace(Log.l3_Util, "ResultTable.setModel");
super.setModel(new ResultTableModel(reportModel));
//
TableColumnModel tcm = getColumnModel();
// Set Editor/Renderer
for (int i = 0; i < tcm.getColumnCount(); i++)
{
TableColumn tc = tcm.getColumn(i);
RColumn rc = reportModel.getRColumn(i);
if (rc.getColHeader().equals(tc.getHeaderValue()))
{
ResultTableCellRenderer rtcr = new ResultTableCellRenderer(reportModel, rc);
tc.setCellRenderer(rtcr);
//
}
else
Log.error("RColumn=" + rc.getColHeader() + " <> TableColumn=" + tc.getHeaderValue());
}
autoSize();
} // setModel
/**
* Set Model
* @param ignored
*/
public void setModel (TableModel ignored)
{
// throw new IllegalArgumentException("Requires RModel"); // default construvtor calls this
super.setModel(ignored);
} // setModel
/**
* Table Model Listener
* @param e
*/
public void tableChanged(TableModelEvent e)
{
super.tableChanged(e);
Log.trace(Log.l6_Database, "ResultTable.tableChanged - Type=" + e.getType());
} // tableChanged
/*************************************************************************/
/**
* Mouse Clicked
* @param e
*/
public void mouseClicked(MouseEvent e)
{
int col = getColumnModel().getColumnIndexAtX(e.getX());
Log.trace(Log.l1_User, "ResultTable.mouseClicked",
"Column " + col + " = " + getColumnModel().getColumn(col).getHeaderValue()
+ ", Table r=" + this.getSelectedRow() + " c=" + this.getSelectedColumn());
// clicked Cell
if (e.getSource() == this)
{
}
// clicked Header
else
{
int mc = convertColumnIndexToModel(col);
sort(mc);
}
} // mouseClicked
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
/*************************************************************************/
/**
* Size Columns
*/
private void autoSize()
{
Log.trace(Log.l4_Data, "ResultTable.autoSize");
//
final int SLACK = 8; // making sure it fits in a column
final int MAXSIZE = 300; // max size of a column
//
TableColumnModel tcm = getColumnModel();
// For all columns
for (int col = 0; col < tcm.getColumnCount(); col++)
{
TableColumn tc = tcm.getColumn(col);
// Log.trace(Log.l4_Data, "Column=" + col, tc.getHeaderValue());
int width = 0;
// Header
TableCellRenderer renderer = tc.getHeaderRenderer();
if (renderer == null)
renderer = new DefaultTableCellRenderer();
Component comp = renderer.getTableCellRendererComponent
(this, tc.getHeaderValue(), false, false, 0, 0);
// Log.trace(Log.l5_DData, "Hdr - preferred=" + comp.getPreferredSize().width + ", width=" + comp.getWidth());
width = comp.getPreferredSize().width + SLACK;
// Cells
int maxRow = Math.min(30, getRowCount()); // first 30 rows
for (int row = 0; row < maxRow; row++)
{
renderer = getCellRenderer(row, col);
comp = renderer.getTableCellRendererComponent
(this, getValueAt(row, col), false, false, row, col);
int rowWidth = comp.getPreferredSize().width + SLACK;
width = Math.max(width, rowWidth);
}
// Width not greater ..
width = Math.min(MAXSIZE, width);
tc.setPreferredWidth(width);
// Log.trace(Log.l5_DData, "width=" + width);
} // for all columns
} // autoSize
/**
* Sort Table
* @param modelColumnIndex
*/
private void sort (int modelColumnIndex)
{
int rows = getRowCount();
if (rows == 0)
return;
// other column
if (modelColumnIndex != m_lastSortIndex)
m_asc = true;
else
m_asc = !m_asc;
m_lastSortIndex = modelColumnIndex;
//
Log.trace(Log.l4_Data, "ResultTable.sort #" + modelColumnIndex,
"rows=" + rows + ", asc=" + m_asc);
ResultTableModel model = (ResultTableModel)getModel();
// Prepare sorting
MSort sort = new MSort(0, null);
sort.setSortAsc(m_asc);
// while something to sort
sorting:
while (true)
{
// Create sortList
ArrayList sortList = new ArrayList(rows);
// fill with data entity
for (int i = 0; i < rows; i++)
{
Object value = model.getValueAt(i, modelColumnIndex);
sortList.add(new MSort(i, value));
}
// sort list it
Collections.sort(sortList, sort);
// move out of sequence row
for (int i = 0; i < rows; i++)
{
int index = ((MSort)sortList.get(i)).index;
if (i != index)
{
// Log.trace(Log.l4_Data, "move " + i + " to " + index);
model.moveRow (i, index);
continue sorting;
}
}
// we are done
// Log.trace(Log.l4_Data, "done");
break;
} // while something to sort
} // sort
} // ResultTable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -