// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.widgets; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagLayout; import javax.swing.JLabel; import javax.swing.JPanel; import org.openstreetmap.josm.tools.GBC; import org.openstreetmap.josm.tools.ImageProvider; /** * A small user interface component that consists of an image label and * a fixed text content to the right of the image. * @since 5965 */ public class ImageLabel extends JPanel { private final JLabel imgLabel = new JLabel(); private final JLabel tf = new JLabel(); private int charCount; /** * Constructs a new {@code ImageLabel}. * @param img Image name (without extension) to find in {@code statusline} directory * @param tooltip Tooltip text to display * @param charCount Character count used to compute min/preferred size * @param background The background color */ public ImageLabel(String img, String tooltip, int charCount, Color background) { setLayout(new GridBagLayout()); setBackground(background); add(imgLabel, GBC.std().anchor(GBC.WEST).insets(0, 1, 1, 0)); setIcon(img); add(tf, GBC.std().fill(GBC.BOTH).anchor(GBC.WEST).insets(2, 1, 1, 0)); setToolTipText(tooltip); setCharCount(charCount); } /** * Sets the text to display. * @param t text to display */ public void setText(String t) { tf.setText(t); } /** * Sets the image to display. * @param img Image name (without extension) to find in {@code statusline} directory */ public void setIcon(String img) { imgLabel.setIcon(ImageProvider.get("statusline/" + img)); } @Override public Dimension getPreferredSize() { return new Dimension(25 + charCount*tf.getFontMetrics(tf.getFont()).charWidth('0'), super.getPreferredSize().height); } @Override public Dimension getMinimumSize() { return new Dimension(25 + charCount*tf.getFontMetrics(tf.getFont()).charWidth('0'), super.getMinimumSize().height); } /** * Returns the preferred char count. * @return the preferred char count * @since 10191 */ public final int getCharCount() { return charCount; } /** * Sets the preferred char count. * @param charCount the preferred char count * @since 10191 */ public final void setCharCount(int charCount) { this.charCount = charCount; } }