KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > PeriodicTable


1 import java.awt.*;
2 import java.awt.event.*;
3 import JSci.chemistry.*;
4 import JSci.chemistry.periodictable.*;
5
6 /**
7 * Periodic Table.
8 * This will run under the J2ME Personal Profile.
9 * @author Mark Hale
10 * @version 1.4
11 */

12 public final class PeriodicTable extends Frame {
13         private static final Color purple = new Color(0.75f,0.75f,1.0f);
14         private static final boolean showNumbering = true;
15
16         public static void main(String JavaDoc argv[]) {
17                 new PeriodicTable();
18         }
19         private static void setDefaultSize(Component c, int defaultWidth, int defaultHeight) {
20                 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
21                 final int width = (defaultWidth < screenSize.width) ? defaultWidth : screenSize.width;
22                 final int height = (defaultHeight < screenSize.height) ? defaultHeight : screenSize.height;
23                 c.setSize(width, height);
24         }
25         public PeriodicTable() {
26                 super("Periodic Table");
27                 addWindowListener(new WindowAdapter() {
28                         public void windowClosing(WindowEvent evt) {
29                                 dispose();
30                                 System.exit(0);
31                         }
32                 });
33                 System.out.print("Loading elements...");
34                 Panel panel = new Panel();
35                 createTable(panel, this);
36                 System.out.println("done.");
37                 ScrollPane scrollPane = new ScrollPane();
38                 scrollPane.add(panel);
39                 add(scrollPane);
40                 setDefaultSize(this, 650, 400);
41                 setVisible(true);
42         }
43         private static void createTable(Container container, Frame frame) {
44                 GridBagLayout gb = new GridBagLayout();
45                 GridBagConstraints gbc = new GridBagConstraints();
46                 gbc.fill=GridBagConstraints.BOTH;
47                 container.setLayout(gb);
48                 gbc.gridy=0;
49                 if(showNumbering) {
50                         gbc.gridx=1;
51                         container.add(createLabel("1", gb, gbc));
52                         gbc.gridx++;
53                         container.add(createLabel("2", gb, gbc));
54                         gbc.gridx++;
55                         container.add(createLabel("3", gb, gbc));
56                         gbc.gridx++;
57                         container.add(createLabel("4", gb, gbc));
58                         gbc.gridx++;
59                         container.add(createLabel("5", gb, gbc));
60                         gbc.gridx++;
61                         container.add(createLabel("6", gb, gbc));
62                         gbc.gridx++;
63                         container.add(createLabel("7", gb, gbc));
64                         gbc.gridx++;
65                         container.add(createLabel("8", gb, gbc));
66                         gbc.gridx++;
67                         container.add(createLabel("9", gb, gbc));
68                         gbc.gridx++;
69                         container.add(createLabel("10", gb, gbc));
70                         gbc.gridx++;
71                         container.add(createLabel("11", gb, gbc));
72                         gbc.gridx++;
73                         container.add(createLabel("12", gb, gbc));
74                         gbc.gridx++;
75                         container.add(createLabel("13", gb, gbc));
76                         gbc.gridx++;
77                         container.add(createLabel("14", gb, gbc));
78                         gbc.gridx++;
79                         container.add(createLabel("15", gb, gbc));
80                         gbc.gridx++;
81                         container.add(createLabel("16", gb, gbc));
82                         gbc.gridx++;
83                         container.add(createLabel("17", gb, gbc));
84                         gbc.gridx++;
85                         container.add(createLabel("18", gb, gbc));
86                         gbc.gridy++;
87                 }
88                 gbc.gridx=0;
89                 if(showNumbering) {
90                         container.add(createLabel("1", gb, gbc));
91                         gbc.gridx++;
92                 }
93                 container.add(createButton("Hydrogen", gb, gbc, frame));
94                 gbc.gridx+=17;
95                 container.add(createButton("Helium", gb, gbc, frame));
96                 gbc.gridx=0;
97                 gbc.gridy++;
98                 if(showNumbering) {
99                         container.add(createLabel("2", gb, gbc));
100                         gbc.gridx++;
101                 }
102                 container.add(createButton("Lithium", gb, gbc, frame));
103                 gbc.gridx++;
104                 container.add(createButton("Beryllium", gb, gbc, frame));
105                 gbc.gridx+=11;
106                 container.add(createButton("Boron", gb, gbc, frame));
107                 gbc.gridx++;
108                 container.add(createButton("Carbon", gb, gbc, frame));
109                 gbc.gridx++;
110                 container.add(createButton("Nitrogen", gb, gbc, frame));
111                 gbc.gridx++;
112                 container.add(createButton("Oxygen", gb, gbc, frame));
113                 gbc.gridx++;
114                 container.add(createButton("Fluorine", gb, gbc, frame));
115                 gbc.gridx++;
116                 container.add(createButton("Neon", gb, gbc, frame));
117                 gbc.gridx=0;
118                 gbc.gridy++;
119                 if(showNumbering) {
120                         container.add(createLabel("3", gb, gbc));
121                         gbc.gridx++;
122                 }
123                 container.add(createButton("Sodium", gb, gbc, frame));
124                 gbc.gridx++;
125                 container.add(createButton("Magnesium", gb, gbc, frame));
126                 gbc.gridx+=11;
127                 container.add(createButton("Aluminium", gb, gbc, frame));
128                 gbc.gridx++;
129                 container.add(createButton("Silicon", gb, gbc, frame));
130                 gbc.gridx++;
131                 container.add(createButton("Phosphorus", gb, gbc, frame));
132                 gbc.gridx++;
133                 container.add(createButton("Sulphur", gb, gbc, frame));
134                 gbc.gridx++;
135                 container.add(createButton("Chlorine", gb, gbc, frame));
136                 gbc.gridx++;
137                 container.add(createButton("Argon", gb, gbc, frame));
138                 gbc.gridx=0;
139                 gbc.gridy++;
140                 if(showNumbering) {
141                         container.add(createLabel("4", gb, gbc));
142                         gbc.gridx++;
143                 }
144                 container.add(createButton("Potassium", gb, gbc, frame));
145                 gbc.gridx++;
146                 container.add(createButton("Calcium", gb, gbc, frame));
147                 gbc.gridx++;
148                 container.add(createButton("Scandium", gb, gbc, frame));
149                 gbc.gridx++;
150                 container.add(createButton("Titanium", gb, gbc, frame));
151                 gbc.gridx++;
152                 container.add(createButton("Vanadium", gb, gbc, frame));
153                 gbc.gridx++;
154                 container.add(createButton("Chromium", gb, gbc, frame));
155                 gbc.gridx++;
156                 container.add(createButton("Manganese", gb, gbc, frame));
157                 gbc.gridx++;
158                 container.add(createButton("Iron", gb, gbc, frame));
159                 gbc.gridx++;
160                 container.add(createButton("Cobalt", gb, gbc, frame));
161                 gbc.gridx++;
162                 container.add(createButton("Nickel", gb, gbc, frame));
163                 gbc.gridx++;
164                 container.add(createButton("Copper", gb, gbc, frame));
165                 gbc.gridx++;
166                 container.add(createButton("Zinc", gb, gbc, frame));
167                 gbc.gridx++;
168                 container.add(createButton("Gallium", gb, gbc, frame));
169                 gbc.gridx++;
170                 container.add(createButton("Germanium", gb, gbc, frame));
171                 gbc.gridx++;
172                 container.add(createButton("Arsenic", gb, gbc, frame));
173                 gbc.gridx++;
174                 container.add(createButton("Selenium", gb, gbc, frame));
175                 gbc.gridx++;
176                 container.add(createButton("Bromine", gb, gbc, frame));
177                 gbc.gridx++;
178                 container.add(createButton("Krypton", gb, gbc, frame));
179                 gbc.gridx=0;
180                 gbc.gridy++;
181                 if(showNumbering) {
182                         container.add(createLabel("5", gb, gbc));
183                         gbc.gridx++;
184                 }
185                 container.add(createButton("Rubidium", gb, gbc, frame));
186                 gbc.gridx++;
187                 container.add(createButton("Strontium", gb, gbc, frame));
188                 gbc.gridx++;
189                 container.add(createButton("Yttrium", gb, gbc, frame));
190                 gbc.gridx++;
191                 container.add(createButton("Zirconium", gb, gbc, frame));
192                 gbc.gridx++;
193                 container.add(createButton("Niobium", gb, gbc, frame));
194                 gbc.gridx++;
195                 container.add(createButton("Molybdenum", gb, gbc, frame));
196                 gbc.gridx++;
197                 container.add(createButton("Technetium", gb, gbc, frame));
198                 gbc.gridx++;
199                 container.add(createButton("Ruthenium", gb, gbc, frame));
200                 gbc.gridx++;
201                 container.add(createButton("Rhodium", gb, gbc, frame));
202                 gbc.gridx++;
203                 container.add(createButton("Palladium", gb, gbc, frame));
204                 gbc.gridx++;
205                 container.add(createButton("Silver", gb, gbc, frame));
206                 gbc.gridx++;
207                 container.add(createButton("Cadmium", gb, gbc, frame));
208                 gbc.gridx++;
209                 container.add(createButton("Indium", gb, gbc, frame));
210                 gbc.gridx++;
211                 container.add(createButton("Tin", gb, gbc, frame));
212                 gbc.gridx++;
213                 container.add(createButton("Antimony", gb, gbc, frame));
214                 gbc.gridx++;
215                 container.add(createButton("Tellurium", gb, gbc, frame));
216                 gbc.gridx++;
217                 container.add(createButton("Iodine", gb, gbc, frame));
218                 gbc.gridx++;
219                 container.add(createButton("Xenon", gb, gbc, frame));
220                 gbc.gridx=0;
221                 gbc.gridy++;
222                 if(showNumbering) {
223                         container.add(createLabel("6", gb, gbc));
224                         gbc.gridx++;
225                 }
226                 container.add(createButton("Caesium", gb, gbc, frame));
227                 gbc.gridx++;
228                 container.add(createButton("Barium", gb, gbc, frame));
229                 gbc.gridx++;
230                 container.add(createButton("Lanthanum", gb, gbc, frame));
231                 gbc.gridx++;
232                 container.add(createButton("Hafnium", gb, gbc, frame));
233                 gbc.gridx++;
234                 container.add(createButton("Tantalum", gb, gbc, frame));
235                 gbc.gridx++;
236                 container.add(createButton("Tungsten", gb, gbc, frame));
237                 gbc.gridx++;
238                 container.add(createButton("Rhenium", gb, gbc, frame));
239                 gbc.gridx++;
240                 container.add(createButton("Osmium", gb, gbc, frame));
241                 gbc.gridx++;
242                 container.add(createButton("Iridium", gb, gbc, frame));
243                 gbc.gridx++;
244                 container.add(createButton("Platinum", gb, gbc, frame));
245                 gbc.gridx++;
246                 container.add(createButton("Gold", gb, gbc, frame));
247                 gbc.gridx++;
248                 container.add(createButton("Mercury", gb, gbc, frame));
249                 gbc.gridx++;
250                 container.add(createButton("Thallium", gb, gbc, frame));
251                 gbc.gridx++;
252                 container.add(createButton("Lead", gb, gbc, frame));
253                 gbc.gridx++;
254                 container.add(createButton("Bismuth", gb, gbc, frame));
255                 gbc.gridx++;
256                 container.add(createButton("Polonium", gb, gbc, frame));
257                 gbc.gridx++;
258                 container.add(createButton("Astatine", gb, gbc, frame));
259                 gbc.gridx++;
260                 container.add(createButton("Radon", gb, gbc, frame));
261                 gbc.gridx=0;
262                 gbc.gridy++;
263                 if(showNumbering) {
264                         container.add(createLabel("7", gb, gbc));
265                         gbc.gridx++;
266                 }
267                 container.add(createButton("Francium", gb, gbc, frame));
268                 gbc.gridx++;
269                 container.add(createButton("Radium", gb, gbc, frame));
270                 gbc.gridx++;
271                 container.add(createButton("Actinium", gb, gbc, frame));
272                 gbc.gridx++;
273                 container.add(createButton("Unnilquadium", gb, gbc, frame));
274                 gbc.gridx++;
275                 container.add(createButton("Unnilpentium", gb, gbc, frame));
276                 gbc.gridx++;
277                 container.add(createButton("Unnilhexium", gb, gbc, frame));
278                 gbc.gridx++;
279                 container.add(createButton("Unnilseptium", gb, gbc, frame));
280                 gbc.gridx++;
281                 container.add(createButton("Unniloctium", gb, gbc, frame));
282                 gbc.gridx++;
283                 container.add(createButton("Unnilennium", gb, gbc, frame));
284                 gbc.gridx++;
285                 container.add(createButton("Ununnilium", gb, gbc, frame));
286                 if(showNumbering) {
287                         gbc.gridx=0;
288                         gbc.gridy++;
289                         Label blankline=new Label();
290                         gb.setConstraints(blankline, gbc);
291                         container.add(blankline);
292                 }
293                 gbc.gridx=0;
294                 gbc.gridy++;
295                 if(showNumbering) {
296                         container.add(createLabel("6", gb, gbc));
297                         gbc.gridx++;
298                 }
299                 gbc.gridx+=3;
300                 container.add(createButton("Cerium", gb, gbc, frame));
301                 gbc.gridx++;
302                 container.add(createButton("Praseodymium", gb, gbc, frame));
303                 gbc.gridx++;
304                 container.add(createButton("Neodymium", gb, gbc, frame));
305                 gbc.gridx++;
306                 container.add(createButton("Promethium", gb, gbc, frame));
307                 gbc.gridx++;
308                 container.add(createButton("Samarium", gb, gbc, frame));
309                 gbc.gridx++;
310                 container.add(createButton("Europium", gb, gbc, frame));
311                 gbc.gridx++;
312                 container.add(createButton("Gadolinium", gb, gbc, frame));
313                 gbc.gridx++;
314                 container.add(createButton("Terbium", gb, gbc, frame));
315                 gbc.gridx++;
316                 container.add(createButton("Dysprosium", gb, gbc, frame));
317                 gbc.gridx++;
318                 container.add(createButton("Holmium", gb, gbc, frame));
319                 gbc.gridx++;
320                 container.add(createButton("Erbium", gb, gbc, frame));
321                 gbc.gridx++;
322                 container.add(createButton("Thulium", gb, gbc, frame));
323                 gbc.gridx++;
324                 container.add(createButton("Ytterbium", gb, gbc, frame));
325                 gbc.gridx++;
326                 container.add(createButton("Lutetium", gb, gbc, frame));
327                 gbc.gridx=0;
328                 gbc.gridy++;
329                 if(showNumbering) {
330                         container.add(createLabel("7", gb, gbc));
331                         gbc.gridx++;
332                 }
333                 gbc.gridx+=3;
334                 container.add(createButton("Thorium", gb, gbc, frame));
335                 gbc.gridx++;
336                 container.add(createButton("Protactinium", gb, gbc, frame));
337                 gbc.gridx++;
338                 container.add(createButton("Uranium", gb, gbc, frame));
339                 gbc.gridx++;
340                 container.add(createButton("Neptunium", gb, gbc, frame));
341                 gbc.gridx++;
342                 container.add(createButton("Plutonium", gb, gbc, frame));
343                 gbc.gridx++;
344                 container.add(createButton("Americium", gb, gbc, frame));
345                 gbc.gridx++;
346                 container.add(createButton("Curium", gb, gbc, frame));
347                 gbc.gridx++;
348                 container.add(createButton("Berkelium", gb, gbc, frame));
349                 gbc.gridx++;
350                 container.add(createButton("Californium", gb, gbc, frame));
351                 gbc.gridx++;
352                 container.add(createButton("Einsteinium", gb, gbc, frame));
353                 gbc.gridx++;
354                 container.add(createButton("Fermium", gb, gbc, frame));
355                 gbc.gridx++;
356                 container.add(createButton("Mendelevium", gb, gbc, frame));
357                 gbc.gridx++;
358                 container.add(createButton("Nobelium", gb, gbc, frame));
359                 gbc.gridx++;
360                 container.add(createButton("Lawrencium", gb, gbc, frame));
361         }
362         private static Label createLabel(String JavaDoc text, GridBagLayout gb, GridBagConstraints gbc) {
363                 Label label = new Label(text, Label.CENTER);
364                 gb.setConstraints(label, gbc);
365                 return label;
366         }
367         private static Button createButton(String JavaDoc elemName, GridBagLayout gb, GridBagConstraints gbc, Frame frame) {
368                 Element elem = JSci.chemistry.PeriodicTable.getElement(elemName);
369                 if(elem == null)
370                         return null;
371                 Button but=new Button(elem.toString());
372                 if(elem instanceof AlkaliMetal)
373                         but.setBackground(Color.cyan);
374                 else if(elem instanceof AlkaliEarthMetal)
375                         but.setBackground(purple);
376                 else if(elem instanceof NonMetal)
377                         but.setBackground(Color.green);
378                 else if(elem instanceof TransitionMetal)
379                         but.setBackground(Color.orange);
380                 else if(elem instanceof RareEarthMetal)
381                         but.setBackground(Color.red);
382                 else if(elem instanceof Halogen)
383                         but.setBackground(Color.yellow);
384                 else if(elem instanceof NobleGas)
385                         but.setBackground(Color.pink);
386                 but.addActionListener(new ButtonAdapter(frame, elem));
387                 gb.setConstraints(but, gbc);
388                 return but;
389         }
390         static class ButtonAdapter implements ActionListener {
391                 private final Frame owner;
392                 private final Element element;
393                 public ButtonAdapter(Frame f, Element e) {
394                         owner = f;
395                         element = e;
396                 }
397                 public void actionPerformed(ActionEvent evt) {
398                         new InfoDialog(owner, element);
399                 }
400         }
401         static class InfoDialog extends Dialog {
402                 private void displayNumber(double x) {
403                         if(x==x)
404                                 add(new Label(String.valueOf(x)));
405                         else /* NaN */
406                                 add(new Label("Unknown"));
407                 }
408                 private void displayNumber(double x,String JavaDoc units) {
409                         if(x==x)
410                                 add(new Label(String.valueOf(x)+' '+units));
411                         else /* NaN */
412                                 add(new Label("Unknown"));
413                 }
414                 public InfoDialog(Frame parent, Element e) {
415                         super(parent,e.getName());
416                         addWindowListener(new WindowAdapter() {
417                                 public void windowClosing(WindowEvent evt) {
418                                         dispose();
419                                 }
420                         });
421                         setLayout(new GridLayout(11,2));
422                         add(new Label("Atomic Number"));
423                         add(new Label(String.valueOf(e.getAtomicNumber())));
424                         add(new Label("Mass Number"));
425                         add(new Label(String.valueOf(e.getMassNumber())));
426                         add(new Label("Density"));
427                         displayNumber(e.getDensity(), "g/cm^3");
428                         add(new Label("Boiling Point"));
429                         displayNumber(e.getBoilingPoint(), "K");
430                         add(new Label("Melting Point"));
431                         displayNumber(e.getMeltingPoint(), "K");
432                         add(new Label("Atomic Radius"));
433                         displayNumber(e.getAtomicRadius());
434                         add(new Label("Covalent Radius"));
435                         displayNumber(e.getCovalentRadius());
436                         add(new Label("Electronegativity"));
437                         displayNumber(e.getElectronegativity());
438                         add(new Label("Specific Heat"));
439                         displayNumber(e.getSpecificHeat());
440                         add(new Label("Electrical Conductivity"));
441                         displayNumber(e.getElectricalConductivity());
442                         add(new Label("Thermal Conductivity"));
443                         displayNumber(e.getThermalConductivity());
444                         setDefaultSize(this, 250, 250);
445                         setVisible(true);
446                 }
447         }
448 }
449
Popular Tags