1 | /* |
---|
2 | Copyright 2006 by Sean Paus |
---|
3 | Licensed under the Academic Free License version 3.0 |
---|
4 | See the file "LICENSE" for more information |
---|
5 | */ |
---|
6 | |
---|
7 | |
---|
8 | /* |
---|
9 | * Created on Apr 14, 2005 7:39:29 PM |
---|
10 | * |
---|
11 | * By: spaus |
---|
12 | */ |
---|
13 | package ec.display; |
---|
14 | |
---|
15 | import javax.swing.DefaultListModel; |
---|
16 | import javax.swing.JComponent; |
---|
17 | import javax.swing.JPanel; |
---|
18 | |
---|
19 | import java.awt.BorderLayout; |
---|
20 | |
---|
21 | import javax.swing.JList; |
---|
22 | |
---|
23 | import ec.EvolutionState; |
---|
24 | import ec.Setup; |
---|
25 | import ec.display.portrayal.IndividualPortrayal; |
---|
26 | import ec.display.portrayal.SimpleIndividualPortrayal; |
---|
27 | import ec.util.ParamClassLoadException; |
---|
28 | import ec.util.Parameter; |
---|
29 | import ec.util.ReflectedObject; |
---|
30 | |
---|
31 | import javax.swing.JScrollPane; |
---|
32 | import javax.swing.JSplitPane; |
---|
33 | import javax.swing.event.ListSelectionEvent; |
---|
34 | import javax.swing.event.ListSelectionListener; |
---|
35 | |
---|
36 | import javax.swing.JTree; |
---|
37 | /** |
---|
38 | * @author spaus |
---|
39 | */ |
---|
40 | public class SubpopulationPanel |
---|
41 | extends JPanel |
---|
42 | implements EvolutionStateListener, Setup |
---|
43 | { |
---|
44 | |
---|
45 | private final Console console; |
---|
46 | private final int subPopNum; |
---|
47 | private JList individualsList = null; |
---|
48 | private JScrollPane individualListPane = null; |
---|
49 | private JSplitPane subpopPane = null; |
---|
50 | private JSplitPane individualDisplayPane = null; |
---|
51 | private IndividualPortrayal portrayal = null; |
---|
52 | private JScrollPane inspectionPane = null; |
---|
53 | private JTree inspectionTree = null; |
---|
54 | /** |
---|
55 | * |
---|
56 | */ |
---|
57 | public SubpopulationPanel(Console console, int subPopNum) |
---|
58 | { |
---|
59 | super(); |
---|
60 | this.console = console; |
---|
61 | this.subPopNum = subPopNum; |
---|
62 | |
---|
63 | initialize(); |
---|
64 | } |
---|
65 | |
---|
66 | /** |
---|
67 | * @param isDoubleBuffered |
---|
68 | */ |
---|
69 | public SubpopulationPanel(Console console, int subPopNum, boolean isDoubleBuffered) |
---|
70 | { |
---|
71 | super(isDoubleBuffered); |
---|
72 | this.console = console; |
---|
73 | this.subPopNum = subPopNum; |
---|
74 | |
---|
75 | initialize(); |
---|
76 | } |
---|
77 | |
---|
78 | /** |
---|
79 | * This method initializes this |
---|
80 | * |
---|
81 | * @return void |
---|
82 | */ |
---|
83 | private void initialize() |
---|
84 | { |
---|
85 | this.setLayout(new BorderLayout()); |
---|
86 | this.setSize(300,200); |
---|
87 | this.add(getSubpopPane(), java.awt.BorderLayout.CENTER); |
---|
88 | } |
---|
89 | |
---|
90 | /** |
---|
91 | * This method initializes jList |
---|
92 | * |
---|
93 | * @return javax.swing.JList |
---|
94 | */ |
---|
95 | private JList getIndividualsList() |
---|
96 | { |
---|
97 | if (individualsList == null) |
---|
98 | { |
---|
99 | individualsList = new JList(); |
---|
100 | individualsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); |
---|
101 | int size = console.parameters.getInt(new Parameter("pop.subpop."+subPopNum+".size"),null); |
---|
102 | DefaultListModel model = new DefaultListModel(); |
---|
103 | for (int i = 0; i < size; ++i) |
---|
104 | { |
---|
105 | model.add(i,new Integer(i)); |
---|
106 | } |
---|
107 | individualsList.setModel(model); |
---|
108 | individualsList.addListSelectionListener(new ListSelectionListener() |
---|
109 | { |
---|
110 | public void valueChanged(ListSelectionEvent evt) |
---|
111 | { |
---|
112 | if (evt.getValueIsAdjusting() == false) |
---|
113 | { |
---|
114 | JList source = (JList)evt.getSource(); |
---|
115 | int idx = source.getSelectedIndex(); |
---|
116 | inspectionTree.setModel(new ReflectedObject(console.state.population.subpops[subPopNum].individuals[idx])); |
---|
117 | portrayal.portrayIndividual(console.state,console.state.population.subpops[subPopNum].individuals[idx]); |
---|
118 | } |
---|
119 | } |
---|
120 | }); |
---|
121 | } |
---|
122 | return individualsList; |
---|
123 | } |
---|
124 | |
---|
125 | public void postEvolution(EvolutionStateEvent evt) |
---|
126 | { |
---|
127 | int idx = individualsList.getSelectedIndex(); |
---|
128 | if (idx >= 0) |
---|
129 | { |
---|
130 | inspectionTree.setModel(new ReflectedObject(console.state.population.subpops[subPopNum].individuals[idx])); |
---|
131 | portrayal.portrayIndividual(console.state,console.state.population.subpops[subPopNum].individuals[idx]); |
---|
132 | } |
---|
133 | } |
---|
134 | /** |
---|
135 | * This method initializes jScrollPane |
---|
136 | * |
---|
137 | * @return javax.swing.JScrollPane |
---|
138 | */ |
---|
139 | private JScrollPane getIndividualListPane() |
---|
140 | { |
---|
141 | if (individualListPane == null) |
---|
142 | { |
---|
143 | individualListPane = new JScrollPane(); |
---|
144 | individualListPane.setViewportView(getIndividualsList()); |
---|
145 | individualListPane.setPreferredSize(new java.awt.Dimension(75,131)); |
---|
146 | } |
---|
147 | return individualListPane; |
---|
148 | } |
---|
149 | /** |
---|
150 | * This method initializes jSplitPane |
---|
151 | * |
---|
152 | * @return javax.swing.JSplitPane |
---|
153 | */ |
---|
154 | private JSplitPane getSubpopPane() |
---|
155 | { |
---|
156 | if (subpopPane == null) |
---|
157 | { |
---|
158 | subpopPane = new JSplitPane(); |
---|
159 | subpopPane.setLeftComponent(getIndividualListPane()); |
---|
160 | subpopPane.setRightComponent(getIndividualDisplayPane()); |
---|
161 | subpopPane.setResizeWeight(0.0D); |
---|
162 | subpopPane.setDividerLocation(100); |
---|
163 | } |
---|
164 | return subpopPane; |
---|
165 | } |
---|
166 | |
---|
167 | /** |
---|
168 | * This method initializes jSplitPane1 |
---|
169 | * |
---|
170 | * @return javax.swing.JSplitPane |
---|
171 | */ |
---|
172 | private JSplitPane getIndividualDisplayPane() |
---|
173 | { |
---|
174 | if (individualDisplayPane == null) |
---|
175 | { |
---|
176 | individualDisplayPane = new JSplitPane(); |
---|
177 | individualDisplayPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); |
---|
178 | individualDisplayPane.setTopComponent(getInspectionPane()); |
---|
179 | individualDisplayPane.setResizeWeight(0.5D); |
---|
180 | } |
---|
181 | return individualDisplayPane; |
---|
182 | } |
---|
183 | |
---|
184 | public void setup(EvolutionState state, Parameter base) |
---|
185 | { |
---|
186 | try |
---|
187 | { |
---|
188 | portrayal = (IndividualPortrayal)state.parameters.getInstanceForParameter(base.push("portrayal"),null,IndividualPortrayal.class); |
---|
189 | } |
---|
190 | catch (ParamClassLoadException ex) |
---|
191 | { |
---|
192 | // default to SimpleIndividualPortrayal |
---|
193 | portrayal = new SimpleIndividualPortrayal(); |
---|
194 | } |
---|
195 | portrayal.setup(state, base); |
---|
196 | individualDisplayPane.setBottomComponent(new JScrollPane((JComponent)portrayal)); |
---|
197 | } |
---|
198 | /** |
---|
199 | * This method initializes jScrollPane |
---|
200 | * |
---|
201 | * @return javax.swing.JScrollPane |
---|
202 | */ |
---|
203 | private JScrollPane getInspectionPane() |
---|
204 | { |
---|
205 | if (inspectionPane == null) |
---|
206 | { |
---|
207 | inspectionPane = new JScrollPane(); |
---|
208 | inspectionPane.setViewportView(getInspectionTree()); |
---|
209 | } |
---|
210 | return inspectionPane; |
---|
211 | } |
---|
212 | /** |
---|
213 | * This method initializes jTree |
---|
214 | * |
---|
215 | * @return javax.swing.JTree |
---|
216 | */ |
---|
217 | private JTree getInspectionTree() |
---|
218 | { |
---|
219 | if (inspectionTree == null) |
---|
220 | { |
---|
221 | Object[] emptyTreeModel = new Object[0]; |
---|
222 | inspectionTree = new JTree(emptyTreeModel); |
---|
223 | } |
---|
224 | return inspectionTree; |
---|
225 | } |
---|
226 | } // @jve:decl-index=0:visual-constraint="423,73" |
---|