All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jdesktop.swingx.demos.xlabel.XLabelDemo Maven / Gradle / Ivy

/* Copyright (c) 2004 Sun Microsystems, Inc. All Rights Reserved.
Copyright notice, list of conditions and disclaimer see LICENSE file
*/ 
package org.jdesktop.swingx.demos.xlabel;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.util.logging.Logger;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXFrame.StartPosition;
import org.jdesktop.swingx.JXLabel;
import org.jdesktop.swingx.JXLabel.TextAlignment;
import org.jdesktop.swingx.JXPanel;
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 swingset.AbstractDemo;

/**
 * A demo for the {@code JXLabel}.
 *
 * @author Karl George Schaefer
 * @author rah003 (original JXLabelDemo)
 * @author Richard Bair (original JXLabelDemo)
 * @author EUG https://github.com/homebeaver (reorg)
 */
//@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 AbstractDemo {

	private static final long serialVersionUID = -490251065325879942L;
	private static final Logger LOG = Logger.getLogger(XLabelDemo.class.getName());
	private static final String DESCRIPTION = "Demonstrates JXLabel, a Painter-enabled multiline label component.";

    /**
     * main method allows us to run as a standalone demo.
     * @param args params
     */
    public static void main(String[] args) {
    	// invokeLater method can be invoked from any thread
    	SwingUtilities.invokeLater( () -> {
    		// ...create UI here...
			JXFrame controller = new JXFrame("controller", exitOnClose);
			AbstractDemo demo = new XLabelDemo(controller);
			JXFrame frame = new JXFrame(DESCRIPTION, exitOnClose);
			frame.setStartPosition(StartPosition.CenterInScreen);
			//frame.setLocationRelativeTo(controller);
        	frame.getContentPane().add(demo);
        	frame.pack();
        	frame.setVisible(true);
			
			controller.getContentPane().add(demo.getControlPane());
			controller.pack();
			controller.setVisible(true);
    	});
    }

    private JXLabel label;
    
    /**
     * Constructor
     * 
     * @param frame controller Frame
     */
    public XLabelDemo(Frame frame) {
    	super(new BorderLayout());
    	frame.setTitle(getBundleString("frame.title", DESCRIPTION));
    	super.setPreferredSize(PREFERRED_SIZE);
    	super.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

        label = new JXLabel();
        label.setName("contents");
        label.setText(getBundleString("contents.text"));
        /*
         * BUG: contents.text= ... ==> die controller funcs 
         *  - label.setLineWrap
         *  - label.setTextAlignment
         * tuen nicht! TODO
         *  - label.setTextRotation aber schon
         */
        label.setIcon(getResourceAsIcon(getClass(), "resources/images/exit.png"));
        add(label);
        
        // FULL BLOCK to check the INACTIVE_CONTROL_TEXT_COLOR in Ocean
        // Block Color:
        // #999999 in STEEL, OCEAN, ...
        // #8e8f91 in Nimbus
        // #797c88 in Motif
        // #6d6d6d in Windows
        JLabel labelWithDisabledForeground = new JLabel("\u2588 Block Label With DisabledForeground");
        labelWithDisabledForeground.setEnabled(false);
        add(labelWithDisabledForeground, BorderLayout.NORTH);
    }

    private JCheckBox lineWrap;
    private JComboBox alignments;
    private JButton rotate;

    @Override
	public JXPanel getControlPane() {
    	JXPanel controller = new JXPanel();

        lineWrap = new JCheckBox();
        lineWrap.setName("lineWrap");
        lineWrap.setText(getBundleString("lineWrap.text", lineWrap));
        lineWrap.setSelected(Boolean.valueOf(getBundleString("lineWrap.selected")));
        label.setLineWrap(lineWrap.isSelected());
        lineWrap.addActionListener( ae -> {
            label.setLineWrap(lineWrap.isSelected());
            label.repaint();
        });
        controller.add(lineWrap);
        
        alignments = new JComboBox(new EnumComboBoxModel(TextAlignment.class));
        
        alignments.setRenderer(new DefaultListRenderer(new StringValue() {
            @Override
            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;
            }
        }));
        alignments.addActionListener( ae -> {
            LOG.info("ActionListener:"+ae);
            Object o = alignments.getSelectedItem();
            label.setTextAlignment((TextAlignment)o);
        });
        controller.add(alignments);

        rotate = new JButton();
        rotate.setName("rotate");
        rotate.setText(getBundleString("rotate.text", rotate));
        rotate.addActionListener( ae -> {
            label.setTextRotation((label.getTextRotation() + Math.PI / 16) % (2 * Math.PI));
        });
        controller.add(rotate);
        
        return controller;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy