Package com.bbn.openmap.util

Source Code of com.bbn.openmap.util.PaletteHelper

// **********************************************************************
//
// <copyright>
//
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/util/PaletteHelper.java,v $
// $RCSfile: PaletteHelper.java,v $
// $Revision: 1.2.2.2 $
// $Date: 2006/02/27 16:13:53 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.util;

/*  AWT & Schwing  */

import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.InternalFrameListener;

import com.bbn.openmap.Layer;

/**
* Helps create palette GUI widgets.
*/
public class PaletteHelper {

    /**
     * This class has only static methods, so there isn't any need to
     * instantiate an object.
     */
    private PaletteHelper() {}

    /**
     * Create a panel containing a checkbox.
     *
     * @param boxlabel the string to use for the box title
     * @param buttons the list of button names
     * @param checked the initial state of each checkbox item
     * @param al the actionlistener to invoke for a button. the
     *        actioncommand is set to a string containing the integer
     *        index of the button.
     * @return the JPanel the the buttons are placed in
     * @see javax.swing.AbstractButton#setActionCommand(String)
     * @see javax.swing.JCheckBox
     */
    public static JPanel createCheckbox(String boxlabel, String[] buttons,
                                        boolean[] checked, ActionListener al) {

        JPanel jp = createPaletteJPanel(boxlabel);
        for (int j = 0; j < buttons.length; j++) {
            JCheckBox jcb = new JCheckBox(buttons[j]);
            jcb.setActionCommand(Integer.toString(j));//index of
                                                      // checked
            if (al != null)
                jcb.addActionListener(al);
            jcb.setSelected(checked[j]);
            jp.add(jcb);
        }
        return jp;
    }

    /**
     * Create a panel containing a radiobox.
     *
     * @param boxlabel the string to use for the box title
     * @param buttons the list of button names
     * @param initiallySelected the index of the initially selected
     *        button. -1 for no button initially selected.
     * @param al the actionlistener to invoke for a button. the
     *        actioncommand is set to a string containing the integer
     *        index of the button.
     * @return the JPanel the the buttons are placed in
     * @see javax.swing.AbstractButton#setActionCommand(String)
     * @see javax.swing.ButtonGroup
     */
    public static JPanel createRadiobox(String boxlabel, String[] buttons,
                                        int initiallySelected, ActionListener al) {

        JPanel jp = createPaletteJPanel(boxlabel);

        ButtonGroup buttongroup = new ButtonGroup();

        for (int j = 0; j < buttons.length; j++) {
            JRadioButton jrb = new JRadioButton(buttons[j]);
            jrb.setActionCommand("" + j);//index in list
            jp.add(jrb);
            buttongroup.add(jrb);
            if (al != null) {
                jrb.addActionListener(al);
            }
            if (j == initiallySelected) {
                jrb.setSelected(true);
            } else {
                jrb.setSelected(false);
            }
        }
        return jp;
    }

    /**
     * Create a panel that does horizontal layout
     *
     * @param title the title of the panel (null allowed)
     * @return the panel that got created
     */
    public static JPanel createHorizontalPanel(String title) {
        JPanel panel = new JPanel();
        //      panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.setLayout(new GridLayout(1, 0));
        if (title != null) {
            panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
                    title));
        } else {
            panel.setBorder(BorderFactory.createEtchedBorder());
        }
        return panel;
    }

    /**
     * Create a panel that does vertical layout
     *
     * @param title the title of the panel (null allowed)
     * @return the panel that got created
     */
    public static JPanel createVerticalPanel(String title) {
        JPanel panel = new JPanel();
        //      panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setLayout(new GridLayout(0, 1));
        if (title != null) {
            panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
                    title));
        } else {
            panel.setBorder(BorderFactory.createEtchedBorder());
        }
        return panel;
    }

    /**
     * Create a panel with a border and title
     *
     * @param title the title of the panel (null allowed)
     * @return the panel that got created
     */
    public static JPanel createPaletteJPanel(String title) {
        JPanel panel = new JPanel();

        if (title != null) {
            panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
                    title));
        } else {
            panel.setBorder(BorderFactory.createEtchedBorder());
        }

        panel.setLayout(new GridLayout(0, 1));
        return panel;
    }

    /**
     * Create and add a text entry field to a JComponent.
     *
     * @param title the title of the frame
     * @param entry the name of the entry field
     * @param parent the component to add ourselves to
     * @return the text field
     */
    public static JTextField createTextEntry(String title, String entry,
                                             JComponent parent) {

        JPanel pal = PaletteHelper.createHorizontalPanel(null);
        JLabel label = new JLabel(title);
        label.setHorizontalTextPosition(JLabel.RIGHT);
        JTextField tf = new JTextField(entry);
        label.setLabelFor(tf);
        pal.add(label);
        pal.add(tf);
        parent.add(pal);
        return tf;
    }

    /**
     * Create and add a text area to a JComponent.
     *
     * @param title the title of the frame
     * @param entry the name of the entry field
     * @param parent the component to add ourselves to
     * @param rows the number of rows
     * @param cols the number of columns
     * @return the text area
     */
    public static JTextArea createTextArea(String title, String entry,
                                           JComponent parent, int rows, int cols) {
        JPanel pal = PaletteHelper.createHorizontalPanel(null);
        JLabel label = new JLabel(title);
        label.setHorizontalTextPosition(JLabel.RIGHT);
        JTextArea ta = new JTextArea(entry, rows, cols);
        JScrollPane jsp = new JScrollPane(ta);
        label.setLabelFor(jsp);
        pal.add(label);
        pal.add(jsp);
        parent.add(pal);
        return ta;
    }

    /**
     * Get a layer's associated palette as an internal window
     *
     * @param layer the layer to get the palette for
     * @param ifl the listener to associate with the palette
     * @return the frame that the palette is in
     */
    public static JInternalFrame getPaletteInternalWindow(
                                                          Layer layer,
                                                          InternalFrameListener ifl) {
        return getPaletteInternalWindow(layer.getGUI(), layer.getName()
                + " Palette", ifl);
    }

    /**
     * Get a layer's associated palette as a top-level window
     *
     * @param layer the layer to get the palette for
     * @param cl the listener to associate with the palette
     * @return the frame that the palette is in
     */
    public static JFrame getPaletteWindow(Layer layer, ComponentListener cl) {
        Component layerGUI = getLayerGUIComponent(layer);

        JPanel dismissBox = new JPanel();
        dismissBox.setLayout(new BoxLayout(dismissBox, BoxLayout.X_AXIS));
        dismissBox.setAlignmentX(Component.LEFT_ALIGNMENT);
        dismissBox.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        dismissBox.add(Box.createHorizontalGlue());
        JButton dismiss = new JButton("Close");
        dismissBox.add(dismiss);
        dismissBox.add(Box.createHorizontalGlue());

        JPanel pane = new JPanel();
        pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
        pane.setAlignmentX(Component.CENTER_ALIGNMENT);
        pane.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        pane.add(layerGUI);
        pane.add(dismissBox);

        final JFrame frame = getPaletteWindow(pane, layer.getName()
                + " Palette", cl);

        dismiss.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                frame.setVisible(false);
            }
        });
        return frame;
    }

    /**
     * Get a Component that represents a layer's GUI.
     *
     * @param layer the layer to get the palette for
     * @return the Component that represents the GUI for the layer.
     */
    public static Component getLayerGUIComponent(Layer layer) {

        Component pal = layer.getGUI();
        if (pal == null) {
            pal = new JLabel("No Palette");
        }

        JPanel p = new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
        p.setAlignmentX(Component.LEFT_ALIGNMENT);
        p.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        p.add(pal);

        return p;
    }

    /**
     * Get a layer's associated palette as an internal window
     *
     * @param gui the Component to place in the window
     * @param ifl the listener to associate with the palette
     * @return the frame that the palette is in
     */
    public static JInternalFrame getPaletteInternalWindow(
                                                          Component gui,
                                                          String windowName,
                                                          InternalFrameListener ifl) {

        JInternalFrame paletteWindow;

        // create the palette's scroll pane
        JScrollPane scrollPane = new JScrollPane(gui, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT);
        scrollPane.setAlignmentY(Component.TOP_ALIGNMENT);

        // create the palette internal window
        paletteWindow = new JInternalFrame(windowName, true, //resizable
                true, //closable
                false, //maximizable
                true //iconifiable
        );

        // add a window listener that destroys the palette when
        // the window is closed
        paletteWindow.addInternalFrameListener(ifl);
        paletteWindow.getContentPane().add(scrollPane);
        paletteWindow.setOpaque(true);

        //layout all the components
        paletteWindow.pack();

        return paletteWindow;
    }

    /**
     * Get a layer's associated palette as a top-level window
     *
     * @param gui the Component to place in the window
     * @param cl the listener to associate with the palette
     * @return the frame that the palette is in
     */
    public static JFrame getPaletteWindow(Component gui, String windowName,
                                          ComponentListener cl) {

        JScrollPane scrollPane = new JScrollPane(gui, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT);
        scrollPane.setAlignmentY(Component.TOP_ALIGNMENT);

        // create the palette internal window
        JFrame paletteWindow = new JFrame(windowName);

        paletteWindow.addComponentListener(cl);
        paletteWindow.getContentPane().add(scrollPane);
        //layout all the components
        paletteWindow.pack();
        return paletteWindow;
    }

    /**
     * Get a layer's associated palette as a top-level window
     *
     * @param gui the Component to place in the window
     * @param cl the listener to associate with the palette
     * @return the frame that the palette is in
     */
    public static JFrame getNoScrollPaletteWindow(Component gui,
                                                  String windowName,
                                                  ComponentListener cl) {

        JPanel pane = new JPanel();
        pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
        pane.setAlignmentX(Component.CENTER_ALIGNMENT);
        pane.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        pane.add(gui);
        JFrame paletteWindow = new JFrame(windowName);
        paletteWindow.addComponentListener(cl);
        paletteWindow.getContentPane().add(pane);
        paletteWindow.pack();

        return paletteWindow;
    }
}
TOP

Related Classes of com.bbn.openmap.util.PaletteHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.