Package org.openscience.jchempaint.dialog

Source Code of org.openscience.jchempaint.dialog.PeriodicTablePanel$BackAction

/*
*  $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;
    }
}
TOP

Related Classes of org.openscience.jchempaint.dialog.PeriodicTablePanel$BackAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.