All Downloads are FREE. Search and download functionalities are using the official Maven repository.

smile.swing.table.DefaultTableHeaderCellRenderer Maven / Gradle / Ivy

There is a newer version: 3.1.1
Show newest version
/*
 * Copyright (c) 2010-2021 Haifeng Li. All rights reserved.
 *
 * Smile 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 3 of the License, or
 * (at your option) any later version.
 *
 * Smile 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 Smile.  If not, see .
 */

package smile.swing.table;

import java.awt.Component;
import java.util.List;

import javax.swing.Icon;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.RowSorter.SortKey;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;

/**
 * A default cell renderer for a JTableHeader.
 * 

* DefaultTableHeaderCellRenderer attempts to provide identical behavior to the * renderer which the Swing subsystem uses by default, the Sun proprietary class * sun.swing.table.DefaultTableCellHeaderRenderer. *

* To apply any desired customization, DefaultTableHeaderCellRenderer may be * suitably extended. * * @author Haifeng Li */ @SuppressWarnings("serial") public class DefaultTableHeaderCellRenderer extends DefaultTableCellRenderer { /** * Constructs a * DefaultTableHeaderCellRenderer. *

* The horizontal alignment and text position are set as appropriate to a * table header cell, and the opaque property is set to false. */ public DefaultTableHeaderCellRenderer() { setHorizontalAlignment(CENTER); setHorizontalTextPosition(LEFT); setVerticalAlignment(BOTTOM); setOpaque(false); } /** * Returns the default table header cell renderer. *

* If the column is sorted, the approapriate icon is retrieved from the * current Look and Feel, and a border appropriate to a table header cell is * applied. *

* Subclasses may overide this method to provide custom content or * formatting. * * @param table the JTable. * @param value the value to assign to the header cell * @param isSelected This parameter is ignored. * @param hasFocus This parameter is ignored. * @param row This parameter is ignored. * @param column the column of the header cell to render * @return the default table header cell renderer */ @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); JTableHeader tableHeader = table.getTableHeader(); if (tableHeader != null) { setForeground(tableHeader.getForeground()); } setIcon(getIcon(table, column)); setBorder(UIManager.getBorder("TableHeader.cellBorder")); return this; } /** * Overloaded to return an icon suitable to the primary sorted column, or * null if the column is not the primary sort key. * * @param table the JTable. * @param column the column index. * @return the sort icon, or null if the column is unsorted. */ protected Icon getIcon(JTable table, int column) { SortKey sortKey = getSortKey(table, column); if (sortKey != null && table.convertColumnIndexToView(sortKey.getColumn()) == column) { switch (sortKey.getSortOrder()) { case ASCENDING: return UIManager.getIcon("Table.ascendingSortIcon"); case DESCENDING: return UIManager.getIcon("Table.descendingSortIcon"); default: // Just to remove unmatched case warning } } return null; } /** * Returns the current sort key, or null if the column is unsorted. * * @param table the table * @param column the column index * @return the SortKey, or null if the column is unsorted */ @SuppressWarnings("rawtypes") protected SortKey getSortKey(JTable table, int column) { RowSorter rowSorter = table.getRowSorter(); if (rowSorter == null) { return null; } List sortedColumns = rowSorter.getSortKeys(); if (!sortedColumns.isEmpty()) { return (SortKey) sortedColumns.get(0); } return null; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy