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

jdplus.toolkit.desktop.plugin.ui.chart3d.functions.ParameterComboBox Maven / Gradle / Ivy

/*
 * Copyright 2013 National Bank of Belgium
 *
 * Licensed under the EUPL, Version 1.1 or – as soon they will be approved 
 * by the European Commission - subsequent versions of the EUPL (the "Licence");
 * You may not use this work except in compliance with the Licence.
 * You may obtain a copy of the Licence at:
 * 
 * http://ec.europa.eu/idabc/eupl
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the Licence is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the Licence for the specific language governing permissions and 
 * limitations under the Licence.
 */
package jdplus.toolkit.desktop.plugin.ui.chart3d.functions;

import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

/**
 * Panel containing the 2 comboboxes used to select the parameters of the function.
 * @author Mats Maggi
 */
public class ParameterComboBox extends JPanel {

    private Object selected1;
    private Object selected2;
    private JComboBox combo1;
    private JComboBox combo2;
    private String[] elements;
    public static final String PARAMETERS_CHANGED = "Parameters Changed";
    private final JLabel param1Label = new JLabel("X Parameter : ");
    private final JLabel param2Label = new JLabel("Y Parameter : ");
    private ItemListener l1, l2;
    private JButton button;

    public ParameterComboBox(String[] elements) {
        super();
        this.elements = elements;
        setLayout(new BoxLayout(this, javax.swing.BoxLayout.LINE_AXIS));
        setOpaque(false);
        initComboBoxes();
        initPanels();
    }

    private void initPanels() {
        JPanel mainPanel = new JPanel();
        mainPanel.setOpaque(false);
        mainPanel.setLayout(new BoxLayout(mainPanel, javax.swing.BoxLayout.PAGE_AXIS));
        JPanel p1 = new JPanel();
        p1.setOpaque(false);
        p1.setBorder(new EmptyBorder(1, 5, 1, 5));
        p1.setLayout(new BoxLayout(p1, javax.swing.BoxLayout.LINE_AXIS));
        p1.add(param1Label);
        p1.add(combo1);

        JPanel p2 = new JPanel();
        p2.setOpaque(false);
        p2.setBorder(new EmptyBorder(1, 5, 1, 5));
        p2.setLayout(new BoxLayout(p2, javax.swing.BoxLayout.LINE_AXIS));
        p2.add(param2Label);
        p2.add(combo2);

        param1Label.setMaximumSize(new Dimension(50, 18));
        param2Label.setMaximumSize(new Dimension(50, 18));

        mainPanel.add(p1);
        mainPanel.add(p2);

        button = new JButton("OK");
        button.setMaximumSize(new Dimension(50, 18));

        button.addActionListener(event -> firePropertyChange(PARAMETERS_CHANGED, null, null));

        add(mainPanel);
        add(button);
    }

    private void initComboBoxes() {
        selected1 = elements[0];
        selected2 = elements[1];

        combo1 = new JComboBox(elements);
        combo1.setOpaque(false);
        combo1.setSelectedItem(selected1);
        combo1.setMaximumSize(new Dimension(100, 18));
        combo1.setPreferredSize(new Dimension(100, 18));

        combo2 = new JComboBox(elements);
        combo2.setOpaque(false);
        combo2.setSelectedItem(selected2);
        combo2.setMaximumSize(new Dimension(100, 18));
        combo2.setPreferredSize(new Dimension(100, 18));

        combo2.removeItem(selected1);
        combo1.removeItem(selected2);

        l1 = event -> {
            if (event.getStateChange() == ItemEvent.SELECTED) {
                selected1 = event.getItem();
                resetElements();
            }
        };

        l2 = e -> {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                selected2 = e.getItem();
                resetElements();
            }
        };

        combo1.addItemListener(l1);
        combo2.addItemListener(l2);
    }

    public void setElements(String[] elements) {
        this.elements = elements;
        selected1 = this.elements[0];
        selected2 = this.elements[1];

        resetElements();
    }

    public void resetElements() {
        combo1.removeItemListener(l1);
        combo2.removeItemListener(l2);

        combo1.removeAllItems();
        combo2.removeAllItems();
        for (String s : elements) {
            combo1.addItem(s);
            combo2.addItem(s);
        }

        combo2.removeItem(selected1);
        combo1.removeItem(selected2);

        combo1.setSelectedItem(selected1);
        combo2.setSelectedItem(selected2);

        combo1.addItemListener(l1);
        combo2.addItemListener(l2);
    }

    public int getSelectedIndex1() {
        for (int i = 0; i < elements.length; i++) {
            if (elements[i].equals(String.valueOf(selected1))) {
                return i;
            }
        }
        return -1;
    }

    public int getSelectedIndex2() {
        for (int i = 0; i < elements.length; i++) {
            if (elements[i].equals(String.valueOf(selected2))) {
                return i;
            }
        }
        return -1;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy