blob: e143acc956770c7a284052a5c3209f6534859a37 [file] [log] [blame]
// ============================================================================
// Copyright 2006-2012 Daniel W. Dyer
//
// Licensed 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.uncommons.maths.demo;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JPanel;
/**
* GUI component for selecting a probability distribution. Displays appropriate
* configuration options for each distribution.
* @author Daniel Dyer
*/
class DistributionPanel extends JPanel
{
private final SortedMap<String, ParametersPanel> parameterPanels = new TreeMap<String, ParametersPanel>();
private final JComboBox distributionCombo = new JComboBox();
{
parameterPanels.put("Binomial", new BinomialParametersPanel());
parameterPanels.put("Exponential", new ExponentialParametersPanel());
parameterPanels.put("Gaussian", new GaussianParametersPanel());
parameterPanels.put("Poisson", new PoissonParametersPanel());
parameterPanels.put("Uniform", new UniformParametersPanel());
}
public DistributionPanel()
{
super(new BorderLayout());
final CardLayout parametersLayout = new CardLayout();
final JPanel parametersPanel = new JPanel(parametersLayout);
for (Map.Entry<String, ParametersPanel> entry : parameterPanels.entrySet())
{
distributionCombo.addItem(entry.getKey());
parametersPanel.add(entry.getValue(), entry.getKey());
}
parametersLayout.first(parametersPanel);
distributionCombo.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent itemEvent)
{
parametersLayout.show(parametersPanel,
(String) distributionCombo.getSelectedItem());
}
});
add(distributionCombo, BorderLayout.NORTH);
add(parametersPanel, BorderLayout.CENTER);
setBorder(BorderFactory.createTitledBorder("Probability Distribution"));
}
public ProbabilityDistribution createProbabilityDistribution()
{
ParametersPanel panel = parameterPanels.get(distributionCombo.getSelectedItem().toString());
return panel.createProbabilityDistribution();
}
}