/*
* $RCSfile$
* $Author: egonw $
* $Date: 2007-01-04 17:26:00 +0000 (Thu, 04 Jan 2007) $
* $Revision: 7634 $
*
* Copyright (C) 1997-2008 Egone Willighagen, Miguel Rojas, Geert Josten
*
* Contact: cdk-jchempaint@lists.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
* All we ask is that proper credit is given for our work, which includes
* - but is not limited to - adding the above copyright notice to the beginning
* of your source code files, and to any copyright notice that you may distribute
* with programs based on this work.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.openscience.jchempaint.dialog;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.EmptyBorder;
import org.openscience.cdk.event.ICDKChangeListener;
import org.openscience.cdk.exception.CDKException;
import org.openscience.cdk.tools.periodictable.PeriodicTable;
import org.openscience.jchempaint.GT;
/**
* JPanel version of the periodic system.
*
* @author Egon Willighagen
* @author Geert Josten
* @author Miguel Rojas
* @author Konstantin Tokarev
* @author Mark Rijnbeek
*/
public class PeriodicTablePanel extends JPanel
{
private static final long serialVersionUID = -2539418347261469740L;
Vector<ICDKChangeListener> listeners = null;
String selectedElement = null;
private JPanel panel;
//private JLabel label;
private JLayeredPane layeredPane;
private Map<JButton,Color> buttoncolors = new HashMap<JButton,Color>();
public static int APPLICATION = 0;
/*default*/
public static int JCP = 1;
/*
* set if the button should be written with html - which takes
* too long time for loading
* APPLICATION = with html
* JCP = default
*/
/**
* Constructor of the PeriodicTablePanel object
*/
public PeriodicTablePanel()
{
super();
setLayout( new BorderLayout());
layeredPane = new JLayeredPane();
layeredPane.setPreferredSize(new Dimension(581, 435));
JPanel tp = PTPanel();
tp.setBounds(8,85,570, 340);
panel = CreateLabelProperties(null);
layeredPane.add(tp, new Integer(0));
layeredPane.add(panel, new Integer(1));
add(layeredPane);
}
private JPanel PTPanel()
{
JPanel panel = new JPanel();
listeners = new Vector<ICDKChangeListener>();
panel.setLayout(new GridLayout(0, 19));
//--------------------------------
Box.createHorizontalGlue();
panel.add(Box.createHorizontalGlue());
JButton butt = new JButton("1");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
//--------------------------------
for (int i = 0; i < 16; i++)
{
Box.createHorizontalGlue();
panel.add(Box.createHorizontalGlue());
}
butt = new JButton("18");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("1");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
panel.add(createButton(GT.get("H")));
butt = new JButton("2");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
for (int i = 0; i < 10; i++)
{
panel.add(Box.createHorizontalGlue());
}
butt = new JButton("13");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("14");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("15");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("16");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("17");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
//
panel.add(createButton(GT.get("He")));
butt = new JButton("2");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
panel.add(createButton(GT.get("Li")));
panel.add(createButton(GT.get("Be")));
for (int i = 0; i < 10; i++)
{
panel.add(Box.createHorizontalGlue());
}
//no metall
panel.add(createButton(GT.get("B")));
panel.add(createButton(GT.get("C")));
panel.add(createButton(GT.get("N")));
panel.add(createButton(GT.get("O")));
panel.add(createButton(GT.get("F")));
//
panel.add(createButton(GT.get("Ne")));
butt = new JButton("3");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
panel.add(createButton(GT.get("Na")));
panel.add(createButton(GT.get("Mg")));
butt = new JButton("3");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("4");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("5");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("6");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("7");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("8");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("9");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("10");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("11");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
butt = new JButton("12");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
//no metall
panel.add(createButton(GT.get("Al")));
panel.add(createButton(GT.get("Si")));
panel.add(createButton(GT.get("P")));
panel.add(createButton(GT.get("S")));
panel.add(createButton(GT.get("Cl")));
//
panel.add(createButton(GT.get("Ar")));
butt = new JButton("4");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
panel.add(createButton(GT.get("K")));
panel.add(createButton(GT.get("Ca")));
//transition
panel.add(createButton(GT.get("Sc")));
panel.add(createButton(GT.get("Ti")));
panel.add(createButton(GT.get("V")));
panel.add(createButton(GT.get("Cr")));
panel.add(createButton(GT.get("Mn")));
panel.add(createButton(GT.get("Fe")));
panel.add(createButton(GT.get("Co")));
panel.add(createButton(GT.get("Ni")));
panel.add(createButton(GT.get("Cu")));
panel.add(createButton(GT.get("Zn")));
//no metall
panel.add(createButton(GT.get("Ga")));
panel.add(createButton(GT.get("Ge")));
panel.add(createButton(GT.get("As")));
panel.add(createButton(GT.get("Se")));
panel.add(createButton(GT.get("Br")));
//
panel.add(createButton(GT.get("Kr")));
butt = new JButton("5");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
panel.add(createButton(GT.get("Rb")));
panel.add(createButton(GT.get("Sr")));
//transition
panel.add(createButton(GT.get("Y")));
panel.add(createButton(GT.get("Zr")));
panel.add(createButton(GT.get("Nb")));
panel.add(createButton(GT.get("Mo")));
panel.add(createButton(GT.get("Tc")));
panel.add(createButton(GT.get("Ru")));
panel.add( createButton(GT.get("Rh")));
panel.add(createButton(GT.get("Pd")));
panel.add(createButton(GT.get("Ag")));
panel.add(createButton(GT.get("Cd")));
//no metall
panel.add(createButton(GT.get("In")));
panel.add(createButton(GT.get("Sn")));
panel.add(createButton(GT.get("Sb")));
panel.add(createButton(GT.get("Te")));
panel.add(createButton(GT.get("I")));
//
panel.add(createButton(GT.get("Xe")));
butt = new JButton("6");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
panel.add(createButton(GT.get("Cs")));
panel.add(createButton(GT.get("Ba")));
//transition
panel.add(createButton(GT.get("La")));
panel.add(createButton(GT.get("Hf")));
panel.add(createButton(GT.get("Ta")));
panel.add(createButton(GT.get("W")));
panel.add(createButton(GT.get("Re")));
panel.add(createButton(GT.get("Os")));
panel.add(createButton(GT.get("Ir")));
panel.add(createButton(GT.get("Pt")));
panel.add(createButton(GT.get("Au")));
panel.add(createButton(GT.get("Hg")));
//no metall
panel.add(createButton(GT.get("Tl")));
panel.add(createButton(GT.get("Pb")));
panel.add(createButton(GT.get("Bi")));
panel.add(createButton(GT.get("Po")));
panel.add(createButton(GT.get("At")));
//
panel.add(createButton(GT.get("Rn")));
butt = new JButton("7");
butt.setBorder(new EmptyBorder(2,2,2,2));
panel.add(butt);
panel.add(createButton(GT.get("Fr")));
panel.add(createButton(GT.get("Ra")));
//transition
panel.add(createButton(GT.get("Ac")));
panel.add(createButton(GT.get("Rf")));
panel.add(createButton(GT.get("Db")));
panel.add(createButton(GT.get("Sg")));
panel.add(createButton(GT.get("Bh")));
panel.add(createButton(GT.get("Hs")));
panel.add(createButton(GT.get("Mt")));
panel.add(createButton(GT.get("Ds")));
panel.add(createButton(GT.get("Rg")));
for (int i = 0; i < 10; i++)
{
panel.add(Box.createHorizontalGlue());
}
//Acti
panel.add(createButton(GT.get("Ce")));
panel.add(createButton(GT.get("Pr")));
panel.add(createButton(GT.get("Nd")));
panel.add(createButton(GT.get("Pm")));
panel.add(createButton(GT.get("Sm")));
panel.add(createButton(GT.get("Eu")));
panel.add(createButton(GT.get("Gd")));
panel.add(createButton(GT.get("Tb")));
panel.add(createButton(GT.get("Dy")));
panel.add(createButton(GT.get("Ho")));
panel.add(createButton(GT.get("Er")));
panel.add(createButton(GT.get("Tm")));
panel.add(createButton(GT.get("Yb")));
panel.add(createButton(GT.get("Lu")));
for (int i = 0; i < 5; i++)
{
panel.add(Box.createHorizontalGlue());
}
//Lacti
panel.add( createButton(GT.get("Th")));
panel.add(createButton(GT.get("Pa")));
panel.add(createButton(GT.get("U")));
panel.add(createButton(GT.get("Np")));
panel.add(createButton(GT.get("Pu")));
panel.add(createButton(GT.get("Am")));
panel.add(createButton(GT.get("Cm")));
panel.add(createButton(GT.get("Bk")));
panel.add(createButton(GT.get("Cf")));
panel.add(createButton(GT.get("Es")));
panel.add(createButton(GT.get("Fm")));
panel.add(createButton(GT.get("Md")));
panel.add(createButton(GT.get("No")));
panel.add(createButton(GT.get("Lr")));
//End
panel.setVisible(true);
return panel;
}
/**
* create button. Define the color of the font and background
*
*@param elementS String of the element
*@return button JButton
*/
private JButton createButton(String elementS)
{
Color colorF = new Color(0,0,0);
Color colorB = null;
String serie = PeriodicTable.getChemicalSeries(elementS);
if(serie.equals("Noble Gasses"))
colorB = new Color(255,153,255);
else if(serie.equals("Halogens"))
colorB = new Color(255,153,153);
else if(serie.equals("Nonmetals"))
colorB = new Color(255,152,90);
else if(serie.equals("Metalloids"))
colorB = new Color(255,80,80);
else if(serie.equals("Metals"))
colorB = new Color(255,50,0);
else if(serie.equals("Alkali Earth Metals"))
colorB = new Color(102,150,255);
else if(serie.equals("Alkali Metals"))
colorB = new Color(130,130,255);
else if(serie.equals("Transition metals"))
colorB = new Color(255,255,110);
else if(serie.equals("Lanthanides"))
colorB = new Color(255,255,150);
else if(serie.equals("Actinides"))
colorB = new Color(255,255,200);
JButton button = new ElementButton(elementS, new ElementMouseAction(), elementS, colorF);
button.setBackground(colorB);
button.setName(elementS);
buttoncolors.put(button,colorB);
return button;
}
/**
* Sets the selectedElement attribute of the PeriodicTablePanel object
*
*@param selectedElement The new selectedElement value
*/
public void setSelectedElement(String selectedElement)
{
this.selectedElement = selectedElement;
}
/**
* Gets the selectedElement attribute of the PeriodicTablePanel object
*
*@return The selectedElement value
*/
public String getSelectedElement() throws IOException, CDKException {
return selectedElement;
}
/**
* Adds a change listener to the list of listeners
*
*@param listener The listener added to the list
*/
public void addCDKChangeListener(ICDKChangeListener listener)
{
listeners.add(listener);
}
/**
* Removes a change listener from the list of listeners
*
*@param listener The listener removed from the list
*/
public void removeCDKChangeListener(ICDKChangeListener listener)
{
listeners.remove(listener);
}
/**
* Notifies registered listeners of certain changes that have occurred in this
* model.
*/
public void fireChange()
{
EventObject event = new EventObject(this);
for (int i = 0; i < listeners.size(); i++)
{
((ICDKChangeListener) listeners.get(i)).stateChanged(event);
}
}
/**
* get translated name of element
*
* @author Geoffrey R. Hutchison
* @param atomic number of element
* @return the name element to show
*/
private String elementTranslator(int element) {
String result;
switch(element) {
case 1:
result = GT.get("Hydrogen");
break;
case 2:
result = GT.get("Helium");
break;
case 3:
result = GT.get("Lithium");
break;
case 4:
result = GT.get("Beryllium");
break;
case 5:
result = GT.get("Boron");
break;
case 6:
result = GT.get("Carbon");
break;
case 7:
result = GT.get("Nitrogen");
break;
case 8:
result = GT.get("Oxygen");
break;
case 9:
result = GT.get("Fluorine");
break;
case 10:
result = GT.get("Neon");
break;
case 11:
result = GT.get("Sodium");
break;
case 12:
result = GT.get("Magnesium");
break;
case 13:
result = GT.get("Aluminum");
break;
case 14:
result = GT.get("Silicon");
break;
case 15:
result = GT.get("Phosphorus");
break;
case 16:
result = GT.get("Sulfur");
break;
case 17:
result = GT.get("Chlorine");
break;
case 18:
result = GT.get("Argon");
break;
case 19:
result = GT.get("Potassium");
break;
case 20:
result = GT.get("Calcium");
break;
case 21:
result = GT.get("Scandium");
break;
case 22:
result = GT.get("Titanium");
break;
case 23:
result = GT.get("Vanadium");
break;
case 24:
result = GT.get("Chromium");
break;
case 25:
result = GT.get("Manganese");
break;
case 26:
result = GT.get("Iron");
break;
case 27:
result = GT.get("Cobalt");
break;
case 28:
result = GT.get("Nickel");
break;
case 29:
result = GT.get("Copper");
break;
case 30:
result = GT.get("Zinc");
break;
case 31:
result = GT.get("Gallium");
break;
case 32:
result = GT.get("Germanium");
break;
case 33:
result = GT.get("Arsenic");
break;
case 34:
result = GT.get("Selenium");
break;
case 35:
result = GT.get("Bromine");
break;
case 36:
result = GT.get("Krypton");
break;
case 37:
result = GT.get("Rubidium");
break;
case 38:
result = GT.get("Strontium");
break;
case 39:
result = GT.get("Yttrium");
break;
case 40:
result = GT.get("Zirconium");
break;
case 41:
result = GT.get("Niobium");
break;
case 42:
result = GT.get("Molybdenum");
break;
case 43:
result = GT.get("Technetium");
break;
case 44:
result = GT.get("Ruthenium");
break;
case 45:
result = GT.get("Rhodium");
break;
case 46:
result = GT.get("Palladium");
break;
case 47:
result = GT.get("Silver");
break;
case 48:
result = GT.get("Cadmium");
break;
case 49:
result = GT.get("Indium");
break;
case 50:
result = GT.get("Tin");
break;
case 51:
result = GT.get("Antimony");
break;
case 52:
result = GT.get("Tellurium");
break;
case 53:
result = GT.get("Iodine");
break;
case 54:
result = GT.get("Xenon");
break;
case 55:
result = GT.get("Cesium");
break;
case 56:
result = GT.get("Barium");
break;
case 57:
result = GT.get("Lanthanum");
break;
case 58:
result = GT.get("Cerium");
break;
case 59:
result = GT.get("Praseodymium");
break;
case 60:
result = GT.get("Neodymium");
break;
case 61:
result = GT.get("Promethium");
break;
case 62:
result = GT.get("Samarium");
break;
case 63:
result = GT.get("Europium");
break;
case 64:
result = GT.get("Gadolinium");
break;
case 65:
result = GT.get("Terbium");
break;
case 66:
result = GT.get("Dysprosium");
break;
case 67:
result = GT.get("Holmium");
break;
case 68:
result = GT.get("Erbium");
break;
case 69:
result = GT.get("Thulium");
break;
case 70:
result = GT.get("Ytterbium");
break;
case 71:
result = GT.get("Lutetium");
break;
case 72:
result = GT.get("Hafnium");
break;
case 73:
result = GT.get("Tantalum");
break;
case 74:
result = GT.get("Tungsten");
break;
case 75:
result = GT.get("Rhenium");
break;
case 76:
result = GT.get("Osmium");
break;
case 77:
result = GT.get("Iridium");
break;
case 78:
result = GT.get("Platinum");
break;
case 79:
result = GT.get("Gold");
break;
case 80:
result = GT.get("Mercury");
break;
case 81:
result = GT.get("Thallium");
break;
case 82:
result = GT.get("Lead");
break;
case 83:
result = GT.get("Bismuth");
break;
case 84:
result = GT.get("Polonium");
break;
case 85:
result = GT.get("Astatine");
break;
case 86:
result = GT.get("Radon");
break;
case 87:
result = GT.get("Francium");
break;
case 88:
result = GT.get("Radium");
break;
case 89:
result = GT.get("Actinium");
break;
case 90:
result = GT.get("Thorium");
break;
case 91:
result = GT.get("Protactinium");
break;
case 92:
result = GT.get("Uranium");
break;
case 93:
result = GT.get("Neptunium");
break;
case 94:
result = GT.get("Plutonium");
break;
case 95:
result = GT.get("Americium");
break;
case 96:
result = GT.get("Curium");
break;
case 97:
result = GT.get("Berkelium");
break;
case 98:
result = GT.get("Californium");
break;
case 99:
result = GT.get("Einsteinium");
break;
case 100:
result = GT.get("Fermium");
break;
case 101:
result = GT.get("Mendelevium");
break;
case 102:
result = GT.get("Nobelium");
break;
case 103:
result = GT.get("Lawrencium");
break;
case 104:
result = GT.get("Rutherfordium");
break;
case 105:
result = GT.get("Dubnium");
break;
case 106:
result = GT.get("Seaborgium");
break;
case 107:
result = GT.get("Bohrium");
break;
case 108:
result = GT.get("Hassium");
break;
case 109:
result = GT.get("Meitnerium");
break;
case 110:
result = GT.get("Darmstadtium");
break;
case 111:
result = GT.get("Roentgenium");
break;
case 112:
result = GT.get("Ununbium");
break;
case 113:
result = GT.get("Ununtrium");
break;
case 114:
result = GT.get("Ununquadium");
break;
case 115:
result = GT.get("Ununpentium");
break;
case 116:
result = GT.get("Ununhexium");
break;
case 117:
result = GT.get("Ununseptium");
break;
case 118:
result = GT.get("Ununoctium");
break;
default:
result = GT.get("Unknown");
}
return result;
}
/**
* get translated name of element
*
* @author Konstantin Tokarev
* @param chemical serie to translate
* @return the String to show
*/
public String serieTranslator(String serie) {
if(serie.equals("Noble Gasses"))
return GT.get("Noble Gases");
else if(serie.equals("Halogens"))
return GT.get("Halogens");
else if(serie.equals("Nonmetals"))
return GT.get("Nonmetals");
else if(serie.equals("Metalloids"))
return GT.get("Metalloids");
else if(serie.equals("Metals"))
return GT.get("Metals");
else if(serie.equals("Alkali Earth Metals"))
return GT.get("Alkali Earth Metals");
else if(serie.equals("Alkali Metals"))
return GT.get("Alkali Metals");
else if(serie.equals("Transition metals"))
return GT.get("Transition metals");
else if(serie.equals("Lanthanides"))
return GT.get("Lanthanides");
else if(serie.equals("Actinides"))
return GT.get("Actinides");
else
return GT.get("Unknown");
}
/**
* get translated name of phase
*
* @author Konstantin Tokarev
* @param phase name to translate
* @return the String to show
*/
public String phaseTranslator(String serie) {
if(serie.equals("Gas"))
return GT.get("Gas");
else if(serie.equals("Liquid"))
return GT.get("Liquid");
else if(serie.equals("Solid"))
return GT.get("Solid");
else
return GT.get("Unknown");
}
/**
* Description of the Class
*
*@author steinbeck
*@cdk.created February 10, 2004
*/
public class ElementMouseAction implements MouseListener
{
private static final long serialVersionUID = 6176240749900870566L;
public void mouseClicked(MouseEvent e) {
fireChange();
}
public void mouseEntered(MouseEvent e) {
ElementButton button = (ElementButton) e.getSource();
setSelectedElement(button.getElement());
layeredPane.remove(panel);
panel = CreateLabelProperties(button.getElement());
layeredPane.add(panel, new Integer(1));
layeredPane.repaint();
button.setBackground(Color.LIGHT_GRAY);
}
public void mouseExited(MouseEvent e) {
((ElementButton)e.getSource()).setBackground(buttoncolors.get(e.getSource()));
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
/**
* This action fragment a molecule which is on the frame JChemPaint
*
*/
class BackAction extends AbstractAction
{
private static final long serialVersionUID = -8708581865777449553L;
public void actionPerformed(ActionEvent e)
{
layeredPane.remove(panel);
panel = CreateLabelProperties(null);
layeredPane.add(panel, new Integer(1));
layeredPane.repaint();
}
}
class ElementButton extends JButton
{
private static final long serialVersionUID = 1504183423628680664L;
private String element;
/**
* Constructor for the ElementButton object
*
*@param element Description of the Parameter
*/
public ElementButton(String element)
{
super("H");
this.element = element;
}
/**
* Constructor for the ElementButton object
*
* @param element Description of the Parameter
* @param e Description of the Parameter
* @param color Description of the Parameter
* @param controlViewer Description of the Parameter
*/
public ElementButton(
String element, MouseListener e,String buttonString, Color color)
{
super(buttonString);
setForeground(color);
this.element = element;
setFont(new Font("Times-Roman",Font.BOLD, 15));
setBorder( new BevelBorder(BevelBorder.RAISED) );
setToolTipText(elementTranslator(PeriodicTable.getAtomicNumber(element) ));
addMouseListener(e);
}
/**
* Gets the element attribute of the ElementButton object
*
*@return The element value
*/
public String getElement()
{
return this.element;
}
}
/**
* create the Label
*
*@param elementSymbol String
*@return pan JPanel
*/
private JPanel CreateLabelProperties(String elementSymbol)
{
JPanel pan = new JPanel();
pan.setLayout(new BorderLayout());
Color color = new Color(255,255,255);
Point origin = new Point(120, 20);
JLabel label;
if(elementSymbol != null){
Integer group = PeriodicTable.getGroup(elementSymbol);
label = new JLabel("<html><FONT SIZE=+2>"
+elementTranslator(PeriodicTable.getAtomicNumber(elementSymbol))+" ("+elementSymbol+")</FONT><br> "
+GT.get("Atomic number")+" "+PeriodicTable.getAtomicNumber(elementSymbol)
+ (group!=null ? ", "+GT.get("Group")+" "+group : "")
+", "+GT.get("Period")+" "+ PeriodicTable.getPeriod(elementSymbol)+"</html>");
label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
pan.add(label,BorderLayout.NORTH);
label = new JLabel("<html><FONT> "
+GT.get("CAS RN:")+" "+ PeriodicTable.getCASId(elementSymbol)+"<br> "
+GT.get("Element Category:")+" "+serieTranslator(PeriodicTable.getChemicalSeries(elementSymbol))+"<br> "
+GT.get("State:")+" "+phaseTranslator(PeriodicTable.getPhase(elementSymbol))+"<br> "
+GT.get("Electronegativity:")+" "
+(PeriodicTable.getPaulingElectronegativity(elementSymbol)==null ? GT.get("undefined") : PeriodicTable.getPaulingElectronegativity(elementSymbol))+"<br>"
+"</FONT></html>");
label.setMinimumSize(new Dimension(165,150));
label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
pan.add(label,BorderLayout.CENTER);
}
else
{
label = new JLabel(" "+GT.get("Periodic Table of elements"));
label.setHorizontalTextPosition(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.CENTER);
label.setOpaque(true);
label.setBackground(color);
pan.add(label,BorderLayout.CENTER);
}
pan.setBackground(color);
pan.setForeground(Color.black);
pan.setBorder(BorderFactory.createLineBorder(Color.black));
pan.setBounds(origin.x, origin.y, 255, 160);
return pan;
}
}