2012-06-13 38 views
10

Quiero crear una salida similar a una consola utilizando JTextPane. Por lo tanto estoy usando una fuente de espacio fijo:Fuente/símbolos monoespaciados para JTextPane

textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); 

Esto funciona bien para todo tipo de ALPHANUM (como az, 0-9, etc.) caracteres, pero cuando se trata de símbolos como ' \ u2588' (█), la fuente ya no está monoespaciada.

¿Olvidé algo? ¿O no hay una fuente monoespaciada que incluye smybols?

Respuesta

10

Ok, en primer lugar, me parece que estás tratando de abordar un par de cosas diferentes aquí, así que trataré de abordarlas por separado.

1. Necesita una fuente que esté monospaciada para todos los caracteres Unicode, símbolos u otros.

Según la página this, había 12886 caracteres alfanuméricos y de "símbolos" definidos por el estándar Unicode 3.2. Unicode ahora está en 6.0, por lo que probablemente podamos suponer que ese número es más grande ahora. También supongo que "alfanumérico" significa caracteres en inglés, ya que Unicode admite más de 100000 caracteres en muchos idiomas. En cualquier caso, 12886 caracteres y símbolos reconocidos en inglés siguen siendo MUCHO, y dudo que haya muchas fuentes gratuitas que los respalden a todos.

Dicho esto, termino usando Courier New para la mayoría de mis aplicaciones Java que necesitan una fuente monoespaciada con soporte de caracteres. Admite el carácter '\ u2588' que mencionó anteriormente, así como muchos otros importantes, como el símbolo de "grados".

2. Esta fuente mono-espaciada es necesario que haya "multiplataforma"

que sé con certeza que Mac OS X y todos los sabores de soporte de Windows Courier New, y las versiones de Linux que se ejecutan en Do también (RedHat ... no puede recordar el número de versión), aunque no todas las versiones de Linux tienen esta fuente de forma nativa. De todos modos ... puede probar Courier New y ver si le funciona. De lo contrario, probablemente pueda encontrar herramientas gratuitas en línea para probar el soporte de fuente/caracteres.

Consideraciones finales

me gusta decirlo, pero dudo que hay muchas fuentes por ahí que soportan todos los caracteres alfanuméricos/símbolo definido por el estándar Unicode, y menos aún de ser mono-espaciadas, cruz -plataforma, y ​​gratis. Si es posible, podría ser más valioso su tiempo para tratar de averiguar qué símbolos necesitará con certeza, luego elija una fuente que admita esos símbolos y, a su vez, sea compatible con las plataformas en las que sabe que ejecutará su aplicación. Si necesita absolutamente tener soporte para todos los símbolos Unicode, desafortunadamente, probablemente no sea gratis.

+0

Con caracteres alfanuméricos me refería a a-Z, 0-9 etc. Courier New funcionó bien para mí. – user28061

+0

Recomiendo el código fuente pro para una buena fuente gratuita de plataforma cruzada. Deberá agruparlo en su instalador o hacer que los usuarios lo instalen de forma manual. https://github.com/adobe-fonts/source-code-pro/releases – Appak

3

La fuente monoespaciada funciona en OS X, pero no en Windows. Lo extraño es que monoespaciado está configurado para usar Courier New en Windows a través de fontconfig.properties.

De hecho, he registrado esto como un error con Oracle; Aquí hay un código de muestra que se representa correctamente en OS X pero la fuente monoespaciada produce cuadros cuadrados en Windows.

import java.awt.BorderLayout; 
import java.awt.Font; 

import javax.swing.JEditorPane; 
import javax.swing.JFrame; 

public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame("editor test"); 
     f.getContentPane().setLayout(new BorderLayout()); 
     f.add(pane("monospaced"), BorderLayout.NORTH); 
     f.add(pane("Courier New"), BorderLayout.SOUTH); 
     f.pack(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 

    private static JEditorPane pane(final String name) { 
    JEditorPane p = new JEditorPane(); 
    final Font currFont = p.getFont(); 
    p.setFont(new Font(name, currFont.getStyle(), currFont.getSize())); 
    p.setText(name + " - 8\u1d00.\u1d0d."); 
    return p; 
    } 
} 

Intenté agregar \ u2588 a él y se ve bien en OS X también monoespaciado.

Cuestiones relacionadas