/* * $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.busylabel; import static org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.util.Dictionary; import java.util.Hashtable; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.SwingUtilities; import org.jdesktop.application.Application; import org.jdesktop.beansbinding.BeanProperty; import org.jdesktop.beansbinding.Binding; import org.jdesktop.beansbinding.Bindings; import org.jdesktop.beansbinding.ELProperty; import org.jdesktop.swingx.JXBusyLabel; import org.jdesktop.swingx.JXPanel; import org.jdesktop.swingx.VerticalLayout; import org.jdesktop.swingx.binding.FactorConverter; import org.jdesktop.swingx.painter.MattePainter; import org.jdesktop.swingx.util.PaintUtils; import com.sun.swingset3.DemoProperties; /** * A demo for the {@code JXBusyLabel}. * * @author Karl George Schaefer * @author rah003 (original JXBusyLabelDemoPanel) */ @DemoProperties( value = "JXBusyLabel Demo", category = "Decorators", description = "Demonstrates JXBusyLabel, a control for identifying busy periods", sourceFiles = { "org/jdesktop/swingx/demos/busylabel/BusyLabelDemo.java", "org/jdesktop/swingx/demos/busylabel/resources/BusyLabelDemo.properties", "org/jdesktop/swingx/demos/busylabel/resources/BusyLabelDemo.html", "org/jdesktop/swingx/demos/busylabel/resources/images/BusyLabelDemo.png" } ) //TODO demo incomplete @SuppressWarnings("serial") public class BusyLabelDemo extends JXPanel { private JXBusyLabel label; private JSlider speedSlider; private JSlider pointsSlider; private JSlider trailSlider; /** * 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(BusyLabelDemo.class.getAnnotation(DemoProperties.class).value()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new BusyLabelDemo()); frame.setPreferredSize(new Dimension(800, 600)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public BusyLabelDemo() { super(new BorderLayout()); createBusyLabelDemo(); Application.getInstance().getContext().getResourceMap(getClass()).injectComponents(this); bind(); } private void createBusyLabelDemo() { setBackgroundPainter(new MattePainter(PaintUtils.BLUE_EXPERIENCE, true)); //TODO uncomment when SwingX #999 is fixed // label = new JXBusyLabel(); label = new JXBusyLabel(new Dimension(50, 50)); label.setName("busyLabel"); label.getBusyPainter().setHighlightColor(new Color(44, 61, 146).darker()); label.getBusyPainter().setBaseColor(new Color(168, 204, 241).brighter()); label.setBusy(true); add(label, BorderLayout.NORTH); JPanel control = new JPanel(new VerticalLayout()); control.setName("controlPanel"); speedSlider = new JSlider(); speedSlider.setName("speedSlider"); Dictionary<Integer, JComponent> labels = new Hashtable<Integer, JComponent>(); //TODO can we fill these labels from the properties file? labels.put(1, new JLabel("Faster")); labels.put(50, new JLabel("Slower")); speedSlider.setLabelTable(labels); control.add(speedSlider); pointsSlider = new JSlider(); pointsSlider.setName("pointsSlider"); labels = new Hashtable<Integer, JComponent>(); //TODO can we fill these labels from the properties file? labels.put(1, new JLabel("Fewer Points")); labels.put(50, new JLabel("More Points")); pointsSlider.setLabelTable(labels); control.add(pointsSlider); trailSlider = new JSlider(); trailSlider.setName("trailSlider"); labels = new Hashtable<Integer, JComponent>(); //TODO can we fill these labels from the properties file? labels.put(1, new JLabel("Short Trail")); labels.put(20, new JLabel("Long Trail")); trailSlider.setLabelTable(labels); control.add(trailSlider); add(control); } @SuppressWarnings("unchecked") private void bind() { Binding b = Bindings.createAutoBinding(READ, speedSlider, BeanProperty.create("value"), label, BeanProperty.create("delay")); b.setConverter(new FactorConverter<Integer>(10)); b.bind(); Bindings.createAutoBinding(READ, pointsSlider, BeanProperty.create("value"), label, ELProperty.create("${busyPainter.points}")).bind(); Bindings.createAutoBinding(READ, trailSlider, BeanProperty.create("value"), label, ELProperty.create("${busyPainter.trailLength}")).bind(); } }