/*
* IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
*
* http://izpack.org/
* http://izpack.codehaus.org/
*
* Copyright 2004 Klaus Bartz
*
* 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 com.izforge.izpack.gui;
import java.awt.Font;
import javax.swing.*;
/**
* <p>
* A label factory which can handle modified look like to present icons or present it not.
* </p>
*
* @author Klaus Bartz
*/
public class LabelFactory implements SwingConstants
{
private static boolean useLabelIcons = true;
private static float labelFontSizeVal = 1.0f;
private static Font customLabelFontObj = null;
/**
* Returns whether the factory creates labels with icons or without icons.
*
* @return whether the factory creates labels with icons or without icons
*/
public static boolean isUseLabelIcons()
{
return useLabelIcons;
}
/**
* Sets the use icon state.
*
* @param b flag for the icon state
*/
public static void setUseLabelIcons(boolean b)
{
useLabelIcons = b;
}
/**
* Returns the current label-font-size multiplier.
*
* @return the current label-font-size multiplier (or 1.0 if none
* has been entered).
*/
public static float getLabelFontSize()
{
return labelFontSizeVal;
}
/**
* Sets the label-font-size multiplier. If the value is not greater
* than zero or is greater than 5.0 then it will not be used.
*
* @param val label-font-size multiplier value to use.
*/
public static void setLabelFontSize(float val)
{
if (val > 0.0f && val <= 5.0f && val != labelFontSizeVal)
{
labelFontSizeVal = val;
final Font fontObj = (new JLabel()).getFont();
customLabelFontObj =
fontObj.deriveFont(fontObj.getSize2D() * val);
}
}
/**
* Returns a new JLabel with the horizontal alignment CENTER. If isUseLabelIcons is true, the
* given image will be set to the label, else an empty label returns.
*
* @param image the image to be used as label icon
* @return new JLabel with the given parameters
*/
public static JLabel create(Icon image)
{
return (create(image, CENTER));
}
/**
* Returns a new JLabel with the given horizontal alignment. If isUseLabelIcons is true, the
* given image will be set to the label, else an empty label returns.
*
* @param image the image to be used as label icon
* @param horizontalAlignment horizontal alignment of the label
* @return new JLabel with the given parameters
*/
public static JLabel create(Icon image, int horizontalAlignment)
{
return (create(null, image, horizontalAlignment));
}
/**
* Returns a new JLabel with the horizontal alignment CENTER.
*
* @param text the text to be set
* @return new JLabel with the given parameters
*/
public static JLabel create(String text)
{
return (create(text, CENTER));
}
/**
* Returns a new JLabel or FullLineLabel with the horizontal alignment CENTER.
*
* @param text the text to be set
* @param isFullLine determines whether a FullLineLabel or a JLabel should be created
* @return new JLabel or FullLineLabel with the given parameters
*/
public static JLabel create(String text, boolean isFullLine)
{
return (create(text, CENTER, isFullLine));
}
/**
* Returns a new JLabel with the given horizontal alignment.
*
* @param text the text to be set
* @param horizontalAlignment horizontal alignment of the label
* @return new JLabel with the given parameters
*/
public static JLabel create(String text, int horizontalAlignment)
{
return (create(text, null, horizontalAlignment));
}
/**
* Returns a new JLabel or FullLineLabel with the given horizontal alignment.
*
* @param text the text to be set
* @param horizontalAlignment horizontal alignment of the label
* @param isFullLine determines whether a FullLineLabel or a JLabel should be created
* @return new JLabel or FullLineLabel with the given parameters
*/
public static JLabel create(String text, int horizontalAlignment, boolean isFullLine)
{
return (create(text, null, horizontalAlignment, isFullLine));
}
/**
* Returns a new JLabel with the given horizontal alignment. If isUseLabelIcons is true, the
* given image will be set to the label. The given text will be set allways to the label. It is
* allowed, that image and/or text are null.
*
* @param text the text to be set
* @param image the image to be used as label icon
* @param horizontalAlignment horizontal alignment of the label
* @return new JLabel with the given parameters
*/
public static JLabel create(String text, Icon image, int horizontalAlignment)
{
return (create(text, image, horizontalAlignment, false));
}
/**
* Returns a new JLabel or FullLineLabel with the given horizontal alignment. If isUseLabelIcons
* is true, the given image will be set to the label. The given text will be set allways to the
* label. It is allowed, that image and/or text are null.
*
* @param text the text to be set
* @param image the image to be used as label icon
* @param horizontalAlignment horizontal alignment of the label
* @param isFullLine determines whether a FullLineLabel or a JLabel should be created
* @return new JLabel or FullLineLabel with the given parameters
*/
public static JLabel create(String text, Icon image, int horizontalAlignment, boolean isFullLine)
{
JLabel retval = null;
if (image != null && isUseLabelIcons())
{
if (isFullLine)
{
retval = new FullLineLabel(image);
}
else
{
retval = new JLabel(image);
}
}
else
{
if (isFullLine)
{
retval = new FullLineLabel();
}
else
{
retval = new JLabel();
}
}
if (text != null)
{
retval.setText(text);
}
if (customLabelFontObj != null)
{
retval.setFont(customLabelFontObj);
}
retval.setHorizontalAlignment(horizontalAlignment);
return (retval);
}
/**
* This class is only needed to signal a different layout handling. There is no additonal
* functionality related to a JLabel. Only the needed constructors are implemented.
* A FullLineLabel gets from the IzPanelLayout as default a constraints for a full line.
* Therefore the width of this label do not determine the width of a column as a JLable
* it do.
*
* @author Klaus Bartz
*/
public static class FullLineLabel extends JLabel
{
/**
* Required (serializable)
*/
private static final long serialVersionUID = 2918265795390777147L;
/**
* Creates a <code>JLabel</code> instance with the specified image.
* The label is centered vertically and horizontally
* in its display area.
*
* @param image The image to be displayed by the label.
*/
public FullLineLabel(Icon image)
{
super(image);
}
/**
* Default constructor.
*/
public FullLineLabel()
{
super();
}
}
}