Swing Components Java

/*
Atlantida is an open source (GPL) multilingual dictionary written in Java.
It can translate words from one language to another and pronounce them.
Copyright (C) 2006 Sergey S. http://atla.revdanica.com/
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
/**
* FontChooser
* @author Janos Szatmary, Sergei S.
* @version 003
*/
/*
 * http://forum.java.sun.com/thread.jsp?forum=57&thread=124810
 * For those who asked where's the constructor, have in mind that the constructor provided
 * is private. As the author of the code says, the use of this class is as
 * follows (supposing we are in a Frame class):
 * FontChooser.showDialog(this,"FontChooser",new Font("Dialog", 0, 12));
 * This file originally writter by Janos Szatmary, then modifyed by Sergei S. for
 * Atlantida Multilingual Dictionary http://atla.sf.net
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class FontChooser extends javax.swing.JDialog
{
  String[] styleList = new String[]
  { "Plain","Bold","Italic"};
  String[] sizeList = new String[]
  { "2","4","6","8","10","12","14","16","18","20","22","24","30","36","48","72"};
  String currentFont = null;
  int currentStyle = -1;
  int currentSize = -1;
  public boolean ok = false;
  /* ------------------------------------------------------------- */
  private FontChooser(java.awt.Frame parent,boolean modal)
  {
    super (parent,modal);
    initComponents();
    setListValues(jFontList,GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
    setListValues(jStyleList,styleList);
    setListValues(jSizeList,sizeList);
    setCurrentFont(jSample.getFont());
    pack();
  }
  private FontChooser(java.awt.Frame parent,boolean modal,Font font)
  {
    this(parent,modal);
    setCurrentFont(font);
  }
  /* ------------------------------------------------------------- */
  private void setListValues(JList list,String[] values)
  {
    if(list.getModel() instanceof DefaultListModel)
    {
      DefaultListModel model = (DefaultListModel)
                               list.getModel();
      model.removeAllElements();
      for( String value : values )
      {
        model.addElement( value );
      }
    }
  }
  /* ------------------------------------------------------------- */
  private void setSampleFont()
  {
    if(currentFont != null && currentStyle >= 0 && currentSize > 0)
    {
      jSample.setFont(new Font
                      (currentFont,currentStyle,currentSize));
    }
  }
  private String styleToString(int style)
  {
    String str = "";
    if((style&Font.BOLD) == Font.BOLD)
    {
      if(str.length() > 0)
      {
        str += ",";
      }
      str += "Bold";
    }
    if((style&Font.ITALIC) == Font.ITALIC)
    {
      if(str.length() > 0)
      {
        str += ",";
      }
      str += "Italic";
    }
    if( str.length() <= 0 )
    {
      str = "Plain";
    }
    return str;
  }
  /* ------------------------------------------------------------- */
  public Font getCurrentFont()
  {
    return jSample.getFont();
  }
  /* ------------------------------------------------------------- */
  public void setCurrentFont(Font font)
  {
    if(font==null)
    {
      font = jSample.getFont();
    }
    jFont.setText(font.getName());
    jFontActionPerformed(null);
    jStyle.setText(styleToString(font.getStyle()));
    jStyleActionPerformed(null);
    jSize.setText(Integer.toString(font.getSize()));
    jSizeActionPerformed(null);
  }
  // Create font chooser dialog.
  // If user selected a font (i.e. clicked OK button) - return the font that user has selected.
  // If user didn't click OK button - return "null".
  public static Font showDialog( Frame parent, String title, Font font)
  {
    FontChooser dialog = new FontChooser(parent,true,font);
    Point p1 = parent.getLocation();
    Dimension d1 = parent.getSize();
    Dimension d2 = dialog.getSize();
    int x = p1.x+(d1.width-d2.width)/2;
    int y = p1.y+(d1.height-d2.height)/2;
    if(x < 0)
    {
      x = 0;
    }
    if(y < 0)
    {
      y = 0;
    }
    if(title!=null)
    {
      dialog.setTitle(title);
    }
    dialog.setLocation(x,y);
    dialog.setVisible(true);
    Font newfont = null;
    if(dialog.ok)
    {
      newfont = dialog.getCurrentFont();
    }
    dialog.dispose();
    return newfont;
  }
  /** This method is called from within the constructor to
  * initialize the form.
  * WARNING: Do NOT modify this code. The content of this method is
  * always regenerated by the FormEditor.
  */
  private void initComponents()
  {
    jPanel3 = new javax.swing.JPanel();
    jFont = new javax.swing.JTextField();
    jScrollPane1 = new javax.swing.JScrollPane();
    jFontList = new javax.swing.JList();
    jPanel4 = new javax.swing.JPanel();
    jStyle = new javax.swing.JTextField();
    jScrollPane2 = new javax.swing.JScrollPane();
    jStyleList = new javax.swing.JList();
    jPanel5 = new javax.swing.JPanel();
    jSize = new javax.swing.JTextField();
    jScrollPane3 = new javax.swing.JScrollPane();
    jSizeList = new javax.swing.JList();
    jPanel1 = new javax.swing.JPanel();
    jScrollPane4 = new javax.swing.JScrollPane();
    jSample = new javax.swing.JTextArea();
    jButtons = new javax.swing.JPanel();
    jOk = new javax.swing.JButton();
    jCancel = new javax.swing.JButton();
    jLabel6 = new javax.swing.JLabel();
    getContentPane().setLayout(new java.awt.GridBagLayout());
    java.awt.GridBagConstraints gridBagConstraints1;
    setTitle("Font Chooser");
    addWindowListener(new java.awt.event.WindowAdapter()
                      {
                        public void windowClosing(java.awt.event.WindowEvent evt)
                        {
                          closeDialog(evt);
                        }
                      }
                     );
    jPanel3.setLayout(new java.awt.GridBagLayout());
    java.awt.GridBagConstraints gridBagConstraints2;
    jPanel3.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Font "));
    jFont.setColumns(24);
    jFont.addActionListener(new java.awt.event.ActionListener()
                            {
                              public void actionPerformed(java.awt.event.ActionEvent evt)
                              {
                                jFontActionPerformed(evt);
                              }
                            }
                           );
    gridBagConstraints2 = new java.awt.GridBagConstraints();
    gridBagConstraints2.gridwidth = 0;
    gridBagConstraints2.fill =
    java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints2.insets = new java.awt.Insets(0, 3, 0, 3);
    gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTHWEST;
    gridBagConstraints2.weightx = 1.0;
    jPanel3.add(jFont, gridBagConstraints2);
    jFontList.setModel(new DefaultListModel());
    jFontList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    jFontList.addListSelectionListener(new javax.swing.event.ListSelectionListener()
                                       {
                                         public void valueChanged(javax.swing.event.ListSelectionEvent evt)
                                         {
                                           jFontListValueChanged(evt);
                                         }
                                       }
                                      );
    jScrollPane1.setViewportView(jFontList);
    gridBagConstraints2 = new java.awt.GridBagConstraints();
    gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints2.insets = new java.awt.Insets(3, 3, 3, 3);
    gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTHWEST;
    gridBagConstraints2.weightx = 1.0;
    gridBagConstraints2.weighty = 1.0;
    jPanel3.add(jScrollPane1, gridBagConstraints2);
    gridBagConstraints1 = new java.awt.GridBagConstraints();
    gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 0);
    gridBagConstraints1.weightx = 0.5;
    gridBagConstraints1.weighty = 1.0;
    getContentPane().add(jPanel3, gridBagConstraints1);
    jPanel4.setLayout(new java.awt.GridBagLayout());
    java.awt.GridBagConstraints gridBagConstraints3;
    jPanel4.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Style "));
    jStyle.setColumns(18);
    jStyle.addActionListener(new java.awt.event.ActionListener()
                             {
                               public void actionPerformed(java.awt.event.ActionEvent evt)
                               {
                                 jStyleActionPerformed(evt);
                               }
                             }
                            );
    gridBagConstraints3 = new java.awt.GridBagConstraints();
    gridBagConstraints3.gridwidth = 0;
    gridBagConstraints3.fill =
    java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints3.insets = new java.awt.Insets(0, 3, 0, 3);
    gridBagConstraints3.anchor = java.awt.GridBagConstraints.NORTHWEST;
    gridBagConstraints3.weightx = 1.0;
    jPanel4.add(jStyle, gridBagConstraints3);
    jStyleList.setModel(new DefaultListModel());
    jStyleList.setVisibleRowCount(4);
    jStyleList.addListSelectionListener(new javax.swing.event.ListSelectionListener()
                                        {
                                          public void valueChanged(javax.swing.event.ListSelectionEvent evt)
                                          {
                                            jStyleListValueChanged(evt);
                                          }
                                        }
                                       );
    jScrollPane2.setViewportView(jStyleList);
    gridBagConstraints3 = new java.awt.GridBagConstraints();
    gridBagConstraints3.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints3.insets = new java.awt.Insets(3, 3, 3, 3);
    gridBagConstraints3.anchor = java.awt.GridBagConstraints.NORTHWEST;
    gridBagConstraints3.weightx = 0.5;
    gridBagConstraints3.weighty = 1.0;
    jPanel4.add(jScrollPane2, gridBagConstraints3);
    gridBagConstraints1 = new java.awt.GridBagConstraints();
    gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 0);
    gridBagConstraints1.weightx = 0.375;
    gridBagConstraints1.weighty = 1.0;
    getContentPane().add(jPanel4, gridBagConstraints1);
    jPanel5.setLayout(new java.awt.GridBagLayout());
    java.awt.GridBagConstraints gridBagConstraints4;
    jPanel5.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Size "));
    jSize.setColumns(6);
    jSize.addActionListener(new
                            java.awt.event.ActionListener()
                            {
                              public void actionPerformed(java.awt.event.ActionEvent evt)
                              {
                                jSizeActionPerformed(evt);
                              }
                            }
                           );
    gridBagConstraints4 = new java.awt.GridBagConstraints();
    gridBagConstraints4.gridwidth = 0;
    gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints4.insets = new java.awt.Insets(0, 3, 0, 3);
    gridBagConstraints4.anchor = java.awt.GridBagConstraints.NORTHWEST;
    gridBagConstraints4.weightx = 1.0;
    jPanel5.add(jSize, gridBagConstraints4);
    jSizeList.setModel(new DefaultListModel());
    jSizeList.setVisibleRowCount(4);
    jSizeList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    jSizeList.addListSelectionListener(new javax.swing.event.ListSelectionListener()
                                       {
                                         public void valueChanged(javax.swing.event.ListSelectionEvent evt)
                                         {
                                           jSizeListValueChanged(evt);
                                         }
                                       }
                                      );
    jScrollPane3.setViewportView(jSizeList);
    gridBagConstraints4 = new java.awt.GridBagConstraints();
    gridBagConstraints4.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints4.insets = new java.awt.Insets(3, 3, 3, 3);
    gridBagConstraints4.anchor = java.awt.GridBagConstraints.NORTHWEST;
    gridBagConstraints4.weightx = 0.25;
    gridBagConstraints4.weighty = 1.0;
    jPanel5.add(jScrollPane3, gridBagConstraints4);
    gridBagConstraints1 = new java.awt.GridBagConstraints();
    gridBagConstraints1.gridwidth = 0;
    gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints1.insets = new java.awt.Insets(5, 5, 0, 5);
    gridBagConstraints1.weightx = 0.125;
    gridBagConstraints1.weighty = 1.0;
    getContentPane().add(jPanel5, gridBagConstraints1);
    jPanel1.setLayout(new java.awt.GridBagLayout());
    java.awt.GridBagConstraints gridBagConstraints5;
    jPanel1.setBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EtchedBorder(), " Sample "));
    jSample.setWrapStyleWord(true);
    jSample.setLineWrap(true);
    jSample.setColumns(20);
    jSample.setRows(3);
    jSample.setText("The quick brown fox jumped over the lazy dog.");
    jScrollPane4.setViewportView(jSample);
    gridBagConstraints5 = new java.awt.GridBagConstraints();
    gridBagConstraints5.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints5.insets = new java.awt.Insets(0, 3, 3, 3);
    gridBagConstraints5.weightx = 1.0;
    gridBagConstraints5.weighty = 1.0;
    jPanel1.add(jScrollPane4, gridBagConstraints5);
    gridBagConstraints1 = new java.awt.GridBagConstraints();
    gridBagConstraints1.gridwidth = 0;
    gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints1.insets = new java.awt.Insets(0, 5, 0, 5);
    gridBagConstraints1.anchor = java.awt.GridBagConstraints.NORTHWEST;
    gridBagConstraints1.weightx = 1.0;
    getContentPane().add(jPanel1, gridBagConstraints1);
    jButtons.setLayout(new java.awt.GridBagLayout());
    java.awt.GridBagConstraints gridBagConstraints6;
    jOk.setMnemonic(KeyEvent.VK_O);
    jOk.setText("OK");
    jOk.setRequestFocusEnabled(false);
    jOk.addActionListener(new java.awt.event.ActionListener()
                          {
                            public void actionPerformed(java.awt.event.ActionEvent evt)
                            {
                              jOkActionPerformed(evt);
                            }
                          }
                         );
    gridBagConstraints6 = new java.awt.GridBagConstraints();
    gridBagConstraints6.insets = new java.awt.Insets(5, 5, 5, 0);
    gridBagConstraints6.anchor = java.awt.GridBagConstraints.WEST;
    jButtons.add(jOk, gridBagConstraints6);
    jCancel.setMnemonic(KeyEvent.VK_C);
    jCancel.setText("Cancel");
    jCancel.setRequestFocusEnabled(false);
    jCancel.addActionListener(new
                              java.awt.event.ActionListener()
                              {
                                public void actionPerformed(java.awt.event.ActionEvent evt)
                                {
                                  jCancelActionPerformed(evt);
                                }
                              }
                             );
    gridBagConstraints6 = new java.awt.GridBagConstraints();
    gridBagConstraints6.gridwidth = 0;
    gridBagConstraints6.insets = new java.awt.Insets(5, 5, 5, 5);
    gridBagConstraints6.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints6.weightx = 1.0;
    jButtons.add(jCancel, gridBagConstraints6);
    gridBagConstraints6 = new java.awt.GridBagConstraints();
    gridBagConstraints6.weightx = 1.0;
    jButtons.add(jLabel6, gridBagConstraints6);
    gridBagConstraints1 = new java.awt.GridBagConstraints();
    gridBagConstraints1.gridwidth = 0;
    gridBagConstraints1.anchor = java.awt.GridBagConstraints.SOUTHWEST;
    gridBagConstraints1.weightx = 1.0;
    getContentPane().add(jButtons, gridBagConstraints1);
  }
  private void jCancelActionPerformed(java.awt.event.ActionEvent evt)
  {
    // Add your handling code here:
    setVisible(false);
  }
  private void jOkActionPerformed (java.awt.event.ActionEvent evt)
  {
    // Add your handling code here:
    ok = true;
    setVisible(false);
  }
  private void jSizeActionPerformed (java.awt.event.ActionEvent evt)
  {
    // Add your handling code here:
    int size = Integer.parseInt(jSize.getText());
    if(size > 0)
    {
      currentSize = size;
      setSampleFont();
    }
  }
  private void jStyleActionPerformed (java.awt.event.ActionEvent evt)
  {
    // Add your handling code here:
    StringTokenizer st = new StringTokenizer(jStyle.getText(),",");
    int style = 0;
    while(st.hasMoreTokens())
    {
      String str = st.nextToken().trim();
      if(str.equalsIgnoreCase("Plain"))
      {
        style |= Font.PLAIN;
      }
      else
        if(str.equalsIgnoreCase("Bold"))
      {
        style |= Font.BOLD;
      }
      else
        if(str.equalsIgnoreCase("Italic"))
      {
        style |= Font.ITALIC;
      }
    }
    if(style >= 0)
    {
      currentStyle = style;
      setSampleFont();
    }
  }
  private void jFontActionPerformed (java.awt.event.ActionEvent evt)
  {
    // Add your handling code here:
    DefaultListModel model = (DefaultListModel)
                             jFontList.getModel();
    if(model.indexOf(jFont.getText()) >= 0)
    {
      currentFont = jFont.getText();
      setSampleFont();
    }
  }
  private void jStyleListValueChanged(javax.swing.event.ListSelectionEvent evt)
  {
    // Add your handling code here:
    String str = "";
    Object[] values = jStyleList.getSelectedValues();
    if(values.length > 0)
    {
      int j;
      for(j=0; j < values.length; j++)
      {
        String s = (String) values[j];
        if(s.equalsIgnoreCase("Plain"))
        {
          str = "Plain";  break;
        }
        if(str.length() > 0)
        {
          str += ",";
        }
        str += (String) values[j];
      }
    }
    else
    {
      str = styleToString(currentStyle);
    }
    jStyle.setText(str);
    jStyleActionPerformed(null);
  }
  private void jSizeListValueChanged(javax.swing.event.ListSelectionEvent evt)
  {
    // Add your handling code here:
    String str = (String) jSizeList.getSelectedValue();
    if(str==null || str.length() <= 0)
    {
      str = Integer.toString(currentSize);
    }
    jSize.setText(str);
    jSizeActionPerformed(null);
  }
  private void jFontListValueChanged(javax.swing.event.ListSelectionEvent evt)
  {
    // Add your handling code here:
    String str = (String) jFontList.getSelectedValue();
    if(str==null || str.length() <= 0)
    {
      str = currentFont;
    }
    jFont.setText(str);
    jFontActionPerformed(null);
  }
  /** Closes the dialog */
  private void closeDialog(java.awt.event.WindowEvent evt)
  {
    setVisible (false);
  }
  // Variables declaration - do not modify
  private javax.swing.JPanel jPanel3;
  private javax.swing.JTextField jFont;
  private javax.swing.JScrollPane jScrollPane1;
  private javax.swing.JList jFontList;
  private javax.swing.JPanel jPanel4;
  private javax.swing.JTextField jStyle;
  private javax.swing.JScrollPane jScrollPane2;
  private javax.swing.JList jStyleList;
  private javax.swing.JPanel jPanel5;
  private javax.swing.JTextField jSize;
  private javax.swing.JScrollPane jScrollPane3;
  private javax.swing.JList jSizeList;
  private javax.swing.JPanel jPanel1;
  private javax.swing.JScrollPane jScrollPane4;
  private javax.swing.JTextArea jSample;
  private javax.swing.JPanel jButtons;
  private javax.swing.JButton jOk;
  private javax.swing.JButton jCancel;
  private javax.swing.JLabel jLabel6;
  // End of variables declaration
}