src/org/math/plot/ParametersPanel.java

00001 package org.math.plot;
00002 
00003 import java.awt.*;
00004 import java.awt.event.*;
00005 
00006 import javax.swing.*;
00007 
00014 public class ParametersPanel extends JPanel implements ActionListener {
00015 
00016         private static final long serialVersionUID = 1L;
00017 
00018         private Dimension defaultSize;
00019 
00020         private String[] paramLabels;
00021 
00022         private String[] paramValues;
00023 
00024         private boolean[] isList;
00025 
00026         private int[] paramValuesIndex;
00027 
00028         private String[][] paramChoices;
00029 
00030         private JLabel[] labels;
00031 
00032         private JComboBox[] fields;
00033 
00034         private Runnable action;
00035 
00036         public ParametersPanel(String[] lab, String[] val) {
00037                 this(lab, new int[lab.length], new String[][] { val });
00038         }
00039 
00040         public ParametersPanel(String[] lab) {
00041                 this(lab, new String[lab.length]);
00042         }
00043 
00044         public ParametersPanel(String[] lab, int[] selected, String[][] ch) {
00045                 paramLabels = lab;
00046 
00047                 isList = new boolean[paramLabels.length];
00048                 for (int i = 0; i < isList.length; i++) {
00049                         isList[i] = true;
00050                 }
00051 
00052                 paramValuesIndex = selected;
00053 
00054                 paramChoices = ch;
00055 
00056                 paramValues = new String[paramLabels.length];
00057                 for (int i = 0; i < paramChoices.length; i++) {
00058                         paramValues[i] = paramChoices[i][paramValuesIndex[i]];
00059                 }
00060 
00061                 setComponents();
00062                 setAppearence();
00063                 draw();
00064         }
00065 
00066         public ParametersPanel(String[] lab, String[][] ch) {
00067                 this(lab, new int[lab.length], ch);
00068         }
00069 
00070         private void setComponents() {
00071                 labels = new JLabel[paramLabels.length];
00072                 fields = new JComboBox[paramLabels.length];
00073                 for (int i = 0; i < paramLabels.length; i++) {
00074                         labels[i] = new JLabel(paramLabels[i], JLabel.RIGHT);
00075                         if (isList[i]) {
00076                                 fields[i] = new JComboBox(paramChoices[i]);
00077                         } else {
00078                                 fields[i] = new JComboBox();
00079                         }
00080                         fields[i].setEditable(!isList[i]);
00081                 }
00082                 defaultSize = new Dimension(400, paramLabels.length * 30);
00083         }
00084 
00085         private void setAppearence() {
00086                 setPreferredSize(defaultSize);
00087                 setSize(defaultSize);
00088         }
00089 
00090         private void update() {
00091                 updateValues();
00092                 updateValuesIndex();
00093         }
00094 
00095         private void updateValues() {
00096                 for (int i = 0; i < paramLabels.length; i++) {
00097                         paramValues[i] = (String) (fields[i].getSelectedItem());
00098                 }
00099         }
00100 
00101         private void updateValuesIndex() {
00102                 for (int i = 0; i < paramLabels.length; i++) {
00103                         if (isList[i]) {
00104                                 paramValuesIndex[i] = fields[i].getSelectedIndex();
00105                         }
00106                 }
00107         }
00108 
00109         public void actionPerformed(ActionEvent e) {
00110                 update();
00111                 new Thread(action, "PanelParameters " + this.toString() + " selection").start();
00112         }
00113 
00114         public int getValueIndex(int i) {
00115                 if (!isList[i]) {
00116                         throw new IllegalArgumentException("This PanelParameter element is not set to give an Index.");
00117                 }
00118                 update();
00119                 return paramValuesIndex[i];
00120         }
00121 
00122         public int[] getValuesIndex() {
00123                 update();
00124                 return paramValuesIndex;
00125         }
00126 
00127         public String[] getValues() {
00128                 update();
00129                 return paramValues;
00130         }
00131 
00132         public String getValue(int i) {
00133                 update();
00134                 return paramValues[i];
00135         }
00136 
00137         public void setAction(Runnable t) {
00138                 action = t;
00139         }
00140 
00141         private void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) {
00142                 gbc.gridx = gx;
00143                 gbc.gridy = gy;
00144                 gbc.gridwidth = gw;
00145                 gbc.gridheight = gh;
00146                 gbc.weightx = wx;
00147                 gbc.weighty = wy;
00148         }
00149 
00150         private void draw() {
00151                 JPanel panel = new JPanel();
00152 
00153                 GridBagLayout gbl = new GridBagLayout();
00154                 GridBagConstraints c = new GridBagConstraints();
00155                 panel.setLayout(gbl);
00156 
00157                 for (int i = 0; i < paramLabels.length; i++) {
00158                         fields[i].addActionListener(this);
00159 
00160                         // Ajout du panel de la chaine
00161                         buildConstraints(c, 0, i, 1, 1, 50, 20);
00162                         c.anchor = GridBagConstraints.EAST;
00163                         gbl.setConstraints(labels[i], c);
00164                         panel.add(labels[i]);
00165 
00166                         // Ajout du panel de la chaine
00167                         buildConstraints(c, 1, i, 1, 1, 50, 20);
00168                         c.fill = GridBagConstraints.HORIZONTAL;
00169                         gbl.setConstraints(fields[i], c);
00170                         panel.add(fields[i]);
00171                 }
00172 
00173                 JScrollPane scrollPane = new JScrollPane(panel);
00174 
00175                 scrollPane.setPreferredSize(getSize());
00176                 scrollPane.setSize(getSize());
00177 
00178                 setLayout(new BorderLayout());
00179                 add(scrollPane, BorderLayout.CENTER);
00180 
00181         }
00182 
00183 }

Generated on Wed Sep 5 21:44:01 2007 for jmathplot by  doxygen 1.5.1