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

prefuse.util.ui.JToggleGroup Maven / Gradle / Ivy

Go to download

Prefuse is a set of software tools for creating rich interactive data visualizations in the Java programming language.

The newest version!
package prefuse.util.ui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * Swing component representing a group of toggle buttons -- either checkboxes
 * or radio buttons. This class uses a ListModel and ListSelectionModel to
 * represent the selection state of the buttons.
 * 
 * @author jeffrey heer
 */
public class JToggleGroup extends JPanel {

    public static final int CHECKBOX = 0;
    public static final int RADIO    = 1;
    
    protected final int m_type;
    protected int m_margin  = 0;
    protected int m_spacing = 0;
    protected int m_axis = BoxLayout.X_AXIS;
    
    protected ListModel          m_data;
    protected ListSelectionModel m_sel;
    protected String[]           m_labels;
    protected ButtonGroup        m_group;
    
    private Listener m_lstnr;
    
    /**
     * Create a new JToggleGroup.
     * @param type the toggle button type to use, one of {@link #CHECKBOX}
     * or {@link #RADIO}
     * @param data the list data that should populate the toggle group
     */
    public JToggleGroup(int type, Object[] data) {
        this(type, new DefaultListModel(), 
                new DefaultListSelectionModel());
        
        DefaultListModel model = (DefaultListModel)m_data;
        for ( int i=0; i 0 )
            initUI();
        setFocusable(false);
    }
    
    // ------------------------------------------------------------------------
    
    /**
     * Initialize the UI.
     */
    protected void initUI() {
        // unregister all active components
        for ( int i=0; i0 ) UILib.addStrut(this, m_axis, m_spacing);
            
            Object data  = m_data.getElementAt(i);
            String label = m_labels==null ? data.toString() : m_labels[i];
            
            JToggleButton tb = null;
            if ( m_type == CHECKBOX ) {
                tb = new JCheckBox(label);
            } else {
                tb = new JRadioButton(label);
                m_group.add(tb);
            }
            tb.putClientProperty("idx", new Integer(i));
            tb.addActionListener(m_lstnr);
            add(tb);
        }
        UILib.addStrut(this, m_axis, m_margin);
        
        // make sure the selection status shows up
        m_lstnr.valueChanged(null);
    }
    
    // ------------------------------------------------------------------------
    
    /**
     * Set the Box axis type used to orient the toggle group component.
     * @param axis the axis type, one of
     * {@link javax.swing.BoxLayout#X_AXIS},
     * {@link javax.swing.BoxLayout#Y_AXIS},
     * {@link javax.swing.BoxLayout#LINE_AXIS}, or
     * {@link javax.swing.BoxLayout#PAGE_AXIS}.
     */
    public void setAxisType(int axis) {
        this.setLayout(new BoxLayout(this, axis));
        m_axis = axis;
        initUI();
    }
    
    /**
     * Get the Box axis type used to orient the toggle group component.
     * @return the axis type, one of
     * {@link javax.swing.BoxLayout#X_AXIS},
     * {@link javax.swing.BoxLayout#Y_AXIS},
     * {@link javax.swing.BoxLayout#LINE_AXIS}, or
     * {@link javax.swing.BoxLayout#PAGE_AXIS}.
     */
    public int getAxisType() {
        return m_axis;
    }
    
    /**
     * Set the margin, in pixels, to use at the ends of the JToggleGroup.
     * @param margin the margin in pixels
     */
    public void setMargin(int margin) {
        if ( margin < 0 )
            throw new IllegalArgumentException("Margin is less than zero.");
        m_margin = margin;
        initUI();
    }

    /**
     * Get the margin, in pixels, used at the ends of the JToggleGroup.
     * @return the margin in pixels
     */
    public int getMargin() {
        return m_margin;
    }
    
    /**
     * Set the spacing between toggle group components.
     * @param spacing the spacing, in pixels, to use between components
     */
    public void setSpacing(int spacing) {
        if ( spacing < 0 )
            throw new IllegalArgumentException("Spacing is less than zero.");
        m_spacing = spacing;
        initUI();
    }
    
    /**
     * Get the spacing between toggle group components.
     * @return the spacing, in pixels, to use between components
     */
    public int getSpacing() {
        return m_spacing;
    }
    
    /**
     * Set the ListModel backing this component.
     * @return the list model to use
     */
    public void setModel(ListModel model) {
        m_data = model;
        initUI();
    }
    
    /**
     * Get the ListModel backing this component.
     * @return the list model
     */
    public ListModel getModel() {
        return m_data;
    }
    
    /**
     * Set the ListSelectionModel used by this component.
     * @param sel the list selection model to use
     */
    public void setSelectionModel(ListSelectionModel sel) {
        m_sel.removeListSelectionListener(m_lstnr);
        m_sel = sel;
        m_sel.addListSelectionListener(m_lstnr);
        m_lstnr.valueChanged(null);
    }
    
    /**
     * Get the ListSelectionModel used by this component.
     * @return the list selection model to use
     */
    public ListSelectionModel getSelectionModel() {
        return m_sel;
    }
    
    /**
     * Set the labels to use for the Objects contained in the list model.
     * @param labels the display labels to use in the interface component
     */
    public void setLabels(String[] labels) {
        if ( labels.length < m_data.getSize() ) {
            throw new IllegalArgumentException("Alias array is too short");
        }
        m_labels = labels;
        initUI();
    }
    
    /**
     * Set the background color of this toggle group.
     * @see java.awt.Component#setBackground(java.awt.Color)
     */
    public void setBackground(Color background) {
        for ( int i=0; i= 0);
                JToggleButton tb = null;
                
                for ( int i=0, j=0; i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy