/*
* Copyright (C) 2013 Vinu K.N
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*/
package org.domainmath.gui.common;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import javax.swing.DefaultListModel;
import javax.swing.JTextArea;
/**
*
* @author Vinu K.N
*/
public class FontDialog extends javax.swing.JDialog {
private final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
private final String[] availableFontFamilyNames = localGraphicsEnvironment.getAvailableFontFamilyNames();
private final DefaultListModel model = new DefaultListModel();
/**
* Creates new form FontDialog
*/
public FontDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
for(String fontName:availableFontFamilyNames){
model.addElement(fontName);
}
initComponents();
this.fontNamesList.setModel(model);
this.fontNamesList.setSelectedIndex(0);
this.fontStyleList.setSelectedIndex(0);
}
/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
fontNamesLabel = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
fontNamesList = new javax.swing.JList();
fontStyleLabel = new javax.swing.JLabel();
fontSelectedTextField = new javax.swing.JTextField();
fontStyleSelectedTextField = new javax.swing.JTextField();
jScrollPane2 = new javax.swing.JScrollPane();
fontStyleList = new javax.swing.JList();
fontSizeLabel = new javax.swing.JLabel();
fontSizeSelectedTextField = new javax.swing.JTextField();
jScrollPane3 = new javax.swing.JScrollPane();
fontSizeList = new javax.swing.JList();
previewPanel = new javax.swing.JPanel();
previewLabel = new javax.swing.JLabel();
cancelButton = new javax.swing.JButton();
okButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/domainmath/gui/common/resources/font_en"); // NOI18N
setTitle(bundle.getString("dialog.title")); // NOI18N
fontNamesLabel.setText(bundle.getString("fontNameLabel.text")); // NOI18N
fontNamesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
fontNamesList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
fontNamesListValueChanged(evt);
}
});
jScrollPane1.setViewportView(fontNamesList);
fontStyleLabel.setText(bundle.getString("fontStyleLabel.text")); // NOI18N
fontSelectedTextField.setEditable(false);
fontStyleSelectedTextField.setEditable(false);
fontStyleSelectedTextField.setText("Plain");
fontStyleList.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "Plain", "Bold", "Italic", "Bold Italic" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
fontStyleList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
fontStyleList.setSelectedIndex(0);
fontStyleList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
fontStyleListValueChanged(evt);
}
});
jScrollPane2.setViewportView(fontStyleList);
fontSizeLabel.setText(bundle.getString("fontSizeLabel.text")); // NOI18N
fontSizeSelectedTextField.setText("13");
fontSizeList.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "3", "5", "8", "10", "12", "14", "18", "24", "36", "48" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
fontSizeList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
fontSizeList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
fontSizeListValueChanged(evt);
}
});
jScrollPane3.setViewportView(fontSizeList);
previewPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("previewPanel.title"))); // NOI18N
previewLabel.setText("The quick brown fox jumps over the lazy dog");
javax.swing.GroupLayout previewPanelLayout = new javax.swing.GroupLayout(previewPanel);
previewPanel.setLayout(previewPanelLayout);
previewPanelLayout.setHorizontalGroup(
previewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(previewPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(previewLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
previewPanelLayout.setVerticalGroup(
previewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(previewPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(previewLabel)
.addContainerGap(75, Short.MAX_VALUE))
);
cancelButton.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/common/resources/font_en").getString("cancelButton.mnemonic").charAt(0));
cancelButton.setText(bundle.getString("cancelButton.text")); // NOI18N
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
okButton.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/common/resources/font_en").getString("OKButton.mnemonic").charAt(0));
okButton.setText(bundle.getString("OKButton.text")); // NOI18N
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(previewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(fontNamesLabel)
.addComponent(fontSelectedTextField)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(fontStyleLabel)
.addComponent(jScrollPane2)
.addComponent(fontStyleSelectedTextField))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane3)
.addComponent(fontSizeSelectedTextField)
.addGroup(layout.createSequentialGroup()
.addComponent(fontSizeLabel)
.addGap(0, 0, Short.MAX_VALUE))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 352, Short.MAX_VALUE)
.addComponent(okButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelButton)))
.addContainerGap())
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, okButton});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(fontNamesLabel)
.addComponent(fontStyleLabel)
.addComponent(fontSizeLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(fontSelectedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(fontStyleSelectedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(fontSizeSelectedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(5, 5, 5)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 169, Short.MAX_VALUE)
.addComponent(jScrollPane2)
.addComponent(jScrollPane3))
.addGap(18, 18, 18)
.addComponent(previewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cancelButton)
.addComponent(okButton))
.addContainerGap())
);
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {cancelButton, okButton});
pack();
}// </editor-fold>//GEN-END:initComponents
private void fontNamesListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_fontNamesListValueChanged
if(!evt.getValueIsAdjusting()){
this.fontSelectedTextField.setText(this.fontNamesList.getSelectedValue().toString());
System.out.println(getSelectedFont());
}
}//GEN-LAST:event_fontNamesListValueChanged
private void fontStyleListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_fontStyleListValueChanged
if(!evt.getValueIsAdjusting()){
this.fontStyleSelectedTextField.setText(this.fontStyleList.getSelectedValue().toString());
System.out.println(getSelectedFont());
}
}//GEN-LAST:event_fontStyleListValueChanged
private void fontSizeListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_fontSizeListValueChanged
if(!evt.getValueIsAdjusting()){
this.fontSizeSelectedTextField.setText(this.fontSizeList.getSelectedValue().toString());
System.out.println(getSelectedFont());
}
}//GEN-LAST:event_fontSizeListValueChanged
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
dispose();
}//GEN-LAST:event_okButtonActionPerformed
public Font getSelectedFont(){
Font f;
String fontName = this.fontNamesList.getSelectedValue().toString();
int style = getStyle();
int size = Integer.parseInt(this.fontSizeSelectedTextField.getText());
f = new Font(fontName,style,size);
this.previewLabel.setFont(f);
return f;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancelButton;
private javax.swing.JLabel fontNamesLabel;
private javax.swing.JList fontNamesList;
private javax.swing.JTextField fontSelectedTextField;
private javax.swing.JLabel fontSizeLabel;
private javax.swing.JList fontSizeList;
private javax.swing.JTextField fontSizeSelectedTextField;
private javax.swing.JLabel fontStyleLabel;
private javax.swing.JList fontStyleList;
private javax.swing.JTextField fontStyleSelectedTextField;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JButton okButton;
private javax.swing.JLabel previewLabel;
private javax.swing.JPanel previewPanel;
// End of variables declaration//GEN-END:variables
private int getStyle() {
int style=Font.PLAIN;
int selectedIndex = this.fontStyleList.getSelectedIndex();
if(selectedIndex == 0) {
style = Font.PLAIN;
}else if(selectedIndex == 1) {
style = Font.BOLD;
}else if(selectedIndex == 2) {
style = Font.ITALIC;
}else{
style = Font.BOLD+Font.ITALIC;
}
return style;
}
}