1 package org.simantics.spreadsheet.ui;
\r
3 import java.awt.BorderLayout;
\r
4 import java.awt.Component;
\r
5 import java.awt.Dimension;
\r
6 import java.awt.Font;
\r
7 import java.awt.Frame;
\r
8 import java.awt.GraphicsEnvironment;
\r
9 import java.awt.GridLayout;
\r
10 import java.awt.event.ActionEvent;
\r
11 import java.awt.event.FocusAdapter;
\r
12 import java.awt.event.FocusEvent;
\r
13 import java.awt.event.KeyAdapter;
\r
14 import java.awt.event.KeyEvent;
\r
15 import java.awt.event.WindowAdapter;
\r
16 import java.awt.event.WindowEvent;
\r
18 import javax.swing.AbstractAction;
\r
19 import javax.swing.Action;
\r
20 import javax.swing.ActionMap;
\r
21 import javax.swing.BorderFactory;
\r
22 import javax.swing.BoxLayout;
\r
23 import javax.swing.InputMap;
\r
24 import javax.swing.JButton;
\r
25 import javax.swing.JComponent;
\r
26 import javax.swing.JDialog;
\r
27 import javax.swing.JLabel;
\r
28 import javax.swing.JList;
\r
29 import javax.swing.JPanel;
\r
30 import javax.swing.JScrollPane;
\r
31 import javax.swing.JTextField;
\r
32 import javax.swing.KeyStroke;
\r
33 import javax.swing.ListSelectionModel;
\r
34 import javax.swing.SwingUtilities;
\r
35 import javax.swing.border.Border;
\r
36 import javax.swing.event.DocumentEvent;
\r
37 import javax.swing.event.DocumentListener;
\r
38 import javax.swing.event.ListSelectionEvent;
\r
39 import javax.swing.event.ListSelectionListener;
\r
40 import javax.swing.text.BadLocationException;
\r
41 import javax.swing.text.Document;
\r
42 import javax.swing.text.JTextComponent;
\r
43 import javax.swing.text.Position;
\r
46 * The <code>JFontChooser</code> class is a swing component
\r
47 * for font selection.
\r
48 * This class has <code>JFileChooser</code> like APIs.
\r
49 * The following code pops up a font chooser dialog.
\r
51 * JFontChooser fontChooser = new JFontChooser();
\r
52 * int result = fontChooser.showDialog(parent);
\r
53 * if (result == JFontChooser.OK_OPTION)
\r
55 * Font font = fontChooser.getSelectedFont();
\r
56 * System.out.println("Selected Font : " + font);
\r
60 public class JFontChooser extends JComponent
\r
62 private static final long serialVersionUID = -8803227254655562584L;
\r
65 * Return value from <code>showDialog()</code>.
\r
68 public static final int OK_OPTION = 0;
\r
70 * Return value from <code>showDialog()</code>.
\r
73 public static final int CANCEL_OPTION = 1;
\r
75 * Return value from <code>showDialog()</code>.
\r
78 public static final int ERROR_OPTION = -1;
\r
79 private static final Font DEFAULT_SELECTED_FONT = new Font("Serif", Font.PLAIN, 12);
\r
80 private static final Font DEFAULT_FONT = new Font("Dialog", Font.PLAIN, 10);
\r
81 private static final int[] FONT_STYLE_CODES =
\r
83 Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD | Font.ITALIC
\r
85 private static final String[] DEFAULT_FONT_SIZE_STRINGS =
\r
87 "8", "9", "10", "11", "12", "14", "16", "18", "20",
\r
88 "22", "24", "26", "28", "36", "48", "72",
\r
91 // instance variables
\r
92 protected int dialogResultValue = ERROR_OPTION;
\r
96 private String[] fontStyleNames = null;
\r
97 private String[] fontFamilyNames = null;
\r
98 private String[] fontSizeStrings = null;
\r
99 private JTextField fontFamilyTextField = null;
\r
100 private JTextField fontStyleTextField = null;
\r
101 private JTextField fontSizeTextField = null;
\r
102 private JList fontNameList = null;
\r
103 private JList fontStyleList = null;
\r
104 private JList fontSizeList = null;
\r
105 private JPanel fontNamePanel = null;
\r
106 private JPanel fontStylePanel = null;
\r
107 private JPanel fontSizePanel = null;
\r
108 private JPanel samplePanel = null;
\r
109 private JTextField sampleText = null;
\r
112 * Constructs a <code>JFontChooser</code> object.
\r
114 public JFontChooser()
\r
116 this(DEFAULT_FONT_SIZE_STRINGS);
\r
120 * Constructs a <code>JFontChooser</code> object using the given font size array.
\r
121 * @param fontSizeStrings the array of font size string.
\r
123 public JFontChooser(String[] fontSizeStrings)
\r
125 if (fontSizeStrings == null)
\r
127 fontSizeStrings = DEFAULT_FONT_SIZE_STRINGS;
\r
129 this.fontSizeStrings = fontSizeStrings;
\r
131 JPanel selectPanel = new JPanel();
\r
132 selectPanel.setLayout(new BoxLayout(selectPanel, BoxLayout.X_AXIS));
\r
133 selectPanel.add(getFontFamilyPanel());
\r
134 selectPanel.add(getFontStylePanel());
\r
135 selectPanel.add(getFontSizePanel());
\r
137 JPanel contentsPanel = new JPanel();
\r
138 contentsPanel.setLayout(new GridLayout(2, 1));
\r
139 contentsPanel.add(selectPanel, BorderLayout.NORTH);
\r
140 contentsPanel.add(getSamplePanel(), BorderLayout.CENTER);
\r
142 this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
\r
143 this.add(contentsPanel);
\r
144 this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
\r
145 this.setSelectedFont(DEFAULT_SELECTED_FONT);
\r
148 public JTextField getFontFamilyTextField()
\r
150 if (fontFamilyTextField == null)
\r
152 fontFamilyTextField = new JTextField();
\r
153 fontFamilyTextField.addFocusListener(
\r
154 new TextFieldFocusHandlerForTextSelection(fontFamilyTextField));
\r
155 fontFamilyTextField.addKeyListener(
\r
156 new TextFieldKeyHandlerForListSelectionUpDown(getFontFamilyList()));
\r
157 fontFamilyTextField.getDocument().addDocumentListener(
\r
158 new ListSearchTextFieldDocumentHandler(getFontFamilyList()));
\r
159 fontFamilyTextField.setFont(DEFAULT_FONT);
\r
162 return fontFamilyTextField;
\r
165 public JTextField getFontStyleTextField()
\r
167 if (fontStyleTextField == null)
\r
169 fontStyleTextField = new JTextField();
\r
170 fontStyleTextField.addFocusListener(
\r
171 new TextFieldFocusHandlerForTextSelection(fontStyleTextField));
\r
172 fontStyleTextField.addKeyListener(
\r
173 new TextFieldKeyHandlerForListSelectionUpDown(getFontStyleList()));
\r
174 fontStyleTextField.getDocument().addDocumentListener(
\r
175 new ListSearchTextFieldDocumentHandler(getFontStyleList()));
\r
176 fontStyleTextField.setFont(DEFAULT_FONT);
\r
178 return fontStyleTextField;
\r
181 public JTextField getFontSizeTextField()
\r
183 if (fontSizeTextField == null)
\r
185 fontSizeTextField = new JTextField();
\r
186 fontSizeTextField.addFocusListener(
\r
187 new TextFieldFocusHandlerForTextSelection(fontSizeTextField));
\r
188 fontSizeTextField.addKeyListener(
\r
189 new TextFieldKeyHandlerForListSelectionUpDown(getFontSizeList()));
\r
190 fontSizeTextField.getDocument().addDocumentListener(
\r
191 new ListSearchTextFieldDocumentHandler(getFontSizeList()));
\r
192 fontSizeTextField.setFont(DEFAULT_FONT);
\r
194 return fontSizeTextField;
\r
197 public JList getFontFamilyList()
\r
199 if (fontNameList == null)
\r
201 fontNameList = new JList(getFontFamilies());
\r
202 fontNameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
\r
203 fontNameList.addListSelectionListener(
\r
204 new ListSelectionHandler(getFontFamilyTextField()));
\r
205 fontNameList.setSelectedIndex(0);
\r
206 fontNameList.setFont(DEFAULT_FONT);
\r
207 fontNameList.setFocusable(false);
\r
209 return fontNameList;
\r
212 public JList getFontStyleList()
\r
214 if (fontStyleList == null)
\r
216 fontStyleList = new JList(getFontStyleNames());
\r
217 fontStyleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
\r
218 fontStyleList.addListSelectionListener(
\r
219 new ListSelectionHandler(getFontStyleTextField()));
\r
220 fontStyleList.setSelectedIndex(0);
\r
221 fontStyleList.setFont(DEFAULT_FONT);
\r
222 fontStyleList.setFocusable(false);
\r
224 return fontStyleList;
\r
227 public JList getFontSizeList()
\r
229 if (fontSizeList == null)
\r
231 fontSizeList = new JList(this.fontSizeStrings);
\r
232 fontSizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
\r
233 fontSizeList.addListSelectionListener(
\r
234 new ListSelectionHandler(getFontSizeTextField()));
\r
235 fontSizeList.setSelectedIndex(0);
\r
236 fontSizeList.setFont(DEFAULT_FONT);
\r
237 fontSizeList.setFocusable(false);
\r
239 return fontSizeList;
\r
243 * Get the family name of the selected font.
\r
244 * @return the font family of the selected font.
\r
246 * @see #setSelectedFontFamily
\r
248 public String getSelectedFontFamily()
\r
250 String fontName = (String) getFontFamilyList().getSelectedValue();
\r
255 * Get the style of the selected font.
\r
256 * @return the style of the selected font.
\r
257 * <code>Font.PLAIN</code>, <code>Font.BOLD</code>,
\r
258 * <code>Font.ITALIC</code>, <code>Font.BOLD|Font.ITALIC</code>
\r
260 * @see java.awt.Font#PLAIN
\r
261 * @see java.awt.Font#BOLD
\r
262 * @see java.awt.Font#ITALIC
\r
263 * @see #setSelectedFontStyle
\r
265 public int getSelectedFontStyle()
\r
267 int index = getFontStyleList().getSelectedIndex();
\r
268 return FONT_STYLE_CODES[index];
\r
272 * Get the size of the selected font.
\r
273 * @return the size of the selected font
\r
275 * @see #setSelectedFontSize
\r
277 public int getSelectedFontSize()
\r
280 String fontSizeString = getFontSizeTextField().getText();
\r
285 fontSize = Integer.parseInt(fontSizeString);
\r
288 catch (NumberFormatException e)
\r
290 fontSizeString = (String) getFontSizeList().getSelectedValue();
\r
291 getFontSizeTextField().setText(fontSizeString);
\r
299 * Get the selected font.
\r
300 * @return the selected font
\r
302 * @see #setSelectedFont
\r
303 * @see java.awt.Font
\r
305 public Font getSelectedFont()
\r
307 Font font = new Font(getSelectedFontFamily(),
\r
308 getSelectedFontStyle(), getSelectedFontSize());
\r
313 * Set the family name of the selected font.
\r
314 * @param name the family name of the selected font.
\r
316 * @see getSelectedFontFamily
\r
318 public void setSelectedFontFamily(String name)
\r
320 String[] names = getFontFamilies();
\r
321 for (int i = 0; i < names.length; i++)
\r
323 if (names[i].toLowerCase().equals(name.toLowerCase()))
\r
325 getFontFamilyList().setSelectedIndex(i);
\r
329 updateSampleFont();
\r
333 * Set the style of the selected font.
\r
334 * @param style the size of the selected font.
\r
335 * <code>Font.PLAIN</code>, <code>Font.BOLD</code>,
\r
336 * <code>Font.ITALIC</code>, or
\r
337 * <code>Font.BOLD|Font.ITALIC</code>.
\r
339 * @see java.awt.Font#PLAIN
\r
340 * @see java.awt.Font#BOLD
\r
341 * @see java.awt.Font#ITALIC
\r
342 * @see #getSelectedFontStyle
\r
344 public void setSelectedFontStyle(int style)
\r
346 for (int i = 0; i < FONT_STYLE_CODES.length; i++)
\r
348 if (FONT_STYLE_CODES[i] == style)
\r
350 getFontStyleList().setSelectedIndex(i);
\r
354 updateSampleFont();
\r
358 * Set the size of the selected font.
\r
359 * @param size the size of the selected font
\r
361 * @see #getSelectedFontSize
\r
363 public void setSelectedFontSize(int size)
\r
365 String sizeString = String.valueOf(size);
\r
366 for (int i = 0; i < this.fontSizeStrings.length; i++)
\r
368 if (this.fontSizeStrings[i].equals(sizeString))
\r
370 getFontSizeList().setSelectedIndex(i);
\r
374 getFontSizeTextField().setText(sizeString);
\r
375 updateSampleFont();
\r
379 * Set the selected font.
\r
380 * @param font the selected font
\r
382 * @see #getSelectedFont
\r
383 * @see java.awt.Font
\r
385 public void setSelectedFont(Font font)
\r
387 setSelectedFontFamily(font.getFamily());
\r
388 setSelectedFontStyle(font.getStyle());
\r
389 setSelectedFontSize(font.getSize());
\r
392 public String getVersionString()
\r
394 return ("Version");
\r
398 * Show font selection dialog.
\r
399 * @param parent Dialog's Parent component.
\r
400 * @return OK_OPTION, CANCEL_OPTION or ERROR_OPTION
\r
403 * @see #CANCEL_OPTION
\r
404 * @see #ERROR_OPTION
\r
406 public int showDialog(Component parent)
\r
408 dialogResultValue = ERROR_OPTION;
\r
409 JDialog dialog = createDialog(parent);
\r
410 dialog.addWindowListener(new WindowAdapter()
\r
412 public void windowClosing(WindowEvent e)
\r
414 dialogResultValue = CANCEL_OPTION;
\r
418 dialog.setVisible(true);
\r
422 return dialogResultValue;
\r
425 protected class ListSelectionHandler implements ListSelectionListener
\r
427 private JTextComponent textComponent;
\r
429 ListSelectionHandler(JTextComponent textComponent)
\r
431 this.textComponent = textComponent;
\r
434 public void valueChanged(ListSelectionEvent e)
\r
436 if (e.getValueIsAdjusting() == false)
\r
438 JList list = (JList) e.getSource();
\r
439 String selectedValue = (String) list.getSelectedValue();
\r
441 String oldValue = textComponent.getText();
\r
442 textComponent.setText(selectedValue);
\r
443 if (!oldValue.equalsIgnoreCase(selectedValue))
\r
445 textComponent.selectAll();
\r
446 textComponent.requestFocus();
\r
449 updateSampleFont();
\r
454 protected class TextFieldFocusHandlerForTextSelection extends FocusAdapter
\r
456 private JTextComponent textComponent;
\r
458 public TextFieldFocusHandlerForTextSelection(JTextComponent textComponent)
\r
460 this.textComponent = textComponent;
\r
463 public void focusGained(FocusEvent e)
\r
465 textComponent.selectAll();
\r
468 public void focusLost(FocusEvent e)
\r
470 textComponent.select(0, 0);
\r
471 updateSampleFont();
\r
475 protected class TextFieldKeyHandlerForListSelectionUpDown extends KeyAdapter
\r
477 private JList targetList;
\r
479 public TextFieldKeyHandlerForListSelectionUpDown(JList list)
\r
481 this.targetList = list;
\r
484 public void keyPressed(KeyEvent e)
\r
486 int i = targetList.getSelectedIndex();
\r
487 switch (e.getKeyCode())
\r
489 case KeyEvent.VK_UP:
\r
490 i = targetList.getSelectedIndex() - 1;
\r
495 targetList.setSelectedIndex(i);
\r
497 case KeyEvent.VK_DOWN:
\r
498 int listSize = targetList.getModel().getSize();
\r
499 i = targetList.getSelectedIndex() + 1;
\r
504 targetList.setSelectedIndex(i);
\r
512 protected class ListSearchTextFieldDocumentHandler implements DocumentListener
\r
516 public ListSearchTextFieldDocumentHandler(JList targetList)
\r
518 this.targetList = targetList;
\r
521 public void insertUpdate(DocumentEvent e)
\r
526 public void removeUpdate(DocumentEvent e)
\r
531 public void changedUpdate(DocumentEvent e)
\r
536 private void update(DocumentEvent event)
\r
538 String newValue = "";
\r
541 Document doc = event.getDocument();
\r
542 newValue = doc.getText(0, doc.getLength());
\r
544 catch (BadLocationException e)
\r
546 e.printStackTrace();
\r
549 if (newValue.length() > 0)
\r
551 int index = targetList.getNextMatch(newValue, 0, Position.Bias.Forward);
\r
556 targetList.ensureIndexIsVisible(index);
\r
558 String matchedName = targetList.getModel().getElementAt(index).toString();
\r
559 if (newValue.equalsIgnoreCase(matchedName))
\r
561 if (index != targetList.getSelectedIndex())
\r
563 SwingUtilities.invokeLater(new ListSelector(index));
\r
569 public class ListSelector implements Runnable
\r
573 public ListSelector(int index)
\r
575 this.index = index;
\r
580 targetList.setSelectedIndex(this.index);
\r
585 protected class DialogOKAction extends AbstractAction
\r
587 protected static final String ACTION_NAME = "OK";
\r
588 private JDialog dialog;
\r
590 protected DialogOKAction(JDialog dialog)
\r
592 this.dialog = dialog;
\r
593 putValue(Action.DEFAULT, ACTION_NAME);
\r
594 putValue(Action.ACTION_COMMAND_KEY, ACTION_NAME);
\r
595 putValue(Action.NAME, (ACTION_NAME));
\r
598 public void actionPerformed(ActionEvent e)
\r
600 dialogResultValue = OK_OPTION;
\r
601 dialog.setVisible(false);
\r
605 protected class DialogCancelAction extends AbstractAction
\r
607 protected static final String ACTION_NAME = "Cancel";
\r
608 private JDialog dialog;
\r
610 protected DialogCancelAction(JDialog dialog)
\r
612 this.dialog = dialog;
\r
613 putValue(Action.DEFAULT, ACTION_NAME);
\r
614 putValue(Action.ACTION_COMMAND_KEY, ACTION_NAME);
\r
615 putValue(Action.NAME, (ACTION_NAME));
\r
618 public void actionPerformed(ActionEvent e)
\r
620 dialogResultValue = CANCEL_OPTION;
\r
621 dialog.setVisible(false);
\r
625 protected JDialog createDialog(Component parent)
\r
627 Frame frame = parent instanceof Frame ? (Frame) parent
\r
628 : (Frame) SwingUtilities.getAncestorOfClass(Frame.class, parent);
\r
629 JDialog dialog = new JDialog(frame, ("Select Font"), true);
\r
631 Action okAction = new DialogOKAction(dialog);
\r
632 Action cancelAction = new DialogCancelAction(dialog);
\r
634 JButton okButton = new JButton(okAction);
\r
635 okButton.setFont(DEFAULT_FONT);
\r
636 JButton cancelButton = new JButton(cancelAction);
\r
637 cancelButton.setFont(DEFAULT_FONT);
\r
639 JPanel buttonsPanel = new JPanel();
\r
640 buttonsPanel.setLayout(new GridLayout(2, 1));
\r
641 buttonsPanel.add(okButton);
\r
642 buttonsPanel.add(cancelButton);
\r
643 buttonsPanel.setBorder(BorderFactory.createEmptyBorder(25, 0, 10, 10));
\r
645 ActionMap actionMap = buttonsPanel.getActionMap();
\r
646 actionMap.put(cancelAction.getValue(Action.DEFAULT), cancelAction);
\r
647 actionMap.put(okAction.getValue(Action.DEFAULT), okAction);
\r
648 InputMap inputMap = buttonsPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
\r
649 inputMap.put(KeyStroke.getKeyStroke("ESCAPE"), cancelAction.getValue(Action.DEFAULT));
\r
650 inputMap.put(KeyStroke.getKeyStroke("ENTER"), okAction.getValue(Action.DEFAULT));
\r
652 JPanel dialogEastPanel = new JPanel();
\r
653 dialogEastPanel.setLayout(new BorderLayout());
\r
654 dialogEastPanel.add(buttonsPanel, BorderLayout.NORTH);
\r
656 dialog.getContentPane().add(this, BorderLayout.CENTER);
\r
657 dialog.getContentPane().add(dialogEastPanel, BorderLayout.EAST);
\r
659 dialog.setLocationRelativeTo(frame);
\r
663 protected void updateSampleFont()
\r
665 Font font = getSelectedFont();
\r
666 getSampleTextField().setFont(font);
\r
669 protected JPanel getFontFamilyPanel()
\r
671 if (fontNamePanel == null)
\r
673 fontNamePanel = new JPanel();
\r
674 fontNamePanel.setLayout(new BorderLayout());
\r
675 fontNamePanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
\r
676 fontNamePanel.setPreferredSize(new Dimension(180, 130));
\r
678 JScrollPane scrollPane = new JScrollPane(getFontFamilyList());
\r
679 scrollPane.getVerticalScrollBar().setFocusable(false);
\r
680 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
\r
682 JPanel p = new JPanel();
\r
683 p.setLayout(new BorderLayout());
\r
684 p.add(getFontFamilyTextField(), BorderLayout.NORTH);
\r
685 p.add(scrollPane, BorderLayout.CENTER);
\r
687 JLabel label = new JLabel(("Font Name"));
\r
688 label.setHorizontalAlignment(JLabel.LEFT);
\r
689 label.setHorizontalTextPosition(JLabel.LEFT);
\r
690 label.setLabelFor(getFontFamilyTextField());
\r
691 label.setDisplayedMnemonic('F');
\r
693 fontNamePanel.add(label, BorderLayout.NORTH);
\r
694 fontNamePanel.add(p, BorderLayout.CENTER);
\r
697 return fontNamePanel;
\r
700 protected JPanel getFontStylePanel()
\r
702 if (fontStylePanel == null)
\r
704 fontStylePanel = new JPanel();
\r
705 fontStylePanel.setLayout(new BorderLayout());
\r
706 fontStylePanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
\r
707 fontStylePanel.setPreferredSize(new Dimension(140, 130));
\r
709 JScrollPane scrollPane = new JScrollPane(getFontStyleList());
\r
710 scrollPane.getVerticalScrollBar().setFocusable(false);
\r
711 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
\r
713 JPanel p = new JPanel();
\r
714 p.setLayout(new BorderLayout());
\r
715 p.add(getFontStyleTextField(), BorderLayout.NORTH);
\r
716 p.add(scrollPane, BorderLayout.CENTER);
\r
718 JLabel label = new JLabel(("Font Style"));
\r
719 label.setHorizontalAlignment(JLabel.LEFT);
\r
720 label.setHorizontalTextPosition(JLabel.LEFT);
\r
721 label.setLabelFor(getFontStyleTextField());
\r
722 label.setDisplayedMnemonic('Y');
\r
724 fontStylePanel.add(label, BorderLayout.NORTH);
\r
725 fontStylePanel.add(p, BorderLayout.CENTER);
\r
727 return fontStylePanel;
\r
730 protected JPanel getFontSizePanel()
\r
732 if (fontSizePanel == null)
\r
734 fontSizePanel = new JPanel();
\r
735 fontSizePanel.setLayout(new BorderLayout());
\r
736 fontSizePanel.setPreferredSize(new Dimension(70, 130));
\r
737 fontSizePanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
\r
739 JScrollPane scrollPane = new JScrollPane(getFontSizeList());
\r
740 scrollPane.getVerticalScrollBar().setFocusable(false);
\r
741 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
\r
743 JPanel p = new JPanel();
\r
744 p.setLayout(new BorderLayout());
\r
745 p.add(getFontSizeTextField(), BorderLayout.NORTH);
\r
746 p.add(scrollPane, BorderLayout.CENTER);
\r
748 JLabel label = new JLabel(("Font Size"));
\r
749 label.setHorizontalAlignment(JLabel.LEFT);
\r
750 label.setHorizontalTextPosition(JLabel.LEFT);
\r
751 label.setLabelFor(getFontSizeTextField());
\r
752 label.setDisplayedMnemonic('S');
\r
754 fontSizePanel.add(label, BorderLayout.NORTH);
\r
755 fontSizePanel.add(p, BorderLayout.CENTER);
\r
757 return fontSizePanel;
\r
760 protected JPanel getSamplePanel()
\r
762 if (samplePanel == null)
\r
764 Border titledBorder = BorderFactory.createTitledBorder(
\r
765 BorderFactory.createEtchedBorder(), ("Sample"));
\r
766 Border empty = BorderFactory.createEmptyBorder(5, 10, 10, 10);
\r
767 Border border = BorderFactory.createCompoundBorder(titledBorder, empty);
\r
769 samplePanel = new JPanel();
\r
770 samplePanel.setLayout(new BorderLayout());
\r
771 samplePanel.setBorder(border);
\r
773 samplePanel.add(getSampleTextField(), BorderLayout.CENTER);
\r
775 return samplePanel;
\r
778 protected JTextField getSampleTextField()
\r
780 if (sampleText == null)
\r
782 Border lowered = BorderFactory.createLoweredBevelBorder();
\r
784 sampleText = new JTextField(("AaBbYyZz"));
\r
785 sampleText.setBorder(lowered);
\r
786 sampleText.setPreferredSize(new Dimension(300, 100));
\r
791 protected String[] getFontFamilies()
\r
793 if (fontFamilyNames == null)
\r
795 GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
\r
796 fontFamilyNames = env.getAvailableFontFamilyNames();
\r
798 return fontFamilyNames;
\r
801 protected String[] getFontStyleNames()
\r
803 if (fontStyleNames == null)
\r
806 fontStyleNames = new String[4];
\r
807 fontStyleNames[i++] = ("Plain");
\r
808 fontStyleNames[i++] = ("Bold");
\r
809 fontStyleNames[i++] = ("Italic");
\r
810 fontStyleNames[i++] = ("BoldItalic");
\r
812 return fontStyleNames;
\r