ang Choix de police

Avatar de Lev-Arcady Sellem
Membre habitué
Mise à jour le 13 août 2012  ·   Licence : Creative Commons  ·   Téléchargé 411 fois   ·     Voir tous les téléchargements de l'auteur

Commentaires La discussion sur le forum
Présentation
Boîte de dialogue proposant :
    Choix de la police, parmi les polices installées sur le système

    Choix du style : normal, gras, italique, gras et italique

    Choix de la taille : les tailles possibles sont définies dans un tableau d'entier, mais l'utilisateur peut en spécifier une autre


L'affichage est habituel : une colonne police, une colonne style, une colonne taille, un exemple sous ces trois colonnes puis 'ok' et 'annuler' (voir image jointe).

Le constructeur prend en argument la police à afficher par défaut, et la méthode fontGetter() retourne un objet Font contenant le choix de l'utilisateur.

Attention : la boîte de dialogue n'est pas détruite, mais masquée, à la fin du dialogue.
Téléchargement
Compatibilité
Linux Mac Windows  
  1. /*
  2.  * Developpe par Lev-Arcady Sellem
  3.  * Contact : <lev.arcady.sellem@gmail.com>
  4.  * Merci de donner un objet a votre mail
  5.  * Publie sous licence Creative Commons
  6.  *
  7.  */
  8. package com.zeusolym.utils;
  9.  
  10. import java.awt.* ;
  11. import java.awt.event.* ;
  12. import javax.swing.* ;
  13. import javax.swing.event.* ;
  14.  
  15. /**
  16.  * Classe permettant de proposer un choix de police de caracteres a l'utilisateur.
  17.  * Attention, la bo?te de dialogue creee N'EST PAS detruite en fin de dialogue !
  18.  * @author Lev-Arcady Sellem
  19.  * @version 2.0
  20.  */
  21. @SuppressWarnings("serial")
  22. class JFontChooser extends JDialog{
  23. /**
  24. * Constructeur de la classe JFontChooser
  25. * @param f La police de caracteres par defaut
  26. */
  27. public JFontChooser(final Font f){
  28. //Creer la boite
  29. super((JFrame)null, "Choix de la fonte", true);
  30. choice_panel = new ChoicePanel(f, this);
  31. global_scroll = new JScrollPane(choice_panel);
  32. add(global_scroll);
  33. choice_panel.setter(f);
  34.  
  35. //Modifier le comportement pour que la fermeture de la boite aie le meme resultat
  36. //qu'un clic sur 'Annuler'
  37. addWindowListener(new WindowAdapter(){
  38. public void windowClosing(WindowEvent e){
  39. choice_panel.setter(f);
  40. }
  41. });
  42. pack();
  43. setLocationRelativeTo(null);
  44. setVisible(true);
  45. }
  46.  
  47. /**
  48. * Renvoie la police de caracteres choisie par l'utilisateur
  49. * @return L'objet Font representant la police de caracteres choisie par l'utilisateur
  50. */
  51. public Font getFont(){
  52. return choice_panel.getter();
  53. }
  54. private JScrollPane global_scroll; private ChoicePanel choice_panel;
  55. }
  56.  
  57. /**
  58.  * Panneau permettant le choix d'une police de caracteres
  59.  * @author Lev-Arcady Sellem
  60.  * @version 2.0
  61.  */
  62. @SuppressWarnings("serial")
  63. class ChoicePanel extends JPanel implements ActionListener{
  64. /**
  65. * Constructeur de la classe ChoicePanel
  66. * @param f La police par defaut
  67. * @param parent_dialog La boite de dialogue appelante
  68. */
  69. public ChoicePanel(Font f, JDialog parent_dialog){
  70. this.f = f;
  71. this.parent_dialog = parent_dialog;
  72.  
  73. //Creation du champ exemple et de tableaux contenant le choix propose
  74. example = new JTextField("Voix ambigu\u00eb d'un coeur qui, au z\u00e9phyr, pr\u00e9f\u00e8re les jattes de kiwis", 24);
  75. example.setEditable(false);
  76.  
  77. sizes = new String[]{"6","8","10","11","12","14","16","18","20","22","24","26","28","30","32","34","36","40","44","48"};
  78. styles = new String[]{"Normal", "Gras", "Italique", "Gras et Italique"};
  79. fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
  80.  
  81. //Creation des box JTextField + JList permettant de choisir
  82. font_choice = new VerticalBox(fonts, false, this);
  83. style_choice = new VerticalBox(styles, false, this);
  84. size_choice = new VerticalBox(sizes, true, this);
  85.  
  86. //Creation des boutons de fin de dialogue
  87. cancel = new JButton("Annuler");
  88. cancel.addActionListener(this);
  89. ok = new JButton("OK");
  90. ok.addActionListener(this);
  91.  
  92. //Box contenant les boutons
  93. prov_valid = Box.createHorizontalBox();
  94. prov_valid.add(cancel);
  95. prov_valid.add(Box.createHorizontalStrut(5));
  96. prov_valid.add(ok);
  97.  
  98. global = Box.createVerticalBox();
  99.  
  100. //Box gerant la mise en page des boutons
  101. valid = Box.createHorizontalBox();
  102. valid.add(Box.createGlue());
  103. valid.add(prov_valid);
  104.  
  105. //Box gerant la mise en page des listes de choix
  106. settings = Box.createHorizontalBox();
  107. settings.add(font_choice);
  108. settings.add(Box.createHorizontalStrut(5));
  109. settings.add(style_choice);
  110. settings.add(Box.createHorizontalStrut(5));
  111. settings.add(size_choice);
  112.  
  113. //Box contenant l'integralite des composants
  114. global.add(settings);
  115. global.add(Box.createVerticalStrut(5));
  116. global.add(example);
  117. global.add(Box.createVerticalStrut(5));
  118. global.add(valid);
  119.  
  120. //Remplissage des valeurs par defauts et affichage de l'exemple
  121. setter(f);
  122. example();
  123.  
  124. //Ecouter le champ de texte de saisie de la taille afin que les modifications
  125. //soient repercutees lorsque l'utilisateur change son contenu
  126. size_choice.result.addActionListener(this);
  127.  
  128. //Ajout du resultat au panneau
  129. add(global);
  130. }
  131.  
  132. /**
  133. * Met a jour les champs de texte avec la police de caracteres choisie
  134. * @param f La police de caracteres choisie
  135. */
  136. public void setter(Font f){
  137. font_choice.result.setText(f.getName());
  138. size_choice.result.setText(String.valueOf(f.getSize()));
  139. int prov = f.getStyle();
  140. String prov2 = "";
  141. if(prov==Font.PLAIN){prov2 = "Normal";}
  142. else if(prov==Font.BOLD){prov2 = "Gras";}
  143. else if(prov==Font.ITALIC){prov2 = "Italique";}
  144. else if(prov==Font.BOLD+Font.ITALIC){prov2 = "Gras et Italique";}
  145. style_choice.result.setText(prov2);
  146. }
  147.  
  148. /**
  149. * Retourne la police de caracteres choisie par l'utilisateur
  150. * @return L'objet Font contenant les choix de l'utilisateur
  151. */
  152. public Font getter(){
  153. String prov = style_choice.result.getText();
  154. if(prov.equals("Normal")){
  155. styl = Font.PLAIN;
  156. }
  157. else if(prov.equals("Gras")){
  158. styl = Font.BOLD;
  159. }
  160. else if(prov.equals("Italique")){
  161. styl = Font.ITALIC;
  162. }
  163. else if(prov.equals("Gras et Italique")){
  164. styl = Font.BOLD+Font.ITALIC;
  165. }
  166. if(size_choice.result.getText().equals("")==false){
  167. font = new Font(font_choice.result.getText(), styl, Integer.parseInt(size_choice.result.getText()));
  168. return font;
  169. }
  170. else{
  171. JOptionPane.showMessageDialog(null, "Vous n'avez pas sp\u00e9cifi\u00e9 de taille !", "Erreur de saisie", JOptionPane.ERROR_MESSAGE);
  172. return null;
  173. }
  174. }
  175.  
  176. /**
  177. * Formatte la phrase d'exemple avec la police de caracteres selectionnee
  178. */
  179. public void example(){
  180. Font prov_font = getter();
  181. if(prov_font != null){
  182. example.setFont(prov_font);
  183. }
  184. else{System.out.println("Erreur : Impossible d'afficher l'exemple, l'appel de getter() a retourn\u00e9 une valeur nulle");}
  185. }
  186.  
  187. /**
  188. * Gere les clics sur les boutons "Valider" et "Annuler" ainsi que le changement de taille de la police de caracteres
  189. */
  190. public void actionPerformed(ActionEvent e){
  191. if(e.getSource()==ok){
  192. //Faire disparaitre la boite de dialogue sans la detruire
  193. //pour pouvoir continuer a utiliser getter() de l'exterieur
  194. parent_dialog.setVisible(false);
  195. }
  196. else if(e.getSource()==cancel){
  197. //Remettre les valeurs de depart puis
  198. //faire disparaitre la boite de dialogue sans la detruire
  199. //pour pouvoir continuer a utiliser getter() de l'exterieur
  200. setter(f);
  201. parent_dialog.setVisible(false);
  202. }
  203. else if(e.getSource()==size_choice.result){
  204. example();
  205. }
  206. }
  207.  
  208. private String [] sizes, fonts, styles; private Box settings, global, valid, prov_valid; private VerticalBox font_choice, style_choice, size_choice;
  209. private Font font, f; private int styl; private JTextField example; private JButton ok, cancel;
  210. private JDialog parent_dialog;
  211. }
  212.  
  213. /**
  214.  * Ensemble champ de texte et liste permettant la selection
  215.  * @author Lev-Arcady Sellem
  216.  * @version 2.0
  217.  */
  218. @SuppressWarnings("serial")
  219. class VerticalBox extends Box implements ListSelectionListener{
  220. /**
  221. * Constructeur de la classe VerticalBox
  222. * @param content La liste de choix disponibles
  223. * @param is_editable Le caractere editable de la liste
  224. * @param parent Le panneau appelant
  225. */
  226. public VerticalBox(String[] content, boolean is_editable, ChoicePanel parent){
  227. super(1);
  228. this.parent = parent;
  229. result = new JTextField();
  230. result.setEditable(is_editable);
  231. choix = new JList<String>(content);
  232. choix.setSelectionMode(0);
  233. choix.setVisibleRowCount(10);
  234. choix.addListSelectionListener(this);
  235. defil = new JScrollPane(choix);
  236.  
  237. add(result);
  238. add(Box.createVerticalStrut(3));
  239. add(defil);
  240. }
  241.  
  242. /**
  243. * L'ecouteur associe a la liste capturant la selection de ses elements
  244. */
  245. public void valueChanged(ListSelectionEvent e){
  246. if(!e.getValueIsAdjusting()){
  247. result.setText((String)choix.getSelectedValue());
  248. parent.example();
  249. }
  250. }
  251. JTextField result; private JList<String> choix; private JScrollPane defil; private ChoicePanel parent;
  252. }


 Poster une réponse

Avatar de zeusolym zeusolym
http://www.developpez.com
Membre habitué
le 26/06/2011 22:22
Désolé pour les '?' dans le code, je n'avais pas prévu que les accents sauteraient ...
Avatar de zeusolym zeusolym
http://www.developpez.com
Membre habitué
le 13/08/2012 13:56
Nouvelle version !

  • Noms des méthodes, champs, etc. passés en anglais.
  • Caractères accentués changés pour leur équivalent sans accent.
  • Code documenté.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
 
 
 
 
Partenaires

PlanetHoster
Ikoula