下面列出了javax.swing.table.TableColumn#getHeaderRenderer ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Installs alignment decorators in the table column at {@code colViewIndex}.
*
* @param table a table.
* @param colViewIndex the index of the column in the table <i>view</i>.
* @param alignment one of the following constants:
* <ul>
* <li>{@link SwingConstants#LEFT}</li>
* <li>{@link SwingConstants#CENTER} (the default for image-only labels)</li>
* <li>{@link SwingConstants#RIGHT}</li>
* <li>{@link SwingConstants#LEADING} (the default for text-only labels)</li>
* <li>{@link SwingConstants#TRAILING}</li>
* </ul>
*/
public static void installInOneColumn(JTable table, int colViewIndex, int alignment) {
TableColumn tableColumn = table.getColumnModel().getColumn(colViewIndex);
TableCellRenderer headerRenderer = tableColumn.getHeaderRenderer();
if (headerRenderer == null) {
headerRenderer = table.getTableHeader().getDefaultRenderer();
}
if (!(headerRenderer instanceof RendererAlignmentDecorator)) { // Don't install a redundant decorator.
tableColumn.setHeaderRenderer(new RendererAlignmentDecorator(headerRenderer, alignment));
}
TableCellRenderer cellRenderer = tableColumn.getCellRenderer();
if (cellRenderer == null) {
cellRenderer = table.getDefaultRenderer(table.getColumnClass(colViewIndex));
}
if (!(cellRenderer instanceof RendererAlignmentDecorator)) { // Don't install a redundant decorator.
tableColumn.setCellRenderer(new RendererAlignmentDecorator(cellRenderer, alignment));
}
}
private void rescaleTableColumns() {
// iterate over all columns to resize them individually
TableColumnModel columnModel = previewTable.getColumnModel();
for (int columnIdx = 0; columnIdx < columnModel.getColumnCount(); ++columnIdx) {
// get the current column
TableColumn column = columnModel.getColumn(columnIdx);
// get the renderer for the column header to calculate the preferred
// with for the header
TableCellRenderer renderer = column.getHeaderRenderer();
// check if the renderer is null
if (renderer == null) {
// if it is null use the default renderer for header
renderer = previewTable.getTableHeader().getDefaultRenderer();
}
// create a cell to calculate its preferred size
Component comp = renderer.getTableCellRendererComponent(previewTable, column.getHeaderValue(), false, false,
0, columnIdx);
int width = comp.getPreferredSize().width;
// set the maximum width which was calculated
column.setPreferredWidth(width);
}
}
private int getColumnHeaderWidth(int column)
{
if (! isColumnHeaderIncluded) return 0;
TableColumn tableColumn = table.getColumnModel().getColumn(column);
Object value = tableColumn.getHeaderValue();
TableCellRenderer renderer = tableColumn.getHeaderRenderer();
if (renderer == null)
{
renderer = table.getTableHeader().getDefaultRenderer();
}
Component c = renderer.getTableCellRendererComponent(table, value, false, false, -1, column);
return c.getPreferredSize().width;
}
private int getHeaderHeight() {
int height = 0;
TableColumnModel columnModel = header.getColumnModel();
for (int column = 0; column < columnModel.getColumnCount(); column++) {
TableColumn aColumn = columnModel.getColumn(column);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null)
renderer = header.getDefaultRenderer();
Component comp = renderer.getTableCellRendererComponent(header.getTable(),
aColumn.getHeaderValue(), false, false, -1, column);
int cHeight = comp.getPreferredSize().height;
Enumeration<?> en = ((GroupableTableHeader) header).getColumnGroups(aColumn);
if (en != null) {
while (en.hasMoreElements()) {
ColumnGroup cGroup = (ColumnGroup) en.nextElement();
cHeight += cGroup.getSize(header.getTable()).height;
}
}
height = Math.max(height, cHeight);
}
return height;
}
/**
* Initializes preferred (and eventually maximum) width of a table column
* based on the size of its header and the estimated longest value.
*
* @param table Table to adjust the column width for.
* @param index Index of the column.
* @param longValue Estimated long value for the column.
* @param padding Number of pixes for padding.
*/
public static void initColumnWidth(JTable table, int index, Object longValue, int padding) {
TableColumn column = table.getColumnModel().getColumn(index);
// get preferred size of the header
TableCellRenderer headerRenderer = column.getHeaderRenderer();
if (headerRenderer == null) {
headerRenderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = headerRenderer.getTableCellRendererComponent(
table, column.getHeaderValue(), false, false, 0, 0);
int width = comp.getPreferredSize().width;
// get preferred size of the long value (remeber max of the pref. size for header and long value)
comp = table.getDefaultRenderer(table.getModel().getColumnClass(index)).getTableCellRendererComponent(
table, longValue, false, false, 0, index);
width = Math.max(width, comp.getPreferredSize().width) + 2 * padding;
// set preferred width of the column
column.setPreferredWidth(width);
// if the column contains boolean values, the preferred width
// should also be its max width
if (longValue instanceof Boolean) {
column.setMaxWidth(width);
}
}
private int getHeaderHeight() {
int height = 0;
TableColumnModel columnModel = header.getColumnModel();
for (int column = 0; column < columnModel.getColumnCount(); column++) {
TableColumn aColumn = columnModel.getColumn(column);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null)
renderer = header.getDefaultRenderer();
Component comp = renderer.getTableCellRendererComponent(header.getTable(),
aColumn.getHeaderValue(), false, false, -1, column);
int cHeight = comp.getPreferredSize().height;
Enumeration<?> en = ((GroupableTableHeader) header).getColumnGroups(aColumn);
if (en != null) {
while (en.hasMoreElements()) {
ColumnGroup cGroup = (ColumnGroup) en.nextElement();
cHeight += cGroup.getSize(header.getTable()).height;
}
}
height = Math.max(height, cHeight);
}
return height;
}
private int getColumnHeaderWidth(int column) {
if (!isColumnHeaderIncluded) {
return 0;
}
TableColumn tableColumn = table.getColumnModel().getColumn(column);
Object value = tableColumn.getHeaderValue();
TableCellRenderer renderer = tableColumn.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component c = renderer.getTableCellRendererComponent(table, value, false, false, -1, column);
return c.getPreferredSize().width;
}
public static void resize(JTable table, int colViewIndex, boolean doFullScan) {
int maxWidth = 0;
// Get header width.
TableColumn column = table.getColumnModel().getColumn(colViewIndex);
TableCellRenderer headerRenderer = column.getHeaderRenderer();
if (headerRenderer == null) {
headerRenderer = table.getTableHeader().getDefaultRenderer();
}
Object headerValue = column.getHeaderValue();
Component headerRendererComp =
headerRenderer.getTableCellRendererComponent(table, headerValue, false, false, 0, colViewIndex);
maxWidth = Math.max(maxWidth, headerRendererComp.getPreferredSize().width);
// Get cell widths.
if (doFullScan) {
for (int row = 0; row < table.getRowCount(); ++row) {
maxWidth = Math.max(maxWidth, getCellWidth(table, row, colViewIndex));
}
} else {
maxWidth = Math.max(maxWidth, getCellWidth(table, 0, colViewIndex));
maxWidth = Math.max(maxWidth, getCellWidth(table, table.getRowCount() / 2, colViewIndex));
maxWidth = Math.max(maxWidth, getCellWidth(table, table.getRowCount() - 1, colViewIndex));
}
// For some reason, the calculation above gives a value that is 1 pixel too small.
// Maybe that's because of the cell divider line?
++maxWidth;
column.setPreferredWidth(maxWidth);
}
protected Component getHeaderCellRenderer(final int columnIndex) {
TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null) {
renderer = header.getDefaultRenderer();
}
boolean hasFocus = !header.isPaintingForPrint() && header.hasFocus();
rendererDelegate.setDelegate(renderer);
return rendererDelegate.getTableCellRendererComponent(header.getTable(),
aColumn.getHeaderValue(),
false, hasFocus,
-1, columnIndex);
}
/**
* Retrieves renderer for the specified column header.
*
* @param columnIndex
* Column index.
* @return Renderer for the specified column header.
*/
private Component getHeaderRenderer(int columnIndex) {
TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null) {
renderer = header.getDefaultRenderer();
}
return renderer.getTableCellRendererComponent(header.getTable(), aColumn.getHeaderValue(),
false, false, -1, columnIndex);
}
@Override
public void uninstallUI(JComponent c) {
for (int i = 0; i < header.getColumnModel().getColumnCount(); i++) {
TableColumn aColumn = header.getColumnModel().getColumn(i);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null) {
renderer = header.getDefaultRenderer();
}
Component rendComp = renderer.getTableCellRendererComponent(header.getTable(),
aColumn.getHeaderValue(), false, false, -1, i);
SwingUtilities.updateComponentTreeUI(rendComp);
}
super.uninstallUI(c);
}
private void paintCell(Graphics g, Rectangle cellRect, int columnIndex) {
TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null)
renderer = header.getDefaultRenderer();
Component component = renderer.getTableCellRendererComponent(header.getTable(),
aColumn.getHeaderValue(), false, false, -1, columnIndex);
rendererPane.add(component);
rendererPane.paintComponent(g, component, header, cellRect.x, cellRect.y, cellRect.width,
cellRect.height, true);
}
/**
* Calculate and return the height of the header.
*
* @return Header Height
*/
@SuppressWarnings("unchecked")
private int getHeaderHeight() {
int height = 0;
GroupableTableColumnModel columnModel = (GroupableTableColumnModel) header
.getColumnModel();
for (int column = 0; column < columnModel.getColumnCount(); column++) {
TableColumn aColumn = columnModel.getColumn(column);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null) {
renderer = header.getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(header
.getTable(), aColumn.getHeaderValue(), false, false, -1,
column);
int cHeight = comp.getPreferredSize().height;
Iterator iter = columnModel.getColumnGroups(aColumn);
if (iter != null) {
while (iter.hasNext()) {
ColumnGroup cGroup = (ColumnGroup) iter.next();
cHeight += cGroup.getSize(header.getTable()).height;
}
}
height = Math.max(height, cHeight);
}
return height;
}
public static Dimension getHeaderDimension(JTable table, TableColumn tableColumn) {
TableCellRenderer renderer = tableColumn.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(table, tableColumn.getHeaderValue(), false, false, 0, 0);
return comp.getPreferredSize();
}
public void copyValues(TableColumn base) {
modelIndex = base.getModelIndex();
identifier = base.getIdentifier();
width = base.getWidth();
minWidth = base.getMinWidth();
setPreferredWidth(base.getPreferredWidth());
maxWidth = base.getMaxWidth();
headerRenderer = base.getHeaderRenderer();
headerValue = base.getHeaderValue();
cellRenderer = base.getCellRenderer();
cellEditor = base.getCellEditor();
isResizable = base.getResizable();
}
public void copyValues(TableColumn base) {
modelIndex = base.getModelIndex();
identifier = base.getIdentifier();
width = base.getWidth();
minWidth = base.getMinWidth();
setPreferredWidth(base.getPreferredWidth());
maxWidth = base.getMaxWidth();
headerRenderer = base.getHeaderRenderer();
headerValue = base.getHeaderValue();
cellRenderer = base.getCellRenderer();
cellEditor = base.getCellEditor();
isResizable = base.getResizable();
}
private int getRealPrefferedHeaderWidth(JTable t, int col) {
TableColumn tc = t.getColumn(t.getColumnName(col));
TableCellRenderer tcr = tc.getHeaderRenderer();
if (tcr == null) {
tcr = t.getTableHeader().getDefaultRenderer();
}
Component c = tcr.getTableCellRendererComponent(t, tc.getHeaderValue(),
false, false, 0, 0);
return c.getPreferredSize().width;
}
/**
* Resizes the table columns based on the column and data preferred widths.
* @param table the original table
* @param model the data model
* @return the table itself
*/
public static JTable autoResizeColWidth(JTable table, AbstractTableModel model) {
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setModel(model);
int margin = 5;
for (int i = 0; i < table.getColumnCount(); i++) {
int vColIndex = i;
DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
TableColumn col = colModel.getColumn(vColIndex);
int width;
// Get width of column header
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0);
width = comp.getPreferredSize().width;
// Get maximum width of column data
for (int r = 0; r < table.getRowCount(); r++) {
renderer = table.getCellRenderer(r, vColIndex);
comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), false, false,
r, vColIndex);
width = Math.max(width, comp.getPreferredSize().width);
}
// Add margin
width += 2 * margin;
// Set the width
col.setPreferredWidth(width);
}
((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(
SwingConstants.LEFT);
// table.setAutoCreateRowSorter(true);
// table.getTableHeader().setReorderingAllowed(false);
// for (int i = 0; i < table.getColumnCount(); i++) {
// TableColumn column = table.getColumnModel().getColumn(i);
//
// column.setCellRenderer(new DefaultTableColour());
// }
return table;
}
/**
* Resizes the table columns based on the column and data preferred widths.
* @param table the original table
* @param model the data model
* @return the table itself
*/
public static JTable autoResizeColWidth(JTable table, AbstractTableModel model) {
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setModel(model);
int margin = 5;
for (int i = 0; i < table.getColumnCount(); i++) {
int vColIndex = i;
DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
TableColumn col = colModel.getColumn(vColIndex);
int width;
// Get width of column header
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0);
width = comp.getPreferredSize().width;
// Get maximum width of column data
for (int r = 0; r < table.getRowCount(); r++) {
renderer = table.getCellRenderer(r, vColIndex);
comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), false, false,
r, vColIndex);
width = Math.max(width, comp.getPreferredSize().width);
}
// Add margin
width += 2 * margin;
// Set the width
col.setPreferredWidth(width);
}
((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(
SwingConstants.LEFT);
return table;
}
/**
* Methods for ActionListener interface implementation
*/
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if (command.equals("PROPERTIES")) {
ExitCode exitCode = parameters.showSetupDialog(this, true);
if (exitCode == ExitCode.OK) {
int rowHeight = parameters.getParameter(PeakListTableParameters.rowHeight).getValue();
table.setRowHeight(rowHeight);
PeakListTableColumnModel cm = (PeakListTableColumnModel) table.getColumnModel();
cm.createColumns();
}
}
if (command.equals("AUTOCOLUMNWIDTH")) {
// Auto size column width based on data
for (int column = 0; column < table.getColumnCount(); column++) {
TableColumn tableColumn = table.getColumnModel().getColumn(column);
if (tableColumn.getHeaderValue() != "Peak shape"
&& tableColumn.getHeaderValue() != "Status") {
TableCellRenderer renderer = tableColumn.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component component = renderer.getTableCellRendererComponent(table,
tableColumn.getHeaderValue(), false, false, -1, column);
int preferredWidth = component.getPreferredSize().width + 20;
tableColumn.setPreferredWidth(preferredWidth);
}
}
}
if (command.equals("PRINT")) {
try {
table.print(PrintMode.FIT_WIDTH);
} catch (PrinterException e) {
MZmineCore.getDesktop().displayException(this, e);
}
}
}