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