1 import java.awt.*; 2 import java.awt.event.*; 3 import JSci.chemistry.*; 4 import JSci.chemistry.periodictable.*; 5 6 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 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 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 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 406 add(new Label("Unknown")); 407 } 408 private void displayNumber(double x,String units) { 409 if(x==x) 410 add(new Label(String.valueOf(x)+' '+units)); 411 else 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 |