org.uncommons.swing.ConfigurableLineBorder Maven / Gradle / Ivy
// ============================================================================
// Copyright 2006-2009 Daniel W. Dyer
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ============================================================================
package org.uncommons.swing;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.border.Border;
/**
* Border class that allows each of the four sides of the border to be enabled
* or disabled independently.
* @author Daniel Dyer
*/
public class ConfigurableLineBorder implements Border
{
private final boolean top;
private final boolean left;
private final boolean bottom;
private final boolean right;
private final int thickness;
private final Insets insets;
/**
* @param top Whether or not to draw the border on the top edge.
* @param left Whether or not to draw the border on the left edge.
* @param bottom Whether or not to draw the border on the bottom edge.
* @param right Whether or not to draw the border on the right edge.
* @param thickness The width (in pixels) of each side of the border.
*/
public ConfigurableLineBorder(boolean top,
boolean left,
boolean bottom,
boolean right,
int thickness)
{
this.top = top;
this.left = left;
this.bottom = bottom;
this.right = right;
this.thickness = thickness;
this.insets = new Insets(top ? thickness : 0,
left ? thickness : 0,
bottom ? thickness : 0,
right ? thickness : 0);
}
/**
* Renders borders for the specified component based on the configuration
* of this border object.
* @param component The component for which the border is painted.
* @param graphics A {@link Graphics} object to use for painting.
* @param x The X-coordinate of the top left point of the border rectangle.
* @param y The Y-coordinate of the top left point of the border rectangle.
* @param width The width of the border rectangle.
* @param height The height of the border rectangle.
*/
public void paintBorder(Component component,
Graphics graphics,
int x,
int y,
int width,
int height)
{
if (top)
{
graphics.fillRect(x, y, width, thickness);
}
if (bottom)
{
graphics.fillRect(x, y + height - thickness, width, thickness);
}
if (left)
{
graphics.fillRect(x, y, thickness, height);
}
if (right)
{
graphics.fillRect(x + width - thickness, y, thickness, height);
}
}
/**
* @param component The component for which the border is painted.
* @return Insets for the current border configuration.
*/
public Insets getBorderInsets(Component component)
{
return insets;
}
/**
* @return false
*/
public boolean isBorderOpaque()
{
return false;
}
}