alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
** A simple Label widget.
** Copyright (c) 1997 by Timothy Gerard Endres
** 
** This program is free software.
** 
** You may redistribute it and/or modify it under the terms of the GNU
** General Public License as published by the Free Software Foundation.
** Version 2 of the license should be included with this distribution in
** the file LICENSE, as well as License.html. If the license is not
** included	with this distribution, you may find a copy at the FSF web
** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.
**
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
** REDISTRIBUTION OF THIS SOFTWARE. 
** 
*/

package com.ice.widget;

import java.awt.*;
import java.awt.event.*;

public class
SimpleLabel extends Component
		implements FocusListener
	{
	protected String  	label;
	protected int		labelWidth;
	protected int		labelHeight;

	private boolean		kludgeStyle;
	private int			styleToKludge;

	protected int		vMargin;
	protected int		hMargin;
	protected int		borderWidth;

	protected int		fontHeight;
	protected int		fontAscent;
	protected int		fontDescent;
	protected int		fontLeading;

	protected Color		borderColor;
	protected Dimension	mDim, pDim;


	public
	SimpleLabel( String label )
		{
		super();

		this.borderWidth = 0;
		this.borderColor = Color.black;

		this.kludgeStyle = false;
		this.styleToKludge = 0;

		this.hMargin = 2;
		this.vMargin = 0;

		this.labelWidth = 0;
		this.fontHeight = 0;
		this.fontAscent = 0;
		this.fontDescent = 0;

		this.label = label;
		}
	
	public String
	getText()
		{
		return this.label;
		}

	public void
	setText( String text )
		{
		this.label = text;
		this.repaint();
		}

	public void
	setStyle( int style )
		{
		Font font = this.getFont();

		if ( font != null ) // in case we're not graphics-ed yet.
			{
			Font newFont = new
				Font( font.getName(), style, font.getSize() );
		
			this.setFont( newFont );
			this.kludgeStyle = false;
			}
		else
			{
			this.kludgeStyle = true;
			this.styleToKludge = style;
			}
		}

	public void
	setBorderWidth( int width )
		{
		this.borderWidth = width;
		}

	public void
	setBorderColor( Color color )
		{
		this.borderColor = color;
		}

	public void
	setHMargin( int margin )
		{
		this.hMargin = margin;
		}

	public void
	setVMargin( int margin )
		{
		this.vMargin = margin;
		}

	public void
	update( Graphics updateG )
		{
		this.paint( updateG );
		}

	public synchronized void
	paint( Graphics g )
		{
		if ( ! this.isVisible() )
			return;

		int         i, x, y;
		int			xorig = 0;
		int			yorig = 0;
		Dimension   d = this.getSize();

		Color saveColor = g.getColor();

		// FILL	   UNDONE
		g.setColor( this.getBackground() );
		g.fillRect( xorig, yorig, xorig + d.width, yorig + d.height );

		// FRAME
		if ( this.borderWidth == 1 )
			{
			g.setColor( this.borderColor );
			g.drawLine( xorig,					yorig + (d.height-1),
						xorig + (d.width-1),	yorig + (d.height-1) );

			g.drawLine( xorig + (d.width-1),	yorig,
						xorig + (d.width-1),	yorig + (d.height-1) );

			g.drawLine( xorig,					yorig,
						xorig + (d.width-1),	yorig );

			g.drawLine( xorig,					yorig,
						xorig,					yorig + (d.height-1) );
			}
		else if ( this.borderWidth > 1 )
			{
			g.setColor( this.borderColor );
			// bottom
			g.fillRect( xorig,				yorig + (d.height - this.borderWidth),
						d.width,			this.borderWidth );
			// left
			g.fillRect( xorig,				yorig,
						this.borderWidth,	d.height );
			//top
			g.fillRect( xorig,				yorig,
						d.width,			this.borderWidth );
			//right
			g.fillRect( xorig + (d.width - this.borderWidth),	yorig,
						this.borderWidth,						d.height );
			}

		// TEXT
		// UNDONE - switch ( this.alignment )...
		//
		x = ( xorig + this.borderWidth + hMargin );
		y = ( yorig + d.height )
				- ( this.borderWidth + this.vMargin + this.fontDescent );

		g.setColor( this.getForeground() );

		g.setFont( this.getFont() );
		g.drawString( this.label, x, y );

        // Restore
		g.setColor( saveColor );
		}

	public void
	focusLost( FocusEvent event )
		{
		}

	public void
	focusGained( FocusEvent event )
		{
		this.transferFocus();
		}

	public boolean
	isFocusTraversable()
		{
		return false;
		}


	public void
	computeDimensions()
		{
		Dimension	sz = this.getSize();
		Graphics	g = this.getGraphics();
		FontMetrics fm = g.getFontMetrics( this.getFont() );

		this.fontHeight = fm.getHeight();
		this.fontDescent = fm.getDescent();
		this.fontAscent = fm.getAscent();

		this.labelWidth = fm.stringWidth( this.label ) + 1;

		this.mDim = new
			Dimension(	this.labelWidth + ( this.hMargin * 2 )
							+ ( this.borderWidth * 2),
						this.fontAscent + this.fontDescent
							+ ( this.vMargin * 2 )
							+ ( this.borderWidth * 2) );

		this.pDim = new
			Dimension( this.mDim.width, this.mDim.height );
		}

	public Dimension
	getPreferredSize()
		{
		return this.pDim;
		}

	public Dimension
	getMinimumSize()
		{
		return this.mDim;
		}

	public void
	addNotify()
		{
		super.addNotify();

		if ( this.kludgeStyle )
			{
			this.setStyle( this.styleToKludge );
			}

		computeDimensions();
		}

	}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.