1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| public static JComboBox createFontComboBox(float size) {
// On récupère la liste des Fonts :
Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
// On "redimensionne" chaque Font :
for (int i=0; i<fonts.length; i++) {
fonts[i] = fonts[i].deriveFont(size);
}
// On crée le Combo avec la liste des Fonts :
JComboBox combo = new JComboBox(fonts);
// On utilise un Renderer pour afficher correctement les Fonts :
FontCellRenderer fcr = new FontCellRenderer(combo.getFont().deriveFont(size));
combo.setRenderer(fcr);
// On utilise un Listener qui modifiera la Font de la ComboBox de l'élément sélectionné :
combo.addItemListener(fcr);
combo.setFont(fonts[0]);
return combo;
}
static class FontCellRenderer extends DefaultListCellRenderer implements ItemListener {
private final Font defaultFont;
FontCellRenderer(Font font) {
this.defaultFont = font;
}
Font getFontForText(Font font, String text) {
// Si la Font ne peut pas afficher correctement son nom,
// On utilise la Font par défaut...
if (font.canDisplayUpTo(text) >= 0) {
return this.defaultFont;
}
return font;
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Font font = (Font) value;
String text = font.getName();
font = getFontForText(font, text);
setFont(font);
setText(text);
return this;
}
public void itemStateChanged(ItemEvent e) {
// Si on selectionne une nouvelle Font,
// on modifie la font de la ComboBox :
if (e.getStateChange()==ItemEvent.SELECTED) {
Font font = (Font) e.getItem();
String text = font.getName();
font = getFontForText(font, text);
JComponent c = (JComponent) e.getSource();
c.setFont(font);
}
}
} |
Partager