package jas.plot;
import jas.util.border.ShadowBorder;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
public class PlotComponent extends JComponent
{
public PlotComponent()
{
super();
}
public PlotComponent(LayoutManager layout)
{
super();
setLayout(layout);
}
public void paintComponent(final Graphics g)
{
if (paintBackground && !PrintHelper.isPrinting())
{
// paint the background of the component, not the border
Insets i = getInsets();
g.setColor(getBackground());
g.fillRect(i.left,i.top,
getWidth()-i.left-i.right,
getHeight()-i.top-i.bottom);
}
}
public void setBackground(Color bg)
{
super.setBackground(bg);
paintBackground = bg != null;
}
public boolean isPaintingBackground()
{
return paintBackground;
}
/**
* Sets the border to one of the standard types
* @param type One of NONE, BEVEL_IN, BEVEL_OUT, ETCHED, LINE, SHADOW
*/
public void setBorderType(int type)
{
setBorder(createBorder(type));
}
/**
* Gets the border if it is one of the standard types
* @return One of NONE, BEVEL_IN, BEVEL_OUT, ETCHED, LINE, SHADOW, OTHER
*/
public int getBorderType()
{
return getBorderType(getBorder());
}
/**
* Given a border type will return a suitable border
*/
static Border createBorder(int type)
{
switch (type)
{
case BEVEL_IN:
return BorderFactory.createLoweredBevelBorder();
case BEVEL_OUT:
return BorderFactory.createRaisedBevelBorder();
case ETCHED:
return BorderFactory.createEtchedBorder();
case SHADOW:
return ShadowBorder.createShadowBorder();
case LINE:
return BorderFactory.createLineBorder(Color.black);
case NONE:
case OTHER:
default:
return null;
}
}
static int getBorderType(Border b)
{
if (b == null) return NONE;
// the three BorderFactory methods below return shared
// border objects (canonical static instances)
if (b == BorderFactory.createLoweredBevelBorder()) return BEVEL_IN;
if (b == BorderFactory.createRaisedBevelBorder()) return BEVEL_OUT;
if (b == BorderFactory.createEtchedBorder()) return ETCHED;
// BorderFactory.createLineBorder() returns a new instance of LineBorder each time
if (b instanceof LineBorder) return LINE;
if (b instanceof ShadowBorder) return SHADOW;
return OTHER;
}
public final static int OTHER = -1;
public final static int NONE = 0;
public final static int BEVEL_IN = 1;
public final static int BEVEL_OUT = 2;
public final static int ETCHED = 3;
public final static int LINE = 4;
public final static int SHADOW = 5;
private boolean paintBackground;
}