Source code: jmat/io/gui/PanelParameters.java
1 package jmat.io.gui;
2
3 import java.awt.*;
4 import java.awt.event.*;
5
6 import javax.swing.*;
7
8
9 /**
10 * <p>Titre : JAva MAtrix TOols</p>
11 * <p>Description : builds a JPanel containing fields for setting parameters.</p>
12 * @author Yann RICHET
13 */
14 public class PanelParameters extends JPanel implements FocusListener
15 {
16 //~ Instance fields ////////////////////////////////////////////////////////
17
18 private Dimension defaultSize;
19 private JComboBox[] fields;
20 private JLabel[] labels;
21 private String[][] paramChoices;
22 private String[] paramLabels;
23 private String[] paramValues;
24
25 //~ Constructors ///////////////////////////////////////////////////////////
26
27 public PanelParameters(String[] lab, String[] val)
28 {
29 paramLabels = lab;
30 paramValues = val;
31 paramChoices = new String[paramLabels.length][1];
32
33 for (int i = 0; i < paramLabels.length; i++)
34 {
35 paramChoices[i][0] = paramValues[i];
36 }
37
38 setComponents();
39 setAppearence();
40 draw();
41 }
42
43 public PanelParameters(String[] lab, String[][] ch)
44 {
45 paramLabels = lab;
46 paramValues = new String[paramLabels.length];
47 paramChoices = ch;
48
49 for (int i = 0; i < paramLabels.length; i++)
50 {
51 paramValues[i] = paramChoices[i][0];
52 }
53
54 setComponents();
55 setAppearence();
56 draw();
57 }
58
59 public PanelParameters(String[] lab)
60 {
61 paramLabels = lab;
62 paramValues = new String[paramLabels.length];
63 paramChoices = new String[paramLabels.length][1];
64
65 setComponents();
66 setAppearence();
67 draw();
68 }
69
70 //~ Methods ////////////////////////////////////////////////////////////////
71
72 public String[] getValues()
73 {
74 updateValues();
75
76 return paramValues;
77 }
78
79 public void focusGained(FocusEvent e)
80 {
81 }
82
83 public void focusLost(FocusEvent e)
84 {
85 updateValues();
86 }
87
88 private void setAppearence()
89 {
90 setPreferredSize(defaultSize);
91 setSize(defaultSize);
92 }
93
94 private void setComponents()
95 {
96 labels = new JLabel[paramLabels.length];
97 fields = new JComboBox[paramLabels.length];
98
99 for (int i = 0; i < paramLabels.length; i++)
100 {
101 labels[i] = new JLabel(paramLabels[i], JLabel.RIGHT);
102 fields[i] = new JComboBox(paramChoices[i]);
103 fields[i].setEditable(true);
104 }
105
106 defaultSize = new Dimension(400, paramLabels.length * 30);
107 }
108
109 private void buildConstraints(GridBagConstraints gbc, int gx, int gy,
110 int gw, int gh, int wx, int wy)
111 {
112 gbc.gridx = gx;
113 gbc.gridy = gy;
114 gbc.gridwidth = gw;
115 gbc.gridheight = gh;
116 gbc.weightx = wx;
117 gbc.weighty = wy;
118 }
119
120 private void draw()
121 {
122 JPanel panel = new JPanel();
123
124 GridBagLayout gbl = new GridBagLayout();
125 GridBagConstraints c = new GridBagConstraints();
126 panel.setLayout(gbl);
127
128 for (int i = 0; i < paramLabels.length; i++)
129 {
130 fields[i].addFocusListener(this);
131
132 // Ajout du panel de la chaine
133 buildConstraints(c, 0, i, 1, 1, 50, 20);
134 c.anchor = GridBagConstraints.EAST;
135 gbl.setConstraints(labels[i], c);
136 panel.add(labels[i]);
137
138 // Ajout du panel de la chaine
139 buildConstraints(c, 1, i, 1, 1, 50, 20);
140 c.fill = GridBagConstraints.HORIZONTAL;
141 gbl.setConstraints(fields[i], c);
142 panel.add(fields[i]);
143 }
144
145 JScrollPane scrollPane = new JScrollPane(panel);
146
147 scrollPane.setPreferredSize(getSize());
148 scrollPane.setSize(getSize());
149
150 this.setLayout(new BorderLayout());
151 this.add(scrollPane, BorderLayout.CENTER);
152 }
153
154 private void updateValues()
155 {
156 for (int i = 0; i < paramLabels.length; i++)
157 {
158 paramValues[i] = (String) (fields[i].getSelectedItem());
159 }
160 }
161 }
162 ///////////////////////////////////////////////////////////////////////////////
163 // END OF FILE.
164 ///////////////////////////////////////////////////////////////////////////////