/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2000 Blacksmith, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org */ package net.wotonomy.ui.swing.components; import javax.swing.JTextArea; import javax.swing.LookAndFeel; import javax.swing.text.Highlighter; /** * A custom JTextArea that looks and feels like a JLabel, but supports line * wrapping. This works a lot more like the IFC label component. NOTE: doesn't * support icons (yet). * * @author michael@mpowers.net * @author $Author: cgruber $ * @date $Date: 2006-02-18 18:19:05 -0500 (Sat, 18 Feb 2006) $ * @revision $Revision: 904 $ */ public class MultiLineLabel extends JTextArea { /** * Saves a reference to the original highlighter to enable/disable text * selection. */ protected Highlighter originalHighlighter; /* * Creates a MultiLineLabel instance with an empty string for the title. */ public MultiLineLabel() { super(); // turn on wrapping and disable editing and highlighting setLineWrap(true); setWrapStyleWord(true); setEditable(false); setSelectable(false); } /* * Creates a MultiLineLabel instance with the specified text. * * @param text The specified text. */ public MultiLineLabel(String text) { super(text); // turn on wrapping and disable editing and highlighting setLineWrap(true); setWrapStyleWord(true); setEditable(false); setSelectable(false); } /* * Overridden to look like a label. * * @param text The specified text. */ public void updateUI() { // got the implementation idea from usenet super.updateUI(); // turn on wrapping and disable editing and highlighting setLineWrap(true); setWrapStyleWord(true); setEditable(false); setSelectable(false); // Set the text area's border, colors and font to // that of a label LookAndFeel.installBorder(this, "Label.border"); LookAndFeel.installColorsAndFont(this, "Label.background", "Label.foreground", "Label.font"); } /** * Sets whether text is selectable. Default is non-selectable text. */ public void setSelectable(boolean selectable) { if (selectable) { setHighlighter(originalHighlighter); } else { originalHighlighter = getHighlighter(); setHighlighter(null); } } /** * Gets whether text is selectable. Default is non-selectable text. */ public boolean isSelectable() { return (getHighlighter() != null); } /** * Overridden to return false. */ public boolean isFocusTraversable() { return false; } }