/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.compiere.swing; import java.awt.Color; import java.awt.Component; import java.awt.Font; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.text.JTextComponent; import org.compiere.util.Language; /** * Label with Mnemonics interpretation * * @author Jorg Janke * @version $Id: CLabel.java,v 1.2 2006/07/30 00:52:24 jjanke Exp $ */ public class CLabel extends JLabel { /** * */ private static final long serialVersionUID = 3836688834452881595L; public static int DEFAULT_ALIGNMENT = Language.getLoginLanguage().isLeftToRight() ? JLabel.TRAILING : JLabel.LEADING; /** * Creates a <code>Label</code> instance with the specified * text, image, and horizontal alignment. * The label is centered vertically in its display area. * The text is on the trailing edge of the image. * * @param text The text to be displayed by the label. * @param icon The image to be displayed by the label. * @param horizontalAlignment One of the following constants * defined in <code>SwingConstants</code>: * <code>LEFT</code>, * <code>CENTER</code>, * <code>RIGHT</code>, * <code>LEADING</code> or * <code>TRAILING</code>. */ public CLabel (String text, Icon icon, int horizontalAlignment) { super (text, icon, horizontalAlignment); init(); } /** * Creates a <code>Label</code> instance with the specified * text and horizontal alignment. * The label is centered vertically in its display area. * * @param text The text to be displayed by the label. * @param horizontalAlignment One of the following constants * defined in <code>SwingConstants</code>: * <code>LEFT</code>, * <code>CENTER</code>, * <code>RIGHT</code>, * <code>LEADING</code> or * <code>TRAILING</code>. */ public CLabel (String text, int horizontalAlignment) { super(text, horizontalAlignment); init(); } /** * Creates a <code>Label</code> instance with the specified text. * The label is aligned against the leading edge of its display area, * and centered vertically. * * @param text The text to be displayed by the label. */ public CLabel (String text) { super(text, DEFAULT_ALIGNMENT); init(); } /** * Creates a <code>Label</code> instance with the specified * image and horizontal alignment. * The label is centered vertically in its display area. * * @param image The image to be displayed by the label. * @param horizontalAlignment One of the following constants * defined in <code>SwingConstants</code>: * <code>LEFT</code>, * <code>CENTER</code>, * <code>RIGHT</code>, * <code>LEADING</code> or * <code>TRAILING</code>. */ public CLabel (Icon image, int horizontalAlignment) { super (image, horizontalAlignment); init(); } /** * Creates a <code>Label</code> instance with the specified image. * The label is centered vertically and horizontally * in its display area. * * @param image The image to be displayed by the label. */ public CLabel (Icon image) { super (image, DEFAULT_ALIGNMENT); init(); } /** * Creates a <code>JLabel</code> instance with * no image and with an empty string for the title. * The label is centered vertically * in its display area. * The label's contents, once set, will be displayed on the leading edge * of the label's display area. */ public CLabel () { super("", DEFAULT_ALIGNMENT); init(); } /** * Creates a <code>Label</code> instance with the specified text. * The label is aligned against the leading edge of its display area, * and centered vertically. * * @param label The text to be displayed by the label. * @param toolTip The optional Tooltip text */ public CLabel (String label, String toolTip) { super (label, DEFAULT_ALIGNMENT); if (toolTip != null && toolTip.length() > 0) super.setToolTipText(toolTip); init(); } // CLabel /** * Trailing Label for Field * @param label label * @param field field */ public CLabel (String label, Component field) { this (label, TRAILING); setLabelFor(field); } // CLabel /** Mnemonic saved */ private char m_savedMnemonic = 0; /** * Common init */ private void init() { setFocusable (false); setOpaque(false); if (getToolTipText() == null) // force Tool Tip setToolTipText(getText()); } // init /** * Set Background * @param bg background */ public void setBackground (Color bg) { if (bg.equals(getBackground())) return; super.setBackground(bg); } // setBackground /** * Set Font to Bold * @param bold true bold false normal */ public void setFontBold (boolean bold) { Font font = getFont(); if (bold != font.isBold()) { font = new Font (font.getName(), bold ? Font.BOLD : Font.PLAIN, font.getSize()); setFont (font); } } // setFontBold /************************************************************************** * Set label text - if it includes &, the next character is the Mnemonic * @param mnemonicLabel Label containing Mnemonic */ public void setText (String mnemonicLabel) { String text = createMnemonic (mnemonicLabel); super.setText (text); if (text != null && getName() == null) setName(text); //workaround for focus accelerator issue if (getLabelFor() != null && getLabelFor() instanceof JTextComponent) { if ( m_savedMnemonic > 0) ((JTextComponent)getLabelFor()).setFocusAccelerator(m_savedMnemonic); else ((JTextComponent)getLabelFor()).setFocusAccelerator('\0'); } } // setText /** * Create Mnemonics of text containing "&". * Based on MS notation of &Help => H is Mnemonics * @param text test with Mnemonics * @return text w/o & * @see JLabel#setLabelFor(java.awt.Component) */ private String createMnemonic(String text) { m_savedMnemonic = 0; if (text == null) return text; int pos = text.indexOf('&'); if (pos != -1) // We have a nemonic { char ch = text.charAt(pos+1); if (ch != ' ') // &_ - is the & character { setDisplayedMnemonic(ch); setSavedMnemonic(ch); return text.substring(0, pos) + text.substring(pos+1); } } return text; } // createMnemonic /** * Set ReadWrite * @param rw enabled */ public void setReadWrite (boolean rw) { this.setEnabled(rw); } // setReadWrite /** * Set Label For * @param c component */ public void setLabelFor (Component c) { //reset old if any if (getLabelFor() != null && getLabelFor() instanceof JTextComponent) { ((JTextComponent)getLabelFor()).setFocusAccelerator('\0'); } super.setLabelFor (c); if (c.getName() == null) c.setName(getName()); //workaround for focus accelerator issue if (c instanceof JTextComponent) { if (m_savedMnemonic > 0) { ((JTextComponent)c).setFocusAccelerator(m_savedMnemonic); } } } // setLabelFor /** * @return Returns the savedMnemonic. */ public char getSavedMnemonic () { return m_savedMnemonic; } // getSavedMnemonic /** * @param savedMnemonic The savedMnemonic to set. */ public void setSavedMnemonic (char savedMnemonic) { m_savedMnemonic = savedMnemonic; } // getSavedMnemonic } // CLabel