www tipografia source semibold sans regular pro mac fontsquirrel font descargar java swing fonts java-7 nimbus

java - tipografia - Las versiones TTF y OTF de Source Sans Pro se muestran de forma diferente en Swing(Nimbus L y F)



source sans pro>- (1)

conclusión (forums.oracle.com/thread/2573652 Similar a su publicación allí, nada especial)

  • no es cierto que Java, ni Nimbus bug, este error en Font, se puede ver que en Metal, Win, WinClassic y Nimbus Laf, OTF_Font faltan 2 píxeles por encima del glifo

. Windows.

. Metal

. Nimbus.

. Clásico.

WinXp en Java6

. versus .

  • este código lo ayudará a encontrar la (s) diferencia (s) entre dos fuentes (e informar todas las diferencias al autor)

  • devuelve todos los atributos disponibles de (java.awt.font.) TextAttribute for concrete Font

  • puede obtener propiedades detalladas de (casi) todos los atributos de texto

con salida

java.awt.font.TextAttribute(family) java.awt.font.TextAttribute(weight) java.awt.font.TextAttribute(width) java.awt.font.TextAttribute(posture) java.awt.font.TextAttribute(size) java.awt.font.TextAttribute(transform) java.awt.font.TextAttribute(superscript) java.awt.font.TextAttribute(char_replacement) java.awt.font.TextAttribute(foreground) java.awt.font.TextAttribute(background) java.awt.font.TextAttribute(underline) java.awt.font.TextAttribute(strikethrough) java.awt.font.TextAttribute(run_direction) java.awt.font.TextAttribute(bidi_embedding) java.awt.font.TextAttribute(justification) java.awt.font.TextAttribute(input method highlight) java.awt.font.TextAttribute(input method underline) java.awt.font.TextAttribute(swap_colors) java.awt.font.TextAttribute(numeric_shaping) java.awt.font.TextAttribute(kerning) java.awt.font.TextAttribute(ligatures) java.awt.font.TextAttribute(tracking)

del código Nimbus L & F

import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import javax.swing.plaf.FontUIResource; import javax.swing.plaf.basic.BasicComboBoxRenderer; public class SystemFontDisplayer { private static final long serialVersionUID = 1L; private JFrame frame = new JFrame("Nimbus UIDeafaults and Font"); private JComboBox fontsBox; private javax.swing.Timer timer = null; private JButton testButton = new JButton("testButton"); private JTextField testTextField = new JTextField("testTextField", JLabel.CENTER); private JLabel testLabel = new JLabel("testLabel"); private Font font1, font2; private JMenuBar menuBar1 = new JMenuBar(); private JMenu menu1= new JMenu("Menu 1"); private JMenu menu2= new JMenu("Menu 2"); private JMenuItem menuItem1= new JMenuItem("MenuItem 1"); private JMenuItem menuItem2= new JMenuItem("MenuItem 2"); public SystemFontDisplayer() { try { font1 = Font.createFont(Font.TRUETYPE_FONT, SystemFontDisplayer.class.getResourceAsStream("/Images/SourceSansPro-Regular.ttf")); font2 = Font.createFont(Font.TRUETYPE_FONT, SystemFontDisplayer.class.getResourceAsStream("/Images/SourceSansPro-Regular.otf")); } catch (FontFormatException ex) { Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex); } GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); //ge.registerFont(font1); ge.registerFont(font2); String[] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault()); fontsBox = new JComboBox(fontFamilyNames); fontsBox.setSelectedItem(0); fontsBox.setRenderer(new ComboRenderer()); fontsBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { final String fontName = fontsBox.getSelectedItem().toString(); fontsBox.setFont(new Font(fontName, Font.PLAIN, 16)); start(); } } }); fontsBox.setSelectedItem(0); fontsBox.getEditor().selectAll(); menu1.add(menuItem1); menuBar1.add(menu1); menu2.add(menuItem2); menuBar1.add(menu2); frame.setJMenuBar(menuBar1); frame.setLayout(new GridLayout(4, 0, 5, 5)); frame.add(fontsBox); frame.add(testButton); frame.add(testTextField); frame.add(testLabel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocation(200, 105); frame.pack(); java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { fontsBox.setPopupVisible(true); fontsBox.setPopupVisible(false); } }); frame.setVisible(true); } private void start() { timer = new javax.swing.Timer(250, updateCol()); timer.setRepeats(false); timer.start(); } public Action updateCol() { return new AbstractAction("text load action") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { final Font fnt = new Font(fontsBox.getSelectedItem().toString(), Font.PLAIN, 16); try { LookAndFeel lnf = UIManager.getLookAndFeel().getClass().newInstance(); final FontUIResource res = new FontUIResource(fnt); UIDefaults uiDefaults = lnf.getDefaults(); uiDefaults.put("defaultFont", res); UIManager.getLookAndFeel().uninitialize(); UIManager.setLookAndFeel(lnf); } catch (InstantiationException ex) { Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex); } UIDefaults defaults = UIManager.getDefaults(); final FontUIResource res = new FontUIResource(fnt); Object[] obj = res.getAvailableAttributes(); for (Object objs : obj) { System.out.println(objs); //returns java.awt.font.TextAttribute } defaults.put("defaultFont", res); SwingUtilities.updateComponentTreeUI(frame); frame.pack(); } }; } public static void main(String arg[]) { try { for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(laf.getName())) { UIManager.setLookAndFeel(laf.getClassName()); } } } catch (Exception e) { e.printStackTrace(); } java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer(); } }); } private class ComboRenderer extends BasicComboBoxRenderer { private static final long serialVersionUID = 1L; @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); final Object fntObj = value; final String fontFamilyName = (String) fntObj; setFont(new Font(fontFamilyName, Font.PLAIN, 16)); return this; } } }

del código Oldies L & Fs

import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import javax.swing.plaf.FontUIResource; import javax.swing.plaf.basic.BasicComboBoxRenderer; public class SystemFontDisplayer extends JFrame { private static final long serialVersionUID = 1L; private JFrame frame = new JFrame("Nimbus UIDeafaults and Font"); private JComboBox fontsBox; private javax.swing.Timer timer = null; private JButton testButton = new JButton("testButton"); private JTextField testTextField = new JTextField("testTextField"); private JLabel testLabel = new JLabel("testLabel"); private Font font1, font2; private JMenuBar menuBar1 = new JMenuBar(); private JMenu menu1 = new JMenu("Menu 1"); private JMenu menu2 = new JMenu("Menu 2"); private JMenuItem menuItem1 = new JMenuItem("MenuItem 1"); private JMenuItem menuItem2 = new JMenuItem("MenuItem 2"); public SystemFontDisplayer() { try { font1 = Font.createFont(Font.TRUETYPE_FONT, SystemFontDisplayer.class.getResourceAsStream("/Images/SourceSansPro-Regular.ttf")); font2 = Font.createFont(Font.TRUETYPE_FONT, SystemFontDisplayer.class.getResourceAsStream("/Images/SourceSansPro-Regular.otf")); } catch (FontFormatException ex) { Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex); } GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); //ge.registerFont(font1); ge.registerFont(font2); String[] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault()); fontsBox = new JComboBox(fontFamilyNames); fontsBox.setSelectedItem(0); fontsBox.setRenderer(new ComboRenderer()); fontsBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { final String fontName = fontsBox.getSelectedItem().toString(); fontsBox.setFont(new Font(fontName, Font.PLAIN, 16)); start(); } } }); fontsBox.setSelectedItem(0); fontsBox.getEditor().selectAll(); menu1.add(menuItem1); menuBar1.add(menu1); menu2.add(menuItem2); menuBar1.add(menu2); frame.setJMenuBar(menuBar1); frame.setLayout(new GridLayout(4, 0, 20, 20)); frame.add(fontsBox); frame.add(testButton); frame.add(testTextField); frame.add(testLabel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocation(200, 105); frame.pack(); java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { fontsBox.setPopupVisible(true); fontsBox.setPopupVisible(false); } }); frame.setVisible(true); } private void start() { timer = new javax.swing.Timer(750, updateCol()); timer.setRepeats(false); timer.start(); } public Action updateCol() { return new AbstractAction("text load action") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { final Font fnt = new Font(fontsBox.getSelectedItem().toString(), Font.PLAIN, 12); final FontUIResource res = new FontUIResource(fnt); UIManager.getLookAndFeelDefaults().put("Button.font", res); UIManager.getLookAndFeelDefaults().put("TextField.font", res); UIManager.getLookAndFeelDefaults().put("Label.font", res); SwingUtilities.updateComponentTreeUI(frame); frame.pack(); } }; } public static void main(String arg[]) { /*try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); }*/ java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer(); } }); } private class ComboRenderer extends BasicComboBoxRenderer { private static final long serialVersionUID = 1L; @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); final Object fntObj = value; final String fontFamilyName = (String) fntObj; setFont(new Font(fontFamilyName, Font.PLAIN, 16)); return this; } } }

ttf:

otf:

ambos son la misma fuente pero diferentes tipos de archivos de fuentes

Estoy ejecutando Java 7 en Windows 7

Según Miguel Sousa de Adobe, el error no está en las fuentes https://github.com/adobe/source-sans-pro/issues/32#issuecomment-23319673

Solo estoy configurando la fuente predeterminada para la nueva fuente. La versión TTF funciona sin problemas

Font font_o = Font.createFont(Font.TRUETYPE_FONT, fonts.class.getResourceAsStream("fonts/TTF/SourceSansPro-Regular.ttf")); //Font font_o = Font.createFont(Font.TRUETYPE_FONT, fonts.class.getResourceAsStream("fonts/OTF/SourceSansPro-Regular.otf")); Font font_n=font_o.deriveFont(Font.PLAIN, UIManager.getLookAndFeelDefaults().getFont("defaultFont").getSize()); UIManager.getLookAndFeelDefaults().put("defaultFont",font_n);

¿Por qué hay una diferencia en la altura de línea ?