📄 jmcellrenderer.java
字号:
package jm.framework.gui.module.render ;
import java.io.* ;
import java.awt.* ;
import javax.swing.* ;
import javax.swing.border.* ;
import javax.swing.table.* ;
import jm.util.* ;
public class JMCellRenderer
extends JLabel implements TableCellRenderer , Serializable
{
/**
*
*/
private static final long serialVersionUID = -7915874072169102928L;
public static final String CLASS_NAME = "JLabel" ;
Color[] backcolor = null ;
protected static Border noFocusBorder = new EmptyBorder ( 1 , 1 , 1 , 1 ) ;
// We need a place to store the color the JLabel should be returned
// to after its foreground and background colors have been set
// to the selection background color.
// These ivars will be made protected when their names are finalized.
private Color unselectedForeground ;
private Color unselectedBackground ;
//private boolean dsel = false ;
/**
* Creates a default table cell renderer.
*/
public JMCellRenderer ( Color[] color )
{
super () ;
backcolor = color ;
setOpaque ( true ) ;
setBorder ( noFocusBorder ) ;
}
/**
* Overrides <code>JComponent.setForeground</code> to assign
* the unselected-foreground color to the specified color.
*
* @param c set the foreground color to this value
*/
public void setForeground ( Color c )
{
super.setForeground ( c ) ;
unselectedForeground = c ;
}
/**
* Overrides <code>JComponent.setBackground</code> to assign
* the unselected-background color to the specified color.
*
* @param c set the background color to this value
*/
public void setBackground ( Color c )
{
super.setBackground ( c ) ;
unselectedBackground = c ;
}
/**
* Notification from the <code>UIManager</code> that the look and feel
* [L&F] has changed.
* Replaces the current UI object with the latest version from the
* <code>UIManager</code>.
*
* @see JComponent#updateUI
*/
public void updateUI ()
{
super.updateUI () ;
setForeground ( null ) ;
setBackground ( null ) ;
}
// implements javax.swing.table.TableCellRenderer
/**
*
* Returns the default table cell renderer.
*
* @param table the <code>JTable</code>
* @param value the value to assign to the cell at
* <code>[row, column]</code>
* @param isSelected true if cell is selected
* @param hasFocus true if cell has focus
* @param row the row of the cell to render
* @param column the column of the cell to render
* @return the default table cell renderer
*/
public Component getTableCellRendererComponent ( JTable table , Object value ,
boolean isSelected , boolean hasFocus , int row , int column )
{
if ( backcolor != null && backcolor.length > 0 )
{
setBackground ( backcolor[ row % backcolor.length ] ) ;
}
if ( isSelected )
{
super.setForeground ( table.getSelectionForeground () ) ;
super.setBackground ( table.getSelectionBackground () ) ;
}
else
{
super.setForeground ( ( unselectedForeground != null ) ? unselectedForeground
: table.getForeground () ) ;
super.setBackground ( ( unselectedBackground != null ) ? unselectedBackground
: table.getBackground () ) ;
}
setFont ( table.getFont () ) ;
if ( hasFocus )
{
setBorder ( UIManager.getBorder ( "Table.focusCellHighlightBorder" ) ) ;
if ( !isSelected && table.isCellEditable ( row , column ) )
{
Color col ;
col = UIManager.getColor ( "Table.focusCellForeground" ) ;
if ( col != null )
{
super.setForeground ( col ) ;
}
col = UIManager.getColor ( "Table.focusCellBackground" ) ;
if ( col != null )
{
super.setBackground ( col ) ;
}
}
}
else
{
setBorder ( noFocusBorder ) ;
}
setValue ( value ) ;
return this ;
}
/*
* The following methods are overridden as a performance measure to
* to prune code-paths are often called in the case of renders
* but which we know are unnecessary. Great care should be taken
* when writing your own renderer to weigh the benefits and
* drawbacks of overriding methods like these.
*/
/**
* Overridden for performance reasons.
* See the <a href="#override">Implementation Note</a>
* for more information.
*/
public boolean isOpaque ()
{
Color back = getBackground () ;
Component p = getParent () ;
if ( p != null )
{
p = p.getParent () ;
}
// p should now be the JTable.
boolean colorMatch = ( back != null ) && ( p != null ) &&
back.equals ( p.getBackground () ) &&
p.isOpaque () ;
return!colorMatch && super.isOpaque () ;
}
/**
* Sets the <code>String</code> object for the cell being rendered to
* <code>value</code>.
*
* @param value the string value for this cell; if value is
* <code>null</code> it sets the text value to an empty string
* @see JLabel#setText
*
*/
protected void setValue ( Object value )
{
setText ( ( value == null ) ? "" : ((JMVal)value).getStringValue() ) ;
}
// /**
// * A subclass of <code>DefaultTableCellRenderer</code> that
// * implements <code>UIResource</code>.
// * <code>DefaultTableCellRenderer</code> doesn't implement
// * <code>UIResource</code>
// * directly so that applications can safely override the
// * <code>cellRenderer</code> property with
// * <code>DefaultTableCellRenderer</code> subclasses.
// * <p>
// * <strong>Warning:</strong>
// * Serialized objects of this class will not be compatible with
// * future Swing releases. The current serialization support is
// * appropriate for short term storage or RMI between applications running
// * the same version of Swing. As of 1.4, support for long term storage
// * of all JavaBeans<sup><font size="-2">TM</font></sup>
// * has been added to the <code>java.beans</code> package.
// * Please see {@link java.beans.XMLEncoder}.
// */
// public static class UIResource extends DefaultTableCellRenderer
// implements javax.swing.plaf.UIResource
// {
// }
//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -