001: /*
002: * Copyright (c) 2004 JETA Software, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without modification,
005: * are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JETA Software nor the names of its contributors may
015: * be used to endorse or promote products derived from this software without
016: * specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
021: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
022: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
023: * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
024: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
025: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
026: * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: */
029:
030: package com.jeta.forms.components.label;
031:
032: import java.awt.Graphics;
033: import java.awt.Graphics2D;
034: import java.awt.Rectangle;
035: import java.awt.RenderingHints;
036:
037: import javax.swing.JLabel;
038:
039: import com.jeta.forms.gui.effects.Paintable;
040: import com.jeta.forms.gui.effects.Painter;
041:
042: /**
043: * A standard JLabel that also supports anti-aliased fonts as well as background
044: * effects such as a texture or gradient.
045: *
046: * @author Jeff Tassin
047: */
048: public class JETALabel extends JLabel implements Paintable {
049: /**
050: * Responsible for rendering the fill background pattern.
051: */
052: private Painter m_painter;
053:
054: /**
055: * Used for rendering the painter.
056: */
057: private Rectangle m_bounds;
058:
059: /**
060: * Flag that indicates if the font in this label is anti-aliased.
061: */
062: private boolean m_antialiased = false;
063:
064: /**
065: * Default <code>JETALabel</code> constructor.
066: */
067: public JETALabel() {
068: }
069:
070: /**
071: * Creates a new JETALabel with the specified text.
072: *
073: * @param txt
074: * the text to assign to the label.
075: */
076: public JETALabel(String txt) {
077: super (txt);
078: }
079:
080: /**
081: * Returns if this the text in this label is rendered using an anti-aliased
082: * effect.
083: *
084: * @return true if this text in this label is anti-aliased.
085: */
086: public boolean isAntiAliased() {
087: return m_antialiased;
088: }
089:
090: /**
091: * Override paint to provide background fill.
092: *
093: * @param g
094: * the <code>Graphics</code> context in which to paint
095: */
096: public void paint(Graphics g) {
097: if (m_painter != null) {
098: if (m_bounds == null)
099: m_bounds = new Rectangle();
100:
101: m_bounds.setBounds(0, 0, getWidth(), getHeight());
102: m_painter.paint(this , g, m_bounds);
103: }
104: super .paint(g);
105: }
106:
107: /**
108: * Override paintComponent to provide anti-aliased rendering of the label
109: * font.
110: *
111: * @param g
112: * the <code>Graphics</code> context in which to paint
113: */
114: public void paintComponent(Graphics g) {
115: if (isAntiAliased()) {
116: Graphics2D g2d = (Graphics2D) g;
117:
118: g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
119: RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
120: }
121: super .paintComponent(g);
122: }
123:
124: /**
125: * Sets the flag for this label that determines if the text is rendered
126: * using an anti-aliased effect.
127: *
128: * @param aa
129: * set to true if this text in this label should be anti-aliased.
130: */
131: public void setAntiAliased(boolean aa) {
132: m_antialiased = aa;
133: }
134:
135: /**
136: * Sets the painter responsible for any background fill effect.
137: *
138: * @param p
139: * the painter to set.
140: */
141: public void setBackgroundPainter(Painter p) {
142: m_painter = p;
143: if (p != null)
144: setOpaque(false);
145: }
146: }
|