/* * Copyright 2016 Igor Maznitsa. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.igormaznitsa.sciareto.ui.editors.mmeditors; import java.awt.Dimension; import java.awt.Font; import java.awt.GraphicsEnvironment; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; public final class FontSelector extends javax.swing.JPanel implements ActionListener { private static final long serialVersionUID = -9217845584936911985L; public FontSelector(final Font initial) { initComponents(); final ComboBoxModel<String> modelName = new DefaultComboBoxModel<>(getAllFontFamilies()); this.comboBoxName.setModel(modelName); this.comboBoxName.setSelectedItem(initial.getName()); final ComboBoxModel<String> modelStyle = new DefaultComboBoxModel<>(new String[]{"Plain", "Bold", "Italic", "Bold+Italic"}); //NOI18N this.comboBoxStyle.setModel(modelStyle); this.textArea.setWrapStyleWord(true); this.textArea.setLineWrap(true); this.textArea.setText("Sed ut perspiciatis unde omnis iste natus error. Sit voluptatem accusantium doloremque laudantium. Totam rem aperiam, eaque ipsa quae ab illo."); //NOI18N this.textArea.setEditable(false); selectForStyle(initial.getStyle()); final List<Integer> sizes = new ArrayList<>(); for (int i = 3; i < 72; i++) { sizes.add(i); } final ComboBoxModel<Integer> modelSize = new DefaultComboBoxModel<>(sizes.toArray(new Integer[]{sizes.size()})); this.comboBoxSize.setModel(modelSize); this.comboBoxSize.setSelectedItem(initial.getSize()); this.textArea.setFont(getValue()); this.comboBoxName.addActionListener(this); this.comboBoxStyle.addActionListener(this); this.comboBoxSize.addActionListener(this); final Dimension size = new Dimension(500, 300); this.textArea.setMinimumSize(size); this.textArea.setPreferredSize(size); } private String [] getAllFontFamilies(){ return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); } @Override public void actionPerformed(ActionEvent e) { this.textArea.setFont(getValue()); } private void selectForStyle(final int style) { switch (style) { case Font.PLAIN: this.comboBoxStyle.setSelectedIndex(0); break; case Font.BOLD: this.comboBoxStyle.setSelectedIndex(1); break; case Font.ITALIC: this.comboBoxStyle.setSelectedIndex(2); break; default: this.comboBoxStyle.setSelectedIndex(3); break; } } private int getFontStyle() { switch (this.comboBoxStyle.getSelectedIndex()) { case 0: return Font.PLAIN; case 1: return Font.BOLD; case 2: return Font.ITALIC; default: return Font.BOLD | Font.ITALIC; } } public Font getValue() { final String family = (String) this.comboBoxName.getSelectedItem(); final int style = getFontStyle(); final int size = (Integer) this.comboBoxSize.getSelectedItem(); return new Font(family, style, size); } /** * 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() { java.awt.GridBagConstraints gridBagConstraints; jScrollPane1 = new javax.swing.JScrollPane(); textArea = new javax.swing.JTextArea(); jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); comboBoxName = new javax.swing.JComboBox<>(); jLabel2 = new javax.swing.JLabel(); comboBoxStyle = new javax.swing.JComboBox<>(); jLabel3 = new javax.swing.JLabel(); comboBoxSize = new javax.swing.JComboBox<>(); setLayout(new java.awt.GridBagLayout()); textArea.setColumns(20); textArea.setRows(5); jScrollPane1.setViewportView(textArea); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.ipadx = 404; gridBagConstraints.ipady = 224; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; add(jScrollPane1, gridBagConstraints); jPanel1.setLayout(new java.awt.GridBagLayout()); jLabel1.setText("Name:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 16, 0, 0); jPanel1.add(jLabel1, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.ipadx = 80; jPanel1.add(comboBoxName, gridBagConstraints); jLabel2.setText("Style:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 16, 0, 0); jPanel1.add(jLabel2, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.ipadx = 80; jPanel1.add(comboBoxStyle, gridBagConstraints); jLabel3.setText("Size:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 4; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(0, 16, 0, 0); jPanel1.add(jLabel3, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 5; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.ipadx = 80; jPanel1.add(comboBoxSize, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(8, 0, 8, 0); add(jPanel1, gridBagConstraints); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox<String> comboBoxName; private javax.swing.JComboBox<Integer> comboBoxSize; private javax.swing.JComboBox<String> comboBoxStyle; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea textArea; // End of variables declaration//GEN-END:variables }