1 import java.awt.BorderLayout;
2 import java.awt.Font;
3 import java.awt.GridLayout;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import javax.swing.ButtonGroup;
7 import javax.swing.JButton;
8 import javax.swing.JCheckBox;
9 import javax.swing.JComboBox;
10 import javax.swing.JFrame;
11 import javax.swing.JLabel;
12 import javax.swing.JMenu;
13 import javax.swing.JMenuBar;
14 import javax.swing.JMenuItem;
15 import javax.swing.JPanel;
16 import javax.swing.JRadioButton;
17 import javax.swing.border.EtchedBorder;
18 import javax.swing.border.TitledBorder;
19
20 /**
21 This frame has a menu with commands to change the font
22 of a text sample.
23 */
24 public class FontViewer2Frame extends JFrame
25 {
26 private static final int FRAME_WIDTH = 300;
27 private static final int FRAME_HEIGHT = 400;
28
29 private JLabel sampleField;
30 private String facename;
31 private int fontstyle;
32 private int fontsize;
33
34 /**
35 Constructs the frame.
36 */
37 public FontViewer2Frame()
38 {
39 // Construct text sample
40 sampleField = new JLabel("Big Java");
41 add(sampleField, BorderLayout.CENTER);
42
43 // Construct menu
44 JMenuBar menuBar = new JMenuBar();
45 setJMenuBar(menuBar);
46 menuBar.add(createFileMenu());
47 menuBar.add(createFontMenu());
48
49 facename = "Serif";
50 fontsize = 24;
51 fontstyle = Font.PLAIN;
52
53 setSampleFont();
54 setSize(FRAME_WIDTH, FRAME_HEIGHT);
55 }
56
57 /**
58 Creates the File menu.
59 @return the menu
60 */
61 public JMenu createFileMenu()
62 {
63 JMenu menu = new JMenu("File");
64 menu.add(createFileExitItem());
65 return menu;
66 }
67
68 /**
69 Creates the File->Exit menu item and sets its action listener.
70 @return the menu item
71 */
72 public JMenuItem createFileExitItem()
73 {
74 JMenuItem item = new JMenuItem("Exit");
75 class MenuItemListener implements ActionListener
76 {
77 public void actionPerformed(ActionEvent event)
78 {
79 System.exit(0);
80 }
81 }
82 ActionListener listener = new MenuItemListener();
83 item.addActionListener(listener);
84 return item;
85 }
86
87 /**
88 Creates the Font submenu.
89 @return the menu
90 */
91 public JMenu createFontMenu()
92 {
93 JMenu menu = new JMenu("Font");
94 menu.add(createFaceMenu());
95 menu.add(createSizeMenu());
96 menu.add(createStyleMenu());
97 return menu;
98 }
99
100 /**
101 Creates the Face submenu.
102 @return the menu
103 */
104 public JMenu createFaceMenu()
105 {
106 JMenu menu = new JMenu("Face");
107 menu.add(createFaceItem("Serif"));
108 menu.add(createFaceItem("SansSerif"));
109 menu.add(createFaceItem("Monospaced"));
110 return menu;
111 }
112
113 /**
114 Creates the Size submenu.
115 @return the menu
116 */
117 public JMenu createSizeMenu()
118 {
119 JMenu menu = new JMenu("Size");
120 menu.add(createSizeItem("Smaller", -1));
121 menu.add(createSizeItem("Larger", 1));
122 return menu;
123 }
124
125 /**
126 Creates the Style submenu.
127 @return the menu
128 */
129 public JMenu createStyleMenu()
130 {
131 JMenu menu = new JMenu("Style");
132 menu.add(createStyleItem("Plain", Font.PLAIN));
133 menu.add(createStyleItem("Bold", Font.BOLD));
134 menu.add(createStyleItem("Italic", Font.ITALIC));
135 menu.add(createStyleItem("Bold Italic", Font.BOLD
136 + Font.ITALIC));
137 return menu;
138 }
139
140 /**
141 Creates a menu item to change the font face and set its action listener.
142 @param name the name of the font face
143 @return the menu item
144 */
145 public JMenuItem createFaceItem(final String name)
146 {
147 JMenuItem item = new JMenuItem(name);
148 class MenuItemListener implements ActionListener
149 {
150 public void actionPerformed(ActionEvent event)
151 {
152 facename = name;
153 setSampleFont();
154 }
155 }
156 ActionListener listener = new MenuItemListener();
157 item.addActionListener(listener);
158 return item;
159 }
160
161 /**
162 Creates a menu item to change the font size
163 and set its action listener.
164 @param name the name of the menu item
165 @param ds the amount by which to change the size
166 @return the menu item
167 */
168 public JMenuItem createSizeItem(String name, final int ds)
169 {
170 JMenuItem item = new JMenuItem(name);
171 class MenuItemListener implements ActionListener
172 {
173 public void actionPerformed(ActionEvent event)
174 {
175 fontsize = fontsize + ds;
176 setSampleFont();
177 }
178 }
179 ActionListener listener = new MenuItemListener();
180 item.addActionListener(listener);
181 return item;
182 }
183
184 /**
185 Creates a menu item to change the font style
186 and set its action listener.
187 @param name the name of the menu item
188 @param style the new font style
189 @return the menu item
190 */
191 public JMenuItem createStyleItem(String name, final int style)
192 {
193 JMenuItem item = new JMenuItem(name);
194 class MenuItemListener implements ActionListener
195 {
196 public void actionPerformed(ActionEvent event)
197 {
198 fontstyle = style;
199 setSampleFont();
200 }
201 }
202 ActionListener listener = new MenuItemListener();
203 item.addActionListener(listener);
204 return item;
205 }
206
207 /**
208 Sets the font of the text sample.
209 */
210 public void setSampleFont()
211 {
212 Font f = new Font(facename, fontstyle, fontsize);
213 sampleField.setFont(f);
214 sampleField.repaint();
215 }
216 }
217
218