Package org.apache.jorphan.gui

Source Code of org.apache.jorphan.gui.JLabeledRadio

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.jorphan.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;

import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
* JLabeledRadio will create a set of Radio buttons with a label.
*
* @see org.apache.jmeter.gui.util.JLabeledRadioI18N for a version that is better suited to
* multi-language use.
*/
public class JLabeledRadio extends JPanel implements JLabeledField, ActionListener {

    private JLabel mLabel = new JLabel();

    private ButtonGroup bGroup = new ButtonGroup();

    private ArrayList mChangeListeners = new ArrayList(3);

    /**
     *
     */
    public JLabeledRadio() {
        super();
        this.add(mLabel);
    }

    public JLabeledRadio(String label, String[] items) {
        mLabel.setText(label);
        init(items, null);
    }

    public JLabeledRadio(String label, String[] items, String selectedItem) {
        mLabel.setText(label);
        init(items, selectedItem);
    }

    /**
     * Method is responsible for creating the JRadioButtons and adding them to
     * the ButtonGroup.
     *
     * @param items
     */
    private void init(String[] items, String selected) {
        this.add(mLabel);
        for (int idx = 0; idx < items.length; idx++) {
            JRadioButton btn = new JRadioButton(items[idx]);
            btn.setActionCommand(items[idx]);
            btn.addActionListener(this);
            // add the button to the button group
            this.bGroup.add(btn);
            // add the button
            this.add(btn);
            if (selected != null && selected.equals(items[idx])) {
                btn.setSelected(true);
            }
        }
    }

    /**
     * setItems will set the radio button items. The implementation first
     * removes the old JRadioButton, then it creates new ones.
     *
     * @param items
     */
    public void setItems(String[] items) {
        Enumeration en = this.bGroup.getElements();
        while (en.hasMoreElements()) {
            JComponent comp = (JComponent) en.nextElement();
            this.bGroup.remove((JRadioButton) comp);
            this.remove(comp);
        }
        init(items, null);
    }

    /**
     * The implementation will get the Text value from the selected radio button
     * in the JButtonGroup.
     */
    public String getText() {
        return this.bGroup.getSelection().getActionCommand();
    }

    /**
     * The implementation will iterate through the radio buttons and find the
     * match. It then sets it to selected and sets all other radion buttons as
     * not selected.
     */
    public void setText(String text) {
        Enumeration en = this.bGroup.getElements();
        while (en.hasMoreElements()) {
            JRadioButton jrb = (JRadioButton) en.nextElement();
            if (jrb.getText().equals(text)) {
                this.bGroup.setSelected(jrb.getModel(), true);
            } else {
                this.bGroup.setSelected(jrb.getModel(), false);
            }
        }
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.jorphan.gui.JLabeledField#setLabel(java.lang.String)
     */
    public void setLabel(String pLabel) {
        this.mLabel.setText(pLabel);
    }

    /*
     * (non-Javadoc)
     *
     * @see org.apache.jorphan.gui.JLabeledField#addChangeListener(javax.swing.event.ChangeListener)
     */
    public void addChangeListener(ChangeListener pChangeListener) {
        this.mChangeListeners.add(pChangeListener);
    }

    /**
     * Notify all registered change listeners that the text in the text field
     * has changed.
     */
    private void notifyChangeListeners() {
        ChangeEvent ce = new ChangeEvent(this);
        for (int index = 0; index < mChangeListeners.size(); index++) {
            ((ChangeListener) mChangeListeners.get(index)).stateChanged(ce);
        }
    }

    /**
     * Method will return all the label and JRadioButtons. ButtonGroup is
     * excluded from the list.
     */
    public List getComponentList() {
        List comps = new LinkedList();
        comps.add(mLabel);
        Enumeration en = this.bGroup.getElements();
        while (en.hasMoreElements()) {
            comps.add(en.nextElement());
        }
        return comps;
    }

    /**
     * When a radio button is clicked, an ActionEvent is triggered.
     */
    public void actionPerformed(ActionEvent e) {
        this.notifyChangeListeners();
    }

}
TOP

Related Classes of org.apache.jorphan.gui.JLabeledRadio

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.