• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • Ron McLeod
  • Jeanne Boyarsky
  • Paul Clapham
Sheriffs:
  • Liutauras Vilda
  • Henry Wong
  • Devaka Cooray
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • Al Hobbs
  • Carey Brown
Bartenders:
  • Piet Souris
  • Mikalai Zaikin
  • Himai Minh

JComponent Color

 
Greenhorn
Posts: 20
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I am trying to create a custom Label component
I am unable to find out
1. why this changes the default look and feel font color to black
2. though i set the color using setColor explicitly, it doesn't seem to change
thank you
[code]
import java.awt.*;
import java.awt.font.*;
import java.text.*;
import javax.swing.*;
public class JMultilineLabel extends JComponent
{
private String text;
private Color color;
private Insets margin = new Insets(0,0,0,0);
private int maxWidth = Integer.MAX_VALUE;
private boolean justify;
private final FontRenderContext frc = new FontRenderContext(null, false, false);
private void morph()
{
revalidate();
repaint();
}
public String getText()
{
return text;
}
public void setText(String text)
{
String old = this.text;
this.text = text;
firePropertyChange("text", old, this.text);
if ((old == null) ? text!=null : !old.equals(text))
morph();
}
public void setColor(Color color) {
Color old = this.getForeground();
this.setForeground(color);
firePropertyChange("foreground", old, this.getForeground());
if (!color.equals(this.getForeground()))
{
}
}
public int getMaxWidth()
{
return maxWidth;
}
public void setMaxWidth(int maxWidth)
{
if (maxWidth <= 0)
throw new IllegalArgumentException();
int old = this.maxWidth;
this.maxWidth = maxWidth;
firePropertyChange("maxWidth", old, this.maxWidth);
if (old != this.maxWidth)
morph();
}
public boolean isJustified()
{
return justify;
}
public void setJustified(boolean justify)
{
boolean old = this.justify;
this.justify = justify;
firePropertyChange("justified", old, this.justify);
if (old != this.justify)
repaint();
}
public Dimension getPreferredSize()
{
return paintOrGetSize(null, getMaxWidth());
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
paintOrGetSize((Graphics2D)g, getWidth());
}
private Dimension paintOrGetSize(Graphics2D g, int width)
{
Insets insets = getInsets();
width -= insets.left + insets.right + margin.left + margin.right;
float w = insets.left + insets.right + margin.left + margin.right;
float x = insets.left + margin.left, y=insets.top + margin.top;
if (width > 0 && text != null && text.length() > 0)
{
AttributedString as = new AttributedString(getText());
as.addAttribute(TextAttribute.FONT, getFont());
AttributedCharacterIterator aci = as.getIterator();
LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc);
float max = 0;
while (lbm.getPosition() < aci.getEndIndex())
{
TextLayout textLayout = lbm.nextLayout(width);
if (g != null && isJustified() && textLayout.getVisibleAdvance() > 0.80 * width) textLayout = textLayout.getJustifiedLayout(width); if (g != null) textLayout.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic