/* * $Id$ * * Copyright 2006 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * 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, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ package org.jdesktop.swingx; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.font.TextAttribute; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.Box; import javax.swing.JComponent; import org.jdesktop.swingx.action.AbstractActionExt; import org.jdesktop.swingx.painter.AbstractPainter; import org.jdesktop.swingx.painter.AlphaPainter; import org.jdesktop.swingx.painter.CompoundPainter; import org.jdesktop.swingx.painter.MattePainter; import org.jdesktop.swingx.painter.ShapePainter; import com.jhlabs.image.BlurFilter; /** * Base test class for JXLabel related code and issues. * * @author rah003 */ @SuppressWarnings("nls") public class JXLabelVisualCheck extends InteractiveTestCase { static Logger log = Logger.getAnonymousLogger(); public static void main(String[] args) { JXLabelVisualCheck test = new JXLabelVisualCheck(); try { test.runInteractiveTests("interactiveUnderlinedFontWithWrapping"); } catch (Exception e) { e.printStackTrace(); } } /** * Example of how-to apply filters to the label's foreground. */ @SuppressWarnings("unchecked") public void interactiveFancyFilter() { JXLabel label = new JXLabel("that's the real text"); label.setFont(new Font("SansSerif", Font.BOLD, 80)); AbstractPainter<?> fg = new MattePainter(Color.RED); fg.setFilters(new BlurFilter()); label.setForegroundPainter(fg); JXFrame frame = wrapInFrame(label, "fancy filter"); show(frame,400, 400); } /** * Issue #??-swingx: default foreground painter not guaranteed after change. * * JXLabel restore default foreground painter. * Sequence: * compose the default with a transparent overlay * try to reset to default * try to compose the overlay again. */ public void interactiveRestoreDefaultForegroundPainter() { JComponent box = Box.createVerticalBox(); final JXLabel foreground = new JXLabel( "setup: compound - default and overlay "); ShapePainter shapePainter = new ShapePainter(); final AlphaPainter<?> alpha = new AlphaPainter<Object>(); alpha.setAlpha(0.2f); alpha.setPainters(shapePainter); CompoundPainter<?> compound = new CompoundPainter<Object>(foreground .getForegroundPainter(), alpha); foreground.setForegroundPainter(compound); box.add(foreground); Action action = new AbstractActionExt("reset default foreground") { boolean reset; public void actionPerformed(ActionEvent e) { if (reset) { CompoundPainter<?> painter = new CompoundPainter<Object>(alpha, foreground.getForegroundPainter()); foreground.setForegroundPainter(painter); } else { // try to reset to default foreground.setForegroundPainter(null); } reset = !reset; } }; JXFrame frame = wrapInFrame(box, "foreground painters"); addAction(frame, action); frame.pack(); frame.setVisible(true); } /** * Issue #1330-swingx: underlined font does not retain underline during wrapping. */ public void interactiveUnderlinedFontWithWrapping() { final JXLabel label = new JXLabel("A really long sentence to display the text wrapping features of JXLabel."); // when lineWrap is true, can't see underline effects // when lineWrap is false, underline is ok label.setLineWrap(true); label.setBounds(31, 48, 91, 18); // set font underline Map<TextAttribute, Integer> map = new HashMap<TextAttribute, Integer>(); map.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON); label.setFont(label.getFont().deriveFont(map)); final JXFrame frame = wrapInFrame(label, "Underlined Font with wrapping"); addAction(frame, new AbstractAction("Toggle wrapping") { @Override public void actionPerformed(ActionEvent e) { label.setLineWrap(!label.isLineWrap()); frame.repaint(); } }); frame.pack(); frame.setVisible(true); } /** * Issue #978: Setting background color has no effect */ public void interactiveBackgroundColorSetting() { final JXLabel label = new JXLabel("A simple label."); label.setOpaque(true); label.setBackground(Color.CYAN); showInFrame(label, "Background Color Check"); } /** * Ensure background painter is always painted. */ public void interactiveBackgroundPainter() { JComponent box = Box.createVerticalBox(); ShapePainter shapePainter = new ShapePainter(); JXLabel opaqueTrue = new JXLabel("setup: backgroundPainter, opaque = true"); opaqueTrue.setOpaque(true); opaqueTrue.setBackgroundPainter(shapePainter); box.add(opaqueTrue); JXLabel opaqueFalse = new JXLabel("setup: backgroundPainter, opaque = false"); opaqueFalse.setOpaque(false); opaqueFalse.setBackgroundPainter(shapePainter); box.add(opaqueFalse); JXLabel opaqueUnchanged = new JXLabel("setup: backgroundPainter, opaque = unchanged"); opaqueUnchanged.setBackgroundPainter(shapePainter); box.add(opaqueUnchanged); showInFrame(box, "background painters"); } }