/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* FontChooserDialog.java
*
* Created on 5. M\u00E4rz 2008, 09:17
*/
package de.cismet.cismap.commons.featureservice.style;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.RenderingHints;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import de.cismet.tools.CismetThreadPool;
/**
* DOCUMENT ME!
*
* @author nh
* @version $Revision$, $Date$
*/
public class FontChooserDialog extends JDialog {
//~ Static fields/initializers ---------------------------------------------
/** Display text. */
private static final String SAMPLE_TEXT = org.openide.util.NbBundle.getMessage(
FontChooserDialog.class,
"FontChooserDialog.SAMPLE_TEXT"); // NOI18N
/** Selected index of the default fontsize. */
private static final int DEFAULT_SIZE = 4;
//~ Instance fields --------------------------------------------------------
/** The font the user has chosen. */
private Font resultFont;
/** The resulting font name. */
private String resultName;
/** The resulting font size. */
private int resultSize;
/** The resulting boldness. */
private boolean isBold;
/** The resulting italicness. */
private boolean isItalic;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox chkBold;
private javax.swing.JCheckBox chkItalic;
private javax.swing.JButton cmdCancel;
private javax.swing.JButton cmdOK;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel lblPreview;
private javax.swing.JList lstFontName;
private javax.swing.JList lstFontSize;
private javax.swing.JPanel panDialogButtons;
private javax.swing.JPanel panFontAttrib;
private javax.swing.JPanel panPreview;
private javax.swing.JPanel panPreviewLabel;
private javax.swing.JScrollPane scrFontName;
private javax.swing.JScrollPane scrFontSize;
private javax.swing.JScrollPane scrPreview;
// End of variables declaration//GEN-END:variables
//~ Constructors -----------------------------------------------------------
/**
* Creates new form FontChooserDialog.
*
* @param parent DOCUMENT ME!
*/
public FontChooserDialog(final JFrame parent) {
super(parent, true);
initComponents();
setLocationRelativeTo(parent);
}
/**
* Creates new form FontChooserDialog.
*
* @param parent DOCUMENT ME!
* @param title DOCUMENT ME!
*/
public FontChooserDialog(final JDialog parent, final String title) {
super(parent, title, true);
initComponents();
setLocationRelativeTo(parent);
}
//~ Methods ----------------------------------------------------------------
/**
* Called from the action handlers to get the font info, build a font, and set it.
*/
protected void previewFont() {
final Runnable r = new Runnable() {
@Override
public void run() {
resultName = (String)lstFontName.getSelectedValue();
final String resultSizeName = (String)lstFontSize.getSelectedValue();
final int size = Integer.parseInt(resultSizeName);
isItalic = chkItalic.isSelected();
isBold = chkBold.isSelected();
int attrs = Font.PLAIN;
if (isBold) {
attrs = Font.BOLD;
}
if (isItalic) {
attrs |= Font.ITALIC;
}
resultFont = new Font(resultName, attrs, size);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
lblPreview.setFont(resultFont);
}
});
}
};
CismetThreadPool.execute(new Thread(r, "FontChooserDialog previewFont()"));
}
/**
* Retrieve the selected font name.
*
* @return DOCUMENT ME!
*/
public String getSelectedName() {
return resultName;
}
/**
* Retrieve the selected size.
*
* @return DOCUMENT ME!
*/
public int getSelectedSize() {
return resultSize;
}
/**
* Returns the new Font.
*
* @return DOCUMENT ME!
*/
public Font getReturnStatus() {
return resultFont;
}
/**
* Selects the given font if available, the given size and style.
*
* @param font DOCUMENT ME!
* @param size DOCUMENT ME!
* @param bold DOCUMENT ME!
* @param italic DOCUMENT ME!
*/
public void setSelectedFont(final Font font, final int size, final boolean bold, final boolean italic) {
lstFontName.setSelectedValue(font.getName(), true);
lstFontSize.setSelectedValue(new Integer(size).toString(), true);
chkBold.setSelected(bold);
chkItalic.setSelected(italic);
}
/**
* 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 Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
panFontAttrib = new javax.swing.JPanel();
scrFontName = new javax.swing.JScrollPane();
lstFontName = new JList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
scrFontSize = new javax.swing.JScrollPane();
lstFontSize = new javax.swing.JList();
chkBold = new javax.swing.JCheckBox();
chkItalic = new javax.swing.JCheckBox();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
panPreview = new javax.swing.JPanel();
scrPreview = new javax.swing.JScrollPane();
panPreviewLabel = new javax.swing.JPanel();
lblPreview = new JLabel(SAMPLE_TEXT, JLabel.CENTER) {
@Override
protected void paintComponent(final Graphics g) {
final Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
super.paintComponent(g2d);
}
};
;
panDialogButtons = new javax.swing.JPanel();
cmdOK = new javax.swing.JButton();
cmdCancel = new javax.swing.JButton();
addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(final java.awt.event.WindowEvent evt) {
closeDialog(evt);
}
});
panFontAttrib.setLayout(new java.awt.GridBagLayout());
scrFontName.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrFontName.setMinimumSize(new java.awt.Dimension(200, 130));
scrFontName.setPreferredSize(new java.awt.Dimension(200, 130));
lstFontName.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
lstFontName.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
@Override
public void valueChanged(final javax.swing.event.ListSelectionEvent evt) {
lstFontNameValueChanged(evt);
}
});
scrFontName.setViewportView(lstFontName);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 10, 5, 10);
panFontAttrib.add(scrFontName, gridBagConstraints);
scrFontSize.setMinimumSize(new java.awt.Dimension(50, 130));
scrFontSize.setPreferredSize(new java.awt.Dimension(50, 130));
lstFontSize.setModel(new javax.swing.AbstractListModel() {
String[] strings = {
"8",
"9",
"10",
"11",
"12",
"14",
"16",
"18",
"20",
"24",
"30",
"36",
"48",
"60",
"72"
};
@Override
public int getSize() {
return strings.length;
}
@Override
public Object getElementAt(final int i) {
return strings[i];
}
});
lstFontSize.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
lstFontSize.setSelectedIndex(DEFAULT_SIZE);
lstFontSize.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
@Override
public void valueChanged(final javax.swing.event.ListSelectionEvent evt) {
lstFontSizeValueChanged(evt);
}
});
scrFontSize.setViewportView(lstFontSize);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 10);
panFontAttrib.add(scrFontSize, gridBagConstraints);
chkBold.setText(org.openide.util.NbBundle.getMessage(
FontChooserDialog.class,
"FontChooserDialog.chkBold.text")); // NOI18N
chkBold.addItemListener(new java.awt.event.ItemListener() {
@Override
public void itemStateChanged(final java.awt.event.ItemEvent evt) {
chkBoldItemStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 10);
panFontAttrib.add(chkBold, gridBagConstraints);
chkItalic.setText(org.openide.util.NbBundle.getMessage(
FontChooserDialog.class,
"FontChooserDialog.chkItalic.text")); // NOI18N
chkItalic.addItemListener(new java.awt.event.ItemListener() {
@Override
public void itemStateChanged(final java.awt.event.ItemEvent evt) {
chkItalicItemStateChanged(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 10);
panFontAttrib.add(chkItalic, gridBagConstraints);
jLabel1.setLabelFor(lstFontName);
jLabel1.setText(org.openide.util.NbBundle.getMessage(
FontChooserDialog.class,
"FontChooserDialog.jLabel1.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
gridBagConstraints.insets = new java.awt.Insets(5, 10, 0, 10);
panFontAttrib.add(jLabel1, gridBagConstraints);
jLabel2.setLabelFor(lstFontSize);
jLabel2.setText(org.openide.util.NbBundle.getMessage(
FontChooserDialog.class,
"FontChooserDialog.jLabel2.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 10);
panFontAttrib.add(jLabel2, gridBagConstraints);
getContentPane().add(panFontAttrib, java.awt.BorderLayout.NORTH);
panPreview.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 5, 5, 5));
panPreview.setMinimumSize(new java.awt.Dimension(400, 100));
panPreview.setPreferredSize(new java.awt.Dimension(400, 100));
panPreview.setLayout(new java.awt.BorderLayout());
scrPreview.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrPreview.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
panPreviewLabel.setBackground(new java.awt.Color(255, 255, 255));
panPreviewLabel.setLayout(new java.awt.GridBagLayout());
panPreviewLabel.add(lblPreview, new java.awt.GridBagConstraints());
scrPreview.setViewportView(panPreviewLabel);
panPreview.add(scrPreview, java.awt.BorderLayout.CENTER);
getContentPane().add(panPreview, java.awt.BorderLayout.CENTER);
panDialogButtons.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 5, 0));
panDialogButtons.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 5, 0));
cmdOK.setText(org.openide.util.NbBundle.getMessage(FontChooserDialog.class, "FontChooserDialog.cmdOK.text")); // NOI18N
cmdOK.setMaximumSize(new java.awt.Dimension(90, 23));
cmdOK.setMinimumSize(new java.awt.Dimension(90, 23));
cmdOK.setPreferredSize(new java.awt.Dimension(90, 23));
cmdOK.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdOKActionPerformed(evt);
}
});
panDialogButtons.add(cmdOK);
cmdCancel.setText(org.openide.util.NbBundle.getMessage(
FontChooserDialog.class,
"FontChooserDialog.cmdCancel.text")); // NOI18N
cmdCancel.setMaximumSize(new java.awt.Dimension(90, 23));
cmdCancel.setMinimumSize(new java.awt.Dimension(90, 23));
cmdCancel.setPreferredSize(new java.awt.Dimension(90, 23));
cmdCancel.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(final java.awt.event.ActionEvent evt) {
cmdCancelActionPerformed(evt);
}
});
panDialogButtons.add(cmdCancel);
getContentPane().add(panDialogButtons, java.awt.BorderLayout.SOUTH);
pack();
} // </editor-fold>//GEN-END:initComponents
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void closeDialog(final java.awt.event.WindowEvent evt) { //GEN-FIRST:event_closeDialog
doClose();
} //GEN-LAST:event_closeDialog
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdOKActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdOKActionPerformed
doClose();
} //GEN-LAST:event_cmdOKActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void cmdCancelActionPerformed(final java.awt.event.ActionEvent evt) { //GEN-FIRST:event_cmdCancelActionPerformed
resultFont = null;
doClose();
} //GEN-LAST:event_cmdCancelActionPerformed
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void lstFontSizeValueChanged(final javax.swing.event.ListSelectionEvent evt) { //GEN-FIRST:event_lstFontSizeValueChanged
previewFont();
} //GEN-LAST:event_lstFontSizeValueChanged
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void lstFontNameValueChanged(final javax.swing.event.ListSelectionEvent evt) { //GEN-FIRST:event_lstFontNameValueChanged
previewFont();
} //GEN-LAST:event_lstFontNameValueChanged
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void chkBoldItemStateChanged(final java.awt.event.ItemEvent evt) { //GEN-FIRST:event_chkBoldItemStateChanged
previewFont();
} //GEN-LAST:event_chkBoldItemStateChanged
/**
* DOCUMENT ME!
*
* @param evt DOCUMENT ME!
*/
private void chkItalicItemStateChanged(final java.awt.event.ItemEvent evt) { //GEN-FIRST:event_chkItalicItemStateChanged
previewFont();
} //GEN-LAST:event_chkItalicItemStateChanged
/**
* DOCUMENT ME!
*/
private void doClose() {
setVisible(false);
dispose();
}
/**
* DOCUMENT ME!
*
* @param args the command line arguments
*/
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
final FontChooserDialog dialog = new FontChooserDialog(new javax.swing.JFrame());
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(final java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
}