/* * $Id$ * * Copyright 2009 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.demos.xlabel; import static org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import org.jdesktop.beansbinding.BeanProperty; import org.jdesktop.beansbinding.Bindings; import org.jdesktop.swingx.JXLabel; import org.jdesktop.swingx.JXLabel.TextAlignment; import org.jdesktop.swingx.combobox.EnumComboBoxModel; import org.jdesktop.swingx.renderer.DefaultListRenderer; import org.jdesktop.swingx.renderer.StringValue; import org.jdesktop.swingx.renderer.StringValues; import org.jdesktop.swingxset.DefaultDemoPanel; import com.sun.swingset3.DemoProperties; /** * A demo for the {@code JXLabel}. * * @author Karl George Schaefer * @author rah003 (original JXLabelDemo) * @author Richard Bair (original JXLabelDemo) */ @DemoProperties( value = "JXLabel Demo", category = "Controls", description = "Demonstrates JXLabel, a Painter-enabled multiline label component.", sourceFiles = { "org/jdesktop/swingx/demos/xlabel/XLabelDemo.java", "org/jdesktop/swingx/demos/xlabel/resources/XLabelDemo.properties", "org/jdesktop/swingx/demos/xlabel/resources/XLabelDemo.html", "org/jdesktop/swingx/demos/xlabel/resources/images/XLabelDemo.png", "org/jdesktop/swingx/demos/xlabel/resources/images/exit.png" } ) @SuppressWarnings("serial") public class XLabelDemo extends DefaultDemoPanel { private JXLabel label; private JCheckBox lineWrap; private JComboBox alignments; private JButton rotate; /** * main method allows us to run as a standalone demo. */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(XLabelDemo.class.getAnnotation(DemoProperties.class).value()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new XLabelDemo()); frame.setPreferredSize(new Dimension(800, 600)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } /** * {@inheritDoc} */ protected void createDemo() { setLayout(new BorderLayout()); setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); label = new JXLabel(); label.setName("contents"); add(label); JPanel p = new JPanel(); add(p, BorderLayout.SOUTH); lineWrap = new JCheckBox(); lineWrap.setName("lineWrap"); p.add(lineWrap); alignments = new JComboBox(new EnumComboBoxModel<TextAlignment>(TextAlignment.class)); alignments.setRenderer(new DefaultListRenderer(new StringValue() { public String getString(Object value) { String s = StringValues.TO_STRING.getString(value); if (s.length() > 1) { String lc = s.toLowerCase(); s = s.charAt(0) + lc.substring(1); } return s; } })); p.add(alignments); rotate = new JButton(); rotate.setName("rotate"); p.add(rotate); } /** * {@inheritDoc} */ protected void bind() { Bindings.createAutoBinding(READ, lineWrap, BeanProperty.create("selected"), label, BeanProperty.create("lineWrap")).bind(); Bindings.createAutoBinding(READ, alignments, BeanProperty.create("selectedItem"), label, BeanProperty.create("textAlignment")).bind(); //TODO build a converter to handle this via BeanBinding rotate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { label.setTextRotation((label.getTextRotation() + Math.PI / 16) % (2 * Math.PI)); } }); } }