O p i k a n o b a . o r g |
||
Lister les fontes disponiblesL'utilisation de Jython pour tester Java est vraiment fort agréable. La syntaxe simplifiée de Jython permet de tester rapidement le jdk pour confirmer ou infirmer des suppositions quant à son fonctionnement. Ici, j'avais besoin de connaître les fontes disponibles, et plutôt que de se lancer dans un programme Java me donnant l'information, les quelques lignes suivantes répondirent rapidement à mon besoin : from java.awt import * ge = GraphicsEnvironment.getLocalGraphicsEnvironment() for font in ge.getAllFonts(): print font.getFontName() Quatre lignes suffisent donc ! Le résultat est le suivant : Arial Arial Black Arial Italique Arial Gras Arial Gras Italique Comic Sans MS Comic Sans MS Gras Courier New Courier New Italique Courier New Gras ... Test graphique des fontesAvoir le nom de ces fontes en très peu de temps est déjà appréciable, mais compléter ce bout de programme pour avoir un rendu graphique, est encore mieux. Ainsi, il est beaucoup plus facile, de sélectionner la fonte désirée. from java.lang import * from java.awt import * from javax.swing import * testtext = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890" def windowClosingEvt(evt): System.exit(0) # class enable to change the font of each label contained in the list class FontRenderer(DefaultListCellRenderer): def getListCellRendererComponent(self, list_,value,index,isSelected,hasFocus): label = DefaultListCellRenderer.getListCellRendererComponent(self,list_, value,index,isSelected,hasFocus) label.setFont(Font(str(value), Font.PLAIN, 14)) label.setText("%s : %s"%(str(value),testtext)) return label # create the main frame fr = JFrame("Font tests", size=(400,400), windowClosing=windowClosingEvt) # create the font list ge = GraphicsEnvironment.getLocalGraphicsEnvironment() fontlist = map(lambda x:x.getFontName() , ge.getAllFonts()) j = JList(fontlist, cellRenderer = FontRenderer() ) #add the list to the frame and show it fr.getContentPane().add(JScrollPane(j)) fr.visible=1 Le programme ci-dessus crée une liste (JList) et insére tous les noms des polices disponibles. Chaque ligne est bien sûr formattée à l'aide de sa propre fonte, ce qui permet d'avoir le rendu en même temps que le nom. Rien de spécial à ce code, mis à part un aspect intéressant de l'utilisation de la syntaxe Python : la manipulation des listes. Et plus particulièrement, celle de la fonction map. Ainsi fontlist = map(lambda x:x.getFontName() , ge.getAllFonts()) permet d'appliquer une lambda expression (chargée de trouver le nom de la fonte) à chaque élément de la liste. Ce concept évite donc l'écriture d'une boucle sur chacun des éléments. Le résultat de cette expression est une liste qui contient chaque élément transformé. Le résultat est le suivant : |
||
Cette page en version :
brut
|