/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tiny Look and Feel * * (C) Copyright 2003 - 2007 Hans Bickel * * For
* licensing information and credits, please refer to the * comment in file
* de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
package de.muntjak.tinylookandfeel;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JRadioButton;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalRadioButtonUI;
/**
* TinyRadioButtonUI
*
* @version 1.0
* @author Hans Bickel
*/
@SuppressWarnings (
{ "all" } )
public class TinyRadioButtonUI extends MetalRadioButtonUI
{
Component c;
/** the only instance of the radiobuttonUI */
private static final TinyRadioButtonUI radioButtonUI = new TinyRadioButtonUI ();
/* the only instance of the stroke for the focus */
private static BasicStroke focusStroke = new BasicStroke ( 1.0f,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 1.0f, new float []
{ 1.0f, 1.0f }, 0.0f );
/* the only instance of the radiobutton icon */
private static TinyRadioButtonIcon radioButton;
/**
* Creates the singleton for the UI
*
* @see javax.swing.plaf.ComponentUI#createUI(JComponent)
*/
public static ComponentUI createUI ( JComponent c )
{
if ( c instanceof JRadioButton )
{
JRadioButton jb = ( JRadioButton ) c;
jb.setRolloverEnabled ( true );
}
return radioButtonUI;
}
/**
* Installs the icon for the UI
*
* @see javax.swing.plaf.ComponentUI#installUI(JComponent)
*/
public void installUI ( JComponent c )
{
super.installUI ( c );
icon = getRadioButton ();
if ( !Theme.buttonEnter [ Theme.style ] )
return;
if ( !c.isFocusable () )
return;
InputMap km = ( InputMap ) UIManager.get ( getPropertyPrefix ()
+ "focusInputMap" );
if ( km != null )
{
km.put ( KeyStroke.getKeyStroke ( KeyEvent.VK_ENTER, 0, false ),
"pressed" );
km.put ( KeyStroke.getKeyStroke ( KeyEvent.VK_ENTER, 0, true ),
"released" );
}
}
/**
* Returns the skinned Icon
*
* @return TinyRadioButtonIcon
*/
protected TinyRadioButtonIcon getRadioButton ()
{
if ( radioButton == null )
radioButton = new TinyRadioButtonIcon ();
return radioButton;
}
/**
* Paints the focus for the radiobutton
*
* @see javax.swing.plaf.metal.MetalRadioButtonUI#paintFocus(java.awt.Graphics,
* java.awt.Rectangle, java.awt.Dimension)
*/
protected void paintFocus ( Graphics g, Rectangle t, Dimension arg2 )
{
if ( !Theme.buttonFocus [ Theme.style ] )
return;
Graphics2D g2d = ( Graphics2D ) g;
g2d.setColor ( Color.black );
g2d.setStroke ( focusStroke );
int x1 = t.x - 1;
int y1 = t.y - 1;
int x2 = x1 + t.width + 1;
int y2 = y1 + t.height + 1;
g2d.drawLine ( x1, y1, x2, y1 );
g2d.drawLine ( x1, y1, x1, y2 );
g2d.drawLine ( x1, y2, x2, y2 );
g2d.drawLine ( x2, y1, x2, y2 );
}
}