import java.awt.*;
/**
* This class implments a label control by subclassing Canvas.
*/
public class CustomLabel extends
Canvas {
private String text; // The text to be displayed.
private Insets margins; // determines size of margins
private FontMetrics fm; // metrics for current font
/**
* Construct a CustomLabel object that displays the specified text.
* @param text text to be displayed.
*/
public CustomLabel(String text) {
this.text = text;
margins = new Insets(4,4,4,4);
} // setText(String)
/**
* Sets the font for this object.
*/
public void setFont(Font f) {
super.setFont(f);
fm = getFontMetrics(f);
} // setFont(Font)
/**
* Notifies the Component that it has been added to a container
* and if a peer is required, it should be created.
* This method should be called by Container.add, and not by user
* code directly.
* @see #removeNotify
*/
public void addNotify() {
super.addNotify();
fm = getFontMetrics(getFont());
} // addNotify()
/**
* Returns the minimum size that this component must be to paint
* itself properly.
*/
public Dimension minimumSize() {
int width = margins.left + fm.stringWidth(text) + margins.right;
int height = margins.top + fm.getHeight() + margins.bottom;
return new Dimension(width, height);
} // minimumSize()
/**
* Returns the preferred size for this component.
*/
public Dimension preferredSize() {
return minimumSize();
} // preferredSize()
/**
* Paint this label.
*/
public void paint(Graphics g) {
super.paint(g);
g.setFont(getFont());
g.setColor(getForeground());
g.drawString(text, margins.left, margins.top+fm.getHeight());
} // paint(Graphics)
/**
* Get the text displayed by this object.
*/
public String getText() {
return text;
} // getText()
/**
* Set the text displayed by this object.
* @param text text to be displayed.
*/
public void setText(String text) {
this.text = text;
} // setText(String)
} // class CustomLabel