| Method from javax.swing.plaf.basic.BasicLabelUI Detail: |
public static ComponentUI createUI(JComponent c) {
if (System.getSecurityManager() != null) {
return SAFE_BASIC_LABEL_UI;
} else {
return labelUI;
}
}
|
public int getBaseline(JComponent c,
int width,
int height) {
super.getBaseline(c, width, height);
JLabel label = (JLabel)c;
String text = label.getText();
if (text == null || "".equals(text) || label.getFont() == null) {
return -1;
}
FontMetrics fm = label.getFontMetrics(label.getFont());
layout(label, fm, width, height);
return BasicHTML.getBaseline(label, paintTextR.y, fm.getAscent(),
paintTextR.width, paintTextR.height);
}
|
public Component.BaselineResizeBehavior getBaselineResizeBehavior(JComponent c) {
super.getBaselineResizeBehavior(c);
if (c.getClientProperty(BasicHTML.propertyKey) != null) {
return Component.BaselineResizeBehavior.OTHER;
}
switch(((JLabel)c).getVerticalAlignment()) {
case JLabel.TOP:
return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
case JLabel.BOTTOM:
return Component.BaselineResizeBehavior.CONSTANT_DESCENT;
case JLabel.CENTER:
return Component.BaselineResizeBehavior.CENTER_OFFSET;
}
return Component.BaselineResizeBehavior.OTHER;
}
Returns an enum indicating how the baseline of the component
changes as the size changes. |
public Dimension getMaximumSize(JComponent c) {
Dimension d = getPreferredSize(c);
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
d.width += v.getMaximumSpan(View.X_AXIS) - v.getPreferredSpan(View.X_AXIS);
}
return d;
}
|
public Dimension getMinimumSize(JComponent c) {
Dimension d = getPreferredSize(c);
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
d.width -= v.getPreferredSpan(View.X_AXIS) - v.getMinimumSpan(View.X_AXIS);
}
return d;
}
|
public Dimension getPreferredSize(JComponent c) {
JLabel label = (JLabel)c;
String text = label.getText();
Icon icon = (label.isEnabled()) ? label.getIcon() :
label.getDisabledIcon();
Insets insets = label.getInsets(viewInsets);
Font font = label.getFont();
int dx = insets.left + insets.right;
int dy = insets.top + insets.bottom;
if ((icon == null) &&
((text == null) ||
((text != null) && (font == null)))) {
return new Dimension(dx, dy);
}
else if ((text == null) || ((icon != null) && (font == null))) {
return new Dimension(icon.getIconWidth() + dx,
icon.getIconHeight() + dy);
}
else {
FontMetrics fm = label.getFontMetrics(font);
iconR.x = iconR.y = iconR.width = iconR.height = 0;
textR.x = textR.y = textR.width = textR.height = 0;
viewR.x = dx;
viewR.y = dy;
viewR.width = viewR.height = Short.MAX_VALUE;
layoutCL(label, fm, text, icon, viewR, iconR, textR);
int x1 = Math.min(iconR.x, textR.x);
int x2 = Math.max(iconR.x + iconR.width, textR.x + textR.width);
int y1 = Math.min(iconR.y, textR.y);
int y2 = Math.max(iconR.y + iconR.height, textR.y + textR.height);
Dimension rv = new Dimension(x2 - x1, y2 - y1);
rv.width += dx;
rv.height += dy;
return rv;
}
}
|
protected void installComponents(JLabel c) {
BasicHTML.updateRenderer(c, c.getText());
c.setInheritsPopupMenu(true);
}
|
protected void installDefaults(JLabel c) {
LookAndFeel.installColorsAndFont(c, "Label.background", "Label.foreground", "Label.font");
LookAndFeel.installProperty(c, "opaque", Boolean.FALSE);
}
|
protected void installKeyboardActions(JLabel l) {
int dka = l.getDisplayedMnemonic();
Component lf = l.getLabelFor();
if ((dka != 0) && (lf != null)) {
LazyActionMap.installLazyActionMap(l, BasicLabelUI.class,
"Label.actionMap");
InputMap inputMap = SwingUtilities.getUIInputMap
(l, JComponent.WHEN_IN_FOCUSED_WINDOW);
if (inputMap == null) {
inputMap = new ComponentInputMapUIResource(l);
SwingUtilities.replaceUIInputMap(l,
JComponent.WHEN_IN_FOCUSED_WINDOW, inputMap);
}
inputMap.clear();
inputMap.put(KeyStroke.getKeyStroke(dka, ActionEvent.ALT_MASK,
false), "press");
}
else {
InputMap inputMap = SwingUtilities.getUIInputMap
(l, JComponent.WHEN_IN_FOCUSED_WINDOW);
if (inputMap != null) {
inputMap.clear();
}
}
}
|
protected void installListeners(JLabel c) {
c.addPropertyChangeListener(this);
}
|
public void installUI(JComponent c) {
installDefaults((JLabel)c);
installComponents((JLabel)c);
installListeners((JLabel)c);
installKeyboardActions((JLabel)c);
}
|
protected String layoutCL(JLabel label,
FontMetrics fontMetrics,
String text,
Icon icon,
Rectangle viewR,
Rectangle iconR,
Rectangle textR) {
return SwingUtilities.layoutCompoundLabel(
(JComponent) label,
fontMetrics,
text,
icon,
label.getVerticalAlignment(),
label.getHorizontalAlignment(),
label.getVerticalTextPosition(),
label.getHorizontalTextPosition(),
viewR,
iconR,
textR,
label.getIconTextGap());
}
Forwards the call to SwingUtilities.layoutCompoundLabel().
This method is here so that a subclass could do Label specific
layout and to shorten the method name a little. |
static void loadActionMap(LazyActionMap map) {
map.put(new Actions(Actions.PRESS));
map.put(new Actions(Actions.RELEASE));
}
|
public void paint(Graphics g,
JComponent c) {
JLabel label = (JLabel)c;
String text = label.getText();
Icon icon = (label.isEnabled()) ? label.getIcon() : label.getDisabledIcon();
if ((icon == null) && (text == null)) {
return;
}
FontMetrics fm = SwingUtilities2.getFontMetrics(label, g);
String clippedText = layout(label, fm, c.getWidth(), c.getHeight());
if (icon != null) {
icon.paintIcon(c, g, paintIconR.x, paintIconR.y);
}
if (text != null) {
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
v.paint(g, paintTextR);
} else {
int textX = paintTextR.x;
int textY = paintTextR.y + fm.getAscent();
if (label.isEnabled()) {
paintEnabledText(label, g, clippedText, textX, textY);
}
else {
paintDisabledText(label, g, clippedText, textX, textY);
}
}
}
}
Paint the label text in the foreground color, if the label
is opaque then paint the entire background with the background
color. The Label text is drawn by paintEnabledText() or
paintDisabledText(). The locations of the label parts are computed
by layoutCL. |
protected void paintDisabledText(JLabel l,
Graphics g,
String s,
int textX,
int textY) {
int accChar = l.getDisplayedMnemonicIndex();
Color background = l.getBackground();
g.setColor(background.brighter());
SwingUtilities2.drawStringUnderlineCharAt(l, g, s, accChar,
textX + 1, textY + 1);
g.setColor(background.darker());
SwingUtilities2.drawStringUnderlineCharAt(l, g, s, accChar,
textX, textY);
}
Paint clippedText at textX, textY with background.lighter() and then
shifted down and to the right by one pixel with background.darker(). |
protected void paintEnabledText(JLabel l,
Graphics g,
String s,
int textX,
int textY) {
int mnemIndex = l.getDisplayedMnemonicIndex();
g.setColor(l.getForeground());
SwingUtilities2.drawStringUnderlineCharAt(l, g, s, mnemIndex,
textX, textY);
}
Paint clippedText at textX, textY with the labels foreground color. |
public void propertyChange(PropertyChangeEvent e) {
String name = e.getPropertyName();
if (name == "text" || "font" == name || "foreground" == name) {
// remove the old html view client property if one
// existed, and install a new one if the text installed
// into the JLabel is html source.
JLabel lbl = ((JLabel) e.getSource());
String text = lbl.getText();
BasicHTML.updateRenderer(lbl, text);
}
else if (name == "labelFor" || name == "displayedMnemonic") {
installKeyboardActions((JLabel) e.getSource());
}
}
|
protected void uninstallComponents(JLabel c) {
BasicHTML.updateRenderer(c, "");
}
|
protected void uninstallDefaults(JLabel c) {
}
|
protected void uninstallKeyboardActions(JLabel c) {
SwingUtilities.replaceUIInputMap(c, JComponent.WHEN_FOCUSED, null);
SwingUtilities.replaceUIInputMap(c, JComponent.WHEN_IN_FOCUSED_WINDOW,
null);
SwingUtilities.replaceUIActionMap(c, null);
}
|
protected void uninstallListeners(JLabel c) {
c.removePropertyChangeListener(this);
}
|
public void uninstallUI(JComponent c) {
uninstallDefaults((JLabel)c);
uninstallComponents((JLabel)c);
uninstallListeners((JLabel)c);
uninstallKeyboardActions((JLabel)c);
}
|