1:
47:
48: package ;
49:
50: import ;
51: import ;
52: import ;
53: import ;
54: import ;
55:
56: import ;
57: import ;
58: import ;
59: import ;
60: import ;
61: import ;
62:
63: import ;
64:
65:
71: public class FontChooserPanel extends JPanel {
72:
73:
74: public static final String[] SIZES = {"9", "10", "11", "12", "14", "16",
75: "18", "20", "22", "24", "28", "36", "48", "72"};
76:
77:
78: private JList fontlist;
79:
80:
81: private JList sizelist;
82:
83:
84: private JCheckBox bold;
85:
86:
87: private JCheckBox italic;
88:
89:
90: protected static ResourceBundle localizationResources =
91: ResourceBundleWrapper.getBundle("org.jfree.ui.LocalizationBundle");
92:
93:
99: public FontChooserPanel(final Font font) {
100:
101: final GraphicsEnvironment g
102: = GraphicsEnvironment.getLocalGraphicsEnvironment();
103: final String[] fonts = g.getAvailableFontFamilyNames();
104:
105: setLayout(new BorderLayout());
106: final JPanel right = new JPanel(new BorderLayout());
107:
108: final JPanel fontPanel = new JPanel(new BorderLayout());
109: fontPanel.setBorder(BorderFactory.createTitledBorder(
110: BorderFactory.createEtchedBorder(),
111: localizationResources.getString("Font")));
112: this.fontlist = new JList(fonts);
113: final JScrollPane fontpane = new JScrollPane(this.fontlist);
114: fontpane.setBorder(BorderFactory.createEtchedBorder());
115: fontPanel.add(fontpane);
116: add(fontPanel);
117:
118: final JPanel sizePanel = new JPanel(new BorderLayout());
119: sizePanel.setBorder(BorderFactory.createTitledBorder(
120: BorderFactory.createEtchedBorder(),
121: localizationResources.getString("Size")));
122: this.sizelist = new JList(SIZES);
123: final JScrollPane sizepane = new JScrollPane(this.sizelist);
124: sizepane.setBorder(BorderFactory.createEtchedBorder());
125: sizePanel.add(sizepane);
126:
127: final JPanel attributes = new JPanel(new GridLayout(1, 2));
128: this.bold = new JCheckBox(localizationResources.getString("Bold"));
129: this.italic = new JCheckBox(localizationResources.getString("Italic"));
130: attributes.add(this.bold);
131: attributes.add(this.italic);
132: attributes.setBorder(BorderFactory.createTitledBorder(
133: BorderFactory.createEtchedBorder(),
134: localizationResources.getString("Attributes")));
135:
136: right.add(sizePanel, BorderLayout.CENTER);
137: right.add(attributes, BorderLayout.SOUTH);
138:
139: add(right, BorderLayout.EAST);
140:
141: setSelectedFont(font);
142: }
143:
144:
149: public Font getSelectedFont() {
150: return new Font(getSelectedName(), getSelectedStyle(),
151: getSelectedSize());
152: }
153:
154:
159: public String getSelectedName() {
160: return (String) this.fontlist.getSelectedValue();
161: }
162:
163:
168: public int getSelectedStyle() {
169: if (this.bold.isSelected() && this.italic.isSelected()) {
170: return Font.BOLD + Font.ITALIC;
171: }
172: if (this.bold.isSelected()) {
173: return Font.BOLD;
174: }
175: if (this.italic.isSelected()) {
176: return Font.ITALIC;
177: }
178: else {
179: return Font.PLAIN;
180: }
181: }
182:
183:
188: public int getSelectedSize() {
189: final String selected = (String) this.sizelist.getSelectedValue();
190: if (selected != null) {
191: return Integer.parseInt(selected);
192: }
193: else {
194: return 10;
195: }
196: }
197:
198:
204: public void setSelectedFont (final Font font) {
205: if (font == null) {
206: throw new NullPointerException();
207: }
208: this.bold.setSelected(font.isBold());
209: this.italic.setSelected(font.isItalic());
210:
211: final String fontName = font.getName();
212: ListModel model = this.fontlist.getModel();
213: this.fontlist.clearSelection();
214: for (int i = 0; i < model.getSize(); i++) {
215: if (fontName.equals(model.getElementAt(i))) {
216: this.fontlist.setSelectedIndex(i);
217: break;
218: }
219: }
220:
221: final String fontSize = String.valueOf(font.getSize());
222: model = this.sizelist.getModel();
223: this.sizelist.clearSelection();
224: for (int i = 0; i < model.getSize(); i++) {
225: if (fontSize.equals(model.getElementAt(i))) {
226: this.sizelist.setSelectedIndex(i);
227: break;
228: }
229: }
230: }
231: }