Advanced Font Chooser revised by pole : Font Chooser « Tiny Application « Java

Home
Java
1.2D Graphics GUI
2.3D
3.Advanced Graphics
4.Ant
5.Apache Common
6.Chart
7.Class
8.Collections Data Structure
9.Data Type
10.Database SQL JDBC
11.Design Pattern
12.Development Class
13.EJB3
14.Email
15.Event
16.File Input Output
17.Game
18.Generics
19.GWT
20.Hibernate
21.I18N
22.J2EE
23.J2ME
24.JDK 6
25.JNDI LDAP
26.JPA
27.JSP
28.JSTL
29.Language Basics
30.Network Protocol
31.PDF RTF
32.Reflection
33.Regular Expressions
34.Scripting
35.Security
36.Servlets
37.Spring
38.Swing Components
39.Swing JFC
40.SWT JFace Eclipse
41.Threads
42.Tiny Application
43.Velocity
44.Web Services SOA
45.XML
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
SCJP
Java » Tiny Application » Font ChooserScreenshots 
Advanced Font Chooser revised by pole
Advanced Font Chooser revised by pole

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.font.TextAttribute;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.ToolTipManager;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.MatteBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import static java.awt.font.TextAttribute.*;

public class FontChooserWithPole extends JDialog {
  protected int Closed_Option = JOptionPane.CLOSED_OPTION;

  protected InputList fontNameInputList = new InputList(fontNames, "Name:");

  protected InputList fontSizeInputList = new InputList(fontSizes, "Size:");

  protected MutableAttributeSet attributes;

  protected JCheckBox boldCheckBox = new JCheckBox("Bold");

  protected JCheckBox italicCheckBox = new JCheckBox("Italic");

  protected JCheckBox underlineCheckBox = new JCheckBox("Underline");

  protected JCheckBox strikethroughCheckBox = new JCheckBox("Strikethrough");

  protected JCheckBox subscriptCheckBox = new JCheckBox("Subscript");

  protected JCheckBox superscriptCheckBox = new JCheckBox("Superscript");

  protected ColorComboBox colorComboBox;

  protected FontLabel previewLabel;

  public static String[] fontNames;

  public static String[] fontSizes;

  private static final String PREVIEW_TEXT = "Preview Font";


  public FontChooserWithPole(JFrame owner) {
    super(owner, "Font Chooser"false);
    getContentPane().setLayout(
        new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));

    JPanel p = new JPanel(new GridLayout(12102));
    p.setBorder(new TitledBorder(new EtchedBorder()"Font"));
    p.add(fontNameInputList);
    fontNameInputList.setDisplayedMnemonic('n');
    fontNameInputList.setToolTipText("Font name");

    p.add(fontSizeInputList);
    fontSizeInputList.setDisplayedMnemonic('s');
    fontSizeInputList.setToolTipText("Font size");
    getContentPane().add(p);

    p = new JPanel(new GridLayout(23105));
    p.setBorder(new TitledBorder(new EtchedBorder()"Effects"));
    boldCheckBox.setMnemonic('b');
    boldCheckBox.setToolTipText("Bold font");
    p.add(boldCheckBox);

    italicCheckBox.setMnemonic('i');
    italicCheckBox.setToolTipText("Italic font");
    p.add(italicCheckBox);

    underlineCheckBox.setMnemonic('u');
    underlineCheckBox.setToolTipText("Underline font");
    p.add(underlineCheckBox);

    strikethroughCheckBox.setMnemonic('r');
    strikethroughCheckBox.setToolTipText("Strikethrough font");
    p.add(strikethroughCheckBox);

    subscriptCheckBox.setMnemonic('t');
    subscriptCheckBox.setToolTipText("Subscript font");
    p.add(subscriptCheckBox);

    superscriptCheckBox.setMnemonic('p');
    superscriptCheckBox.setToolTipText("Superscript font");
    p.add(superscriptCheckBox);
    getContentPane().add(p);

    getContentPane().add(Box.createVerticalStrut(5));
    p = new JPanel();
    p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
    p.add(Box.createHorizontalStrut(10));
    JLabel lbl = new JLabel("Color:");
    lbl.setDisplayedMnemonic('c');
    p.add(lbl);
    p.add(Box.createHorizontalStrut(20));
    colorComboBox = new ColorComboBox();
    lbl.setLabelFor(colorComboBox);
    colorComboBox.setToolTipText("Font color");
    ToolTipManager.sharedInstance().registerComponent(colorComboBox);
    p.add(colorComboBox);
    p.add(Box.createHorizontalStrut(10));
    getContentPane().add(p);

    p = new JPanel(new BorderLayout());
    p.setBorder(new TitledBorder(new EtchedBorder()"Preview"));
    previewLabel = new FontLabel(PREVIEW_TEXT);

    p.add(previewLabel, BorderLayout.CENTER);
    getContentPane().add(p);

    p = new JPanel(new FlowLayout());
    JPanel p1 = new JPanel(new GridLayout(12102));
    JButton btOK = new JButton("OK");
    btOK.setToolTipText("Save and exit");
    getRootPane().setDefaultButton(btOK);
    ActionListener actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Closed_Option = JOptionPane.OK_OPTION;
        dispose();
      }
    };
    btOK.addActionListener(actionListener);
    p1.add(btOK);

    JButton btCancel = new JButton("Cancel");
    btCancel.setToolTipText("Exit without save");
    actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Closed_Option = JOptionPane.CANCEL_OPTION;
        dispose();
      }
    };
    btCancel.addActionListener(actionListener);
    p1.add(btCancel);
    p.add(p1);
    getContentPane().add(p);

    pack();
    setResizable(false);

    ListSelectionListener listSelectListener = new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        updatePreview();
      }
    };  fontNameInputList.addListSelectionListener(listSelectListener);
    fontSizeInputList.addListSelectionListener(listSelectListener);

    actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        updatePreview();
      }
    };
    boldCheckBox.addActionListener(actionListener);
    italicCheckBox.addActionListener(actionListener);
    colorComboBox.addActionListener(actionListener);
    underlineCheckBox.addActionListener(actionListener);
    strikethroughCheckBox.addActionListener(actionListener);
    subscriptCheckBox.addActionListener(actionListener);
    superscriptCheckBox.addActionListener(actionListener);
  }

  public void setAttributes(AttributeSet a) {
    attributes = new SimpleAttributeSet(a);
    String name = StyleConstants.getFontFamily(a);
    fontNameInputList.setSelected(name);
    int size = StyleConstants.getFontSize(a);
    fontSizeInputList.setSelectedInt(size);
    boldCheckBox.setSelected(StyleConstants.isBold(a));
    italicCheckBox.setSelected(StyleConstants.isItalic(a));
    underlineCheckBox.setSelected(StyleConstants.isUnderline(a));
    strikethroughCheckBox.setSelected(StyleConstants.isStrikeThrough(a));
    subscriptCheckBox.setSelected(StyleConstants.isSubscript(a));
    superscriptCheckBox.setSelected(StyleConstants.isSuperscript(a));
    colorComboBox.setSelectedItem(StyleConstants.getForeground(a));
    updatePreview();
  }
  public AttributeSet getAttributes() {
    if (attributes == null)
      return null;
    StyleConstants.setFontFamily(attributes, fontNameInputList
        .getSelected());
    StyleConstants.setFontSize(attributes, fontSizeInputList
        .getSelectedInt());
    StyleConstants.setBold(attributes, boldCheckBox.isSelected());
    StyleConstants.setItalic(attributes, italicCheckBox.isSelected());
    StyleConstants.setUnderline(attributes, underlineCheckBox.isSelected());
    StyleConstants.setStrikeThrough(attributes, strikethroughCheckBox
        .isSelected());
    StyleConstants.setSubscript(attributes, subscriptCheckBox.isSelected());
    StyleConstants.setSuperscript(attributes, superscriptCheckBox
        .isSelected());
    StyleConstants.setForeground(attributes, (ColorcolorComboBox.getSelectedItem());
    return attributes;
  }

  public int getOption() {
    return Closed_Option;
  }

  protected void updatePreview() {
    StringBuilder previewText = new StringBuilder(PREVIEW_TEXT);
    String name = fontNameInputList.getSelected();
    int size = fontSizeInputList.getSelectedInt();
    if (size <= 0)
      return;

    Map<TextAttribute, Object> attributes = new HashMap<TextAttribute, Object>();

    attributes.put(FAMILY, name);
    attributes.put(SIZE, (float)size);

    // Using HTML to force JLabel manage natively unsupported attributes
    if (underlineCheckBox.isSelected() || strikethroughCheckBox.isSelected()){
      previewText.insert(0,"<html>");
      previewText.append("</html>");
    }

    if (underlineCheckBox.isSelected()){
      attributes.put(UNDERLINE, UNDERLINE_LOW_ONE_PIXEL);
      previewText.insert(6,"<u>");
      previewText.insert(previewText.length() 7"</u>");
    }
    if (strikethroughCheckBox.isSelected()){
      attributes.put(STRIKETHROUGH, STRIKETHROUGH_ON);
      previewText.insert(6,"<strike>");
      previewText.insert(previewText.length() 7"</strike>");
    }


    if (boldCheckBox.isSelected())
      attributes.put(WEIGHT, WEIGHT_BOLD);
    if (italicCheckBox.isSelected())
      attributes.put(POSTURE, POSTURE_OBLIQUE);

    if (subscriptCheckBox.isSelected()){
      attributes.put(SUPERSCRIPT, SUPERSCRIPT_SUB);
    }
    if (superscriptCheckBox.isSelected())
      attributes.put(SUPERSCRIPT, SUPERSCRIPT_SUPER);

    superscriptCheckBox.setEnabled(!subscriptCheckBox.isSelected());
    subscriptCheckBox.setEnabled(!superscriptCheckBox.isSelected());


    Font fn = new Font(attributes);

    previewLabel.setText(previewText.toString());
    previewLabel.setFont(fn);

    Color c = (ColorcolorComboBox.getSelectedItem();
    previewLabel.setForeground(c);
    previewLabel.repaint();
  }

  public static void main(String argv[]) {
    GraphicsEnvironment ge = GraphicsEnvironment
        .getLocalGraphicsEnvironment();
    fontNames = ge.getAvailableFontFamilyNames();
    fontSizes = new String[] { "8""9""10""11""12""14""16",
        "18""20""22""24""26""28""36""48""72" };

    FontChooserWithPole dlg = new FontChooserWithPole(new JFrame());
    SimpleAttributeSet a = new SimpleAttributeSet();
    StyleConstants.setFontFamily(a, "Monospaced");
    StyleConstants.setFontSize(a, 12);
    dlg.setAttributes(a);
    dlg.setVisible(true);
  }
}

class InputList extends JPanel implements ListSelectionListener, ActionListener {
  protected JLabel label = new JLabel();

  protected JTextField textfield;

  protected JList list;

  protected JScrollPane scroll;

  public InputList(String[] data, String title) {
    setLayout(null);

    add(label);
    textfield = new OpelListText();
    textfield.addActionListener(this);
    label.setLabelFor(textfield);
    add(textfield);
    list = new OpelListList(data);
    list.setVisibleRowCount(4);
    list.addListSelectionListener(this);
    scroll = new JScrollPane(list);
    add(scroll);
  }

  public InputList(String title, int numCols) {
    setLayout(null);
    label = new OpelListLabel(title, JLabel.LEFT);
    add(label);
    textfield = new OpelListText(numCols);
    textfield.addActionListener(this);
    label.setLabelFor(textfield);
    add(textfield);
    list = new OpelListList();
    list.setVisibleRowCount(4);
    list.addListSelectionListener(this);
    scroll = new JScrollPane(list);
    add(scroll);
  }

  public void setToolTipText(String text) {
    super.setToolTipText(text);
    label.setToolTipText(text);
    textfield.setToolTipText(text);
    list.setToolTipText(text);
  }

  public void setDisplayedMnemonic(char ch) {
    label.setDisplayedMnemonic(ch);
  }

  public void setSelected(String sel) {
    list.setSelectedValue(sel, true);
    textfield.setText(sel);
  }

  public String getSelected() {
    return textfield.getText();
  }

  public void setSelectedInt(int value) {
    setSelected(Integer.toString(value));
  }

  public int getSelectedInt() {
    try {
      return Integer.parseInt(getSelected());
    catch (NumberFormatException ex) {
      return -1;
    }
  }

  public void valueChanged(ListSelectionEvent e) {
    Object obj = list.getSelectedValue();
    if (obj != null)
      textfield.setText(obj.toString());
  }

  public void actionPerformed(ActionEvent e) {
    ListModel model = list.getModel();
    String key = textfield.getText().toLowerCase();
    for (int k = 0; k < model.getSize(); k++) {
      String data = (Stringmodel.getElementAt(k);
      if (data.toLowerCase().startsWith(key)) {
        list.setSelectedValue(data, true);
        break;
      }
    }
  }

  public void addListSelectionListener(ListSelectionListener lst) {
    list.addListSelectionListener(lst);
  }

  public Dimension getPreferredSize() {
    Insets ins = getInsets();
    Dimension labelSize = label.getPreferredSize();
    Dimension textfieldSize = textfield.getPreferredSize();
    Dimension scrollPaneSize = scroll.getPreferredSize();
    int w = Math.max(Math.max(labelSize.width, textfieldSize.width),
        scrollPaneSize.width);
    int h = labelSize.height + textfieldSize.height + scrollPaneSize.height;
    return new Dimension(w + ins.left + ins.right, h + ins.top + ins.bottom);
  }

  public Dimension getMaximumSize() {
    return getPreferredSize();
  }

  public Dimension getMinimumSize() {
    return getPreferredSize();
  }

  public void doLayout() {
    Insets ins = getInsets();
    Dimension size = getSize();
    int x = ins.left;
    int y = ins.top;
    int w = size.width - ins.left - ins.right;
    int h = size.height - ins.top - ins.bottom;

    Dimension labelSize = label.getPreferredSize();
    label.setBounds(x, y, w, labelSize.height);
    y += labelSize.height;
    Dimension textfieldSize = textfield.getPreferredSize();
    textfield.setBounds(x, y, w, textfieldSize.height);
    y += textfieldSize.height;
    scroll.setBounds(x, y, w, h - y);
  }

  public void appendResultSet(ResultSet results, int index,
      boolean toTitleCase) {
    textfield.setText("");
    DefaultListModel model = new DefaultListModel();
    try {
      while (results.next()) {
        String str = results.getString(index);
        if (toTitleCase) {
          str = Character.toUpperCase(str.charAt(0))
              + str.substring(1);
        }

        model.addElement(str);
      }
    catch (SQLException ex) {
      System.err.println("appendResultSet: " + ex.toString());
    }
    list.setModel(model);
    if (model.getSize() 0)
      list.setSelectedIndex(0);
  }

  class OpelListLabel extends JLabel {
    public OpelListLabel(String text, int alignment) {
      super(text, alignment);
    }

    public AccessibleContext getAccessibleContext() {
      return InputList.this.getAccessibleContext();
    }
  }

  class OpelListText extends JTextField {
    public OpelListText() {
    }

    public OpelListText(int numCols) {
      super(numCols);
    }

    public AccessibleContext getAccessibleContext() {
      return InputList.this.getAccessibleContext();
    }
  }

  class OpelListList extends JList {
    public OpelListList() {
    }

    public OpelListList(String[] data) {
      super(data);
    }

    public AccessibleContext getAccessibleContext() {
      return InputList.this.getAccessibleContext();
    }
  }

  // Accessibility Support

  public AccessibleContext getAccessibleContext() {
    if (accessibleContext == null)
      accessibleContext = new AccessibleOpenList();
    return accessibleContext;
  }

  protected class AccessibleOpenList extends AccessibleJComponent {

    public String getAccessibleName() {
      System.out.println("getAccessibleName: " + accessibleName);
      if (accessibleName != null)
        return accessibleName;
      return label.getText();
    }

    public AccessibleRole getAccessibleRole() {
      return AccessibleRole.LIST;
    }
  }
}

class FontLabel extends JLabel {
  public FontLabel(String text) {
    super(text, JLabel.CENTER);
    setBackground(Color.white);
    setForeground(Color.black);
    setOpaque(true);
    setBorder(new LineBorder(Color.black));
    setPreferredSize(new Dimension(12040));
  }
}

class ColorComboBox extends JComboBox {

  public ColorComboBox() {
    int[] values = new int[] { 0128192255 };
    for (int r = 0; r < values.length; r++)
      for (int g = 0; g < values.length; g++)
        for (int b = 0; b < values.length; b++) {
          Color c = new Color(values[r], values[g], values[b]);
          addItem(c);
        }
    setRenderer(new ColorComboRenderer1());

  }

  class ColorComboRenderer1 extends JPanel implements ListCellRenderer {
    protected Color m_c = Color.black;

    public ColorComboRenderer1() {
      super();
      setBorder(new CompoundBorder(new MatteBorder(210210,
          Color.white)new LineBorder(Color.black)));
    }

    public Component getListCellRendererComponent(JList list, Object obj,
        int row, boolean sel, boolean hasFocus) {
      if (obj instanceof Color)
        m_c = (Colorobj;
      return this;
    }

    public void paint(Graphics g) {
      setBackground(m_c);
      super.paint(g);
    }

  }

}  
 
 


           
       
Related examples in the same category
1.Advanced Font Chooser Advanced Font Chooser
2.FontChooserFontChooser
3.A font selection dialogA font selection dialog
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.